Vim 长文件路径在快速修复窗口中中断/拆分为多行



长文件路径在 Vim 快速修复窗口中被分解为多行,例如不允许跳转到 qf 中显示的错误位置。

文件(以及周围的行(在快速修复窗口中显示为(示例是neomake pdflatex的输出(

|| Enter file name:
|| /long/path/to/file/.../loca
tionOfTexFiles/myTexFile.tex|144 error| Emergency stop.
|| read

为了能够通过 lnext/cnext 跟踪文件行,我应该有

/long/path/to/file/.../locationOfTexFiles/myTexFile.tex|144 error| Emergency stop.

对于快速修复文件,我有以下相关的(在我看来(设置,这些设置设置为:

setlocal nolinebreak
setlocal nowrap
setlocal textwidth=9999

所以我想知道如何在快速修复窗口中的一行中显示文件路径?

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

现在,我不知道"neomake pdflatex",但看起来该工具创建了换行符,而不应该,因为 Vim 正在捕获输出,并且没有接收终端(或用户(。朝这个方向调查(或在项目的跟踪器上打开问题(可能会有所帮助。

前面提到的 Vim 选项('linebreak''wrap'等(与它无关。它们适用于普通缓冲液;这样的快速修复缓冲区是不可修改的。

解决方法

一种可能的解决方法可能是首先:cd到"更接近"已处理文件(甚至:set autochdir(的目录;这可能会避免输出中的长路径。

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

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

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

所以。这意味着您需要一种方法来修复路径名。最好在 vim 之外进行。我并不是说这是微不足道的。我只是说,如果你有一个能够修复pdflatex输出的程序,那么你离解决方案只有一个管道(加上错误代码的正确转发......

如果你更喜欢在 vim 脚本中实现它,这是可能的。但你会遇到副作用。在我的 BuildToolsWrapper 插件中,我可以在 vim 端对编译输出进行后处理,但结果远非完美。我正在处理getqflist()结果,并解析每一行。当我找到要修复文件名的行时,不仅仅是修复文件名,还要为其分配有效的缓冲区编号。请参阅此函数,我可以在其中用另一个文件名替换文件名。魔术发生在使用lh#buffer#get_nr()的地方。您仍然需要实现一个能够合并拆分文件名的 vim 脚本。

IOW:我的理解是vim不参与。它可以用来解决这个问题,但IMO这不是更容易采取的途径。

最新更新