快速修复窗口中的Vim文件路径

9

我在Vim中编写了一个函数,用于为我编译一些东西。如下所示:

function! MyFunc(mode)
  lcd ./build
  pwd
  let &makeprg='the_command some_script_file'
  let &errorformat='some format'.','
  let &errorformat.='%-G%.%#'
  silent make
  lcd ..
  cwindow
endfunction

我通常在项目目录中打开vim,然后运行这个函数,它会cd到build目录,进行构建,然后再cd回来,以便我留在我的项目目录中。
然而,有时当构建失败并弹出快速修复窗口时,它会显示相对于我的项目目录的文件名(好棒),但在同一文件中的其他时候,则显示绝对路径。构建脚本的输出始终显示相对路径,并且vim可以正确处理两种情况,即它找到了正确的文件。
我怀疑路径处理有问题。我的问题是,出了什么问题,有没有更好的方法来处理进入构建目录和返回?我总是想要显示相对路径。
谢谢!!
2个回答

5

我认为这与lcd有关。当从您的函数打开quickfix窗口时,它将继承当前窗口的本地目录。但是,当从其他任何地方打开quickfix窗口(或在运行您的函数之前),它将保留全局工作目录。当存在不匹配时,Vim必须显示绝对路径。

如果您真的需要使用:lcd,最好使用位置列表(:lmake),因为那也将局限于窗口内部。但首先我会尝试使用全局:cd,因为切换只是暂时的,而且您暂时不需要恢复实际原始值。


没错。我稍后会尝试一下并回报结果。 - Christoph

1
正如Ingo所指出的那样,路径是相对于quickfix窗口的当前目录的,该目录是从前一个窗口继承而来的。
您可以使用autocmd QuickFixCmdPre在执行make之前设置正确的路径。
如果您使用Project Root plugin,请将以下内容添加到您的.vimrc文件中:
augroup changeQfCmdDir
   au!
   autocmd QuickFixCmdPre make ProjectRootCD
augroup END

如果使用:make命令填充快速修复窗口,那么在填充之前将会更正快速修复窗口的路径(您还可以指定其他使用快速修复窗口的命令,如grep,lgrep,cscope)。请注意保留HTML标记。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接