2012-05-24 70 views
8

我在Vim中为我编译了一些东西。它看起来像这样:quickfix窗口中的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到构建,构建它,和CD回来,我留在我的项目目录。

但是,有时,当构建失败并出现quickfix窗口时,它将显示与我的项目dir(yay)相关的文件名,但有时在同一个文件中显示绝对路径。构建脚本的输出总是显示相对路径,vim正确处理,即找到正确的文件。

我怀疑路径处理是负责任的。我的问题是,有什么问题,是否有更好的方法来处理切换到构建目录并返回?我总是希望显示相对路径。

谢谢!

回答

3

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

如果您确实需要使用:lcd,最好使用位置列表(:lmake),因为该位置列表也位于窗口本地。但是我首先会尝试使用全局的:cd,因为交换机只是暂时的,无论如何,您并不在意恢复到目前为止的实际原始值。

+0

的确如此。我稍后再拍一张照片并报告。 – Christoph

0

正如Ingo指出的那样,路径是相对于从前一个窗口继承的quickfix窗口的当前目录。

在执行make之前,您可以使用autocmd QuickFixCmdPre来设置正确的路径。

如果使用Project Root plugin以下内容添加到您的.vimrc

augroup changeQfCmdDir 
    au! 
    autocmd QuickFixCmdPre make ProjectRootCD 
augroup END 

,然后quickfix窗口的路径将被之前由:make(你也可以指定其他许多命令填充纠正了使用quickfix窗口:grep,lgrep,cscope)。