在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窗口中的一行中显示文件路径?
答案 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这不是更容易实现的途径。