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

时间:2017-08-24 11:54:40

标签: vim vim-quickfix neomake

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

文件(及其周围的行)显示在quickfix窗口中(例如neomakes 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.

对于quickfix文件,我有以下相关(在我看来)设置,设置为:

setlocal nolinebreak
setlocal nowrap
setlocal textwidth=9999

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

2 个答案:

答案 0 :(得分:2)

:make上,Vim调用'makeprg',捕获输出,然后根据'errorformat'对其进行解析。后者确实支持多行错误消息(cp。:help errorformat-multi-line),但这主要是我所谓的故意换行符,正如编译器所指定的那样。你所遭受的是无意的换行,因为换行(由于过长的路径)。

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

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

变通方法

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

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

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

答案 1 :(得分:2)

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

因此。这意味着您需要一种方法来修复路径名称。在vim之外做它会更好。我不是说这是微不足道的。我只想说,如果你能有一个能够修复pdflatex输出的程序,那么你只需要远离解决方案(加上错误代码的正确转发......)。

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

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