0

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

文件(和周围的行)在 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.

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

setlocal nolinebreak
setlocal nowrap
setlocal textwidth=9999

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

4

2 回答 2

2

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

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

提到的 Vim 选项('linebreak','wrap'等)与它无关。它们适用于普通缓冲区;快速修复缓冲区本身是不可修改的。

解决方法

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

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

let &makeprg .= "| sed -e 's/.../...'"
于 2017-08-24T12:44:42.113 回答
2

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

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

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

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

于 2017-08-24T12:45:55.257 回答