2012-05-24 65 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)。