Vim长文件路径在quickfix窗口中多行中断/拆分

Vim长文件路径在quickfix窗口中多行中断/拆分,vim,vim-quickfix,neomake,Vim,Vim Quickfix,Neomake,长文件路径在Vim quickfix窗口中的多行上被分解,例如,该窗口不允许跳转到qf中显示的错误位置 文件(及其周围的行)在quickfix窗口中显示为(示例为neomakes pdflatex的输出) 为了能够通过lnext/cnext访问文件行,我应该 /long/path/to/file/.../locationOfTexFiles/myTexFile.tex|144 error| Emergency stop. 对于quickfix文件,我有以下相关(在我的视图中)设置,设置为: s

长文件路径在Vim quickfix窗口中的多行上被分解,例如,该窗口不允许跳转到qf中显示的错误位置

文件(及其周围的行)在quickfix窗口中显示为(示例为neomakes pdflatex的输出)

为了能够通过lnext/cnext访问文件行,我应该

/long/path/to/file/.../locationOfTexFiles/myTexFile.tex|144 error| Emergency stop.
对于quickfix文件,我有以下相关(在我的视图中)设置,设置为:

setlocal nolinebreak
setlocal nowrap
setlocal textwidth=9999

因此,我想知道如何在quickfix窗口中一行显示文件路径?

:make
上,Vim调用
'makeprg'
,捕获输出,然后根据
'errorformat'
解析它。后者确实支持多行错误消息(cp.
:help errorformat multi-line
),但这主要是针对编译器指定的我称之为故意换行。您所遭受的是由于换行(由于路径过长)而导致的意外换行

现在,我不知道“neomakes pdflatex”,但它看起来像是该工具创建换行符,而它不应该创建换行符,因为Vim正在捕获输出,并且没有接收终端(或用户)。朝这个方向进行调查(或在项目跟踪者处打开一个问题)可能会有所帮助

提到的Vim选项(
'linebreak'
'wrap'
等)与此无关。它们适用于正常缓冲区;quickfix缓冲区本身是不可修改的

权变措施 一种可能的解决方法可能是先将
:cd
放在一个“更靠近”已处理文件的目录中(甚至
:set autochdir
);这样可以避免输出中的长路径

或者,您可以通过在编译器后添加
sed
阶段来“解混”输出:

let &makeprg .= "| sed -e 's/.../...'"

:make
上,Vim调用
'makeprg'
,捕获输出,然后根据
'errorformat'
解析它。后者确实支持多行错误消息(cp.
:help errorformat multi-line
),但这主要是针对编译器指定的我称之为故意换行。您所遭受的是由于换行(由于路径过长)而导致的意外换行

现在,我不知道“neomakes pdflatex”,但它看起来像是该工具创建换行符,而它不应该创建换行符,因为Vim正在捕获输出,并且没有接收终端(或用户)。朝这个方向进行调查(或在项目跟踪者处打开一个问题)可能会有所帮助

提到的Vim选项(
'linebreak'
'wrap'
等)与此无关。它们适用于正常缓冲区;quickfix缓冲区本身是不可修改的

权变措施 一种可能的解决方法可能是先将
:cd
放在一个“更靠近”已处理文件的目录中(甚至
:set autochdir
);这样可以避免输出中的长路径

或者,您可以通过在编译器后添加
sed
阶段来“解混”输出:

let &makeprg .= "| sed -e 's/.../...'"

如果我没弄错的话,问题出在pdflatex方面。
|
标记是一个很好的指示:每个输出行都有一个标记——如果文件名和/或行号被识别,它们将被输入到条之间

所以。这意味着您需要一种修复路径名的方法。最好在vim之外做。我不是说这是小事。我只是说,如果你能有一个程序能够修复pdflatex输出,你就离解决方案只有一个管道了(加上错误代码的正确转发…)

如果您喜欢在vim脚本中实现它,这是可能的。但你会有副作用。在我的示例中,我能够在vim端对编译输出进行后期处理,但结果远非完美。我正在处理
getqflist()
result,并解析每一行。当我找到一行要修复文件名时,不仅仅是修复文件名,还需要为其分配一个有效的缓冲区编号。在这里,我可以用另一个文件名替换一个文件名。当使用
lh#buffer#get#u nr()
时,就会产生神奇的效果。仍然需要实现一个能够合并拆分文件名的vim脚本


IOW:我的理解是vim没有参与。它可以用来解决这个问题,但在海事组织,这不是一条更容易的途径

如果我没有弄错的话,问题出在pdflatex方面。
|
标记是一个很好的指示:每个输出行都有一个标记——如果文件名和/或行号被识别,它们将被输入到条之间

所以。这意味着您需要一种修复路径名的方法。最好在vim之外做。我不是说这是小事。我只是说,如果你能有一个程序能够修复pdflatex输出,你就离解决方案只有一个管道了(加上错误代码的正确转发…)

如果您喜欢在vim脚本中实现它,这是可能的。但你会有副作用。在我的示例中,我能够在vim端对编译输出进行后期处理,但结果远非完美。我正在处理
getqflist()
result,并解析每一行。当我找到一行要修复文件名时,不仅仅是修复文件名,还需要为其分配一个有效的缓冲区编号。在这里,我可以用另一个文件名替换一个文件名。当使用
lh#buffer#get#u nr()
时,就会产生神奇的效果。仍然需要实现一个能够合并拆分文件名的vim脚本


IOW:我的理解是vim没有参与。它可以用来解决这个问题,但在海事组织,这不是一条更容易的途径

最好也重定向错误->
2>&1 | sed…
。如果我们不想失去错误状态,我们将不得不使用
set-opipefail
例如。文件名是确定的