2015-02-05 57 views
0

我在我的機器上有一個git倉庫的多個工作目錄,當我從vim中打開每個文件時,我想能夠打開一個新的文件,包含當前緩衝區文件的頂層項目目錄。Vim:從祖先項目目錄開始編輯文件

因此,舉例來說,假設我在緩衝區打開這些文件:

~/testing/MyProject/src/main.cc 
~/mirror/MyProject/src/lib/module.h 

如果我是編輯module.h緩衝,我希望能夠輸入:e <something?>並讓它自動完成~/mirror/MyProject/

回答

1

一般常用的方法是將當前工作目錄設置爲項目的根目錄。

但是,如果您確實需要更改當前的工作目錄,則可能需要查看諸如fugitive.vim:Gedit命令之類的命令,該命令可用於編輯與存儲庫根目錄相關的文件。例如:Gedit /foo.txt

+0

哇,fugutive.vim非常棒!感謝指針! – NHDaly 2015-09-29 05:57:12

0

我設法得到它通過增加cabbr <expr> /.vimrc工作:

" Makes // expand to the containing MyProject directory. 
cabbr <expr>/FindMyProjectInPath() 

function FindMyProjectInPath() 
    let path=expand("%:p:h") 
    while path != "/" && fnamemodify(path,":t") != "MyProject" 
    let path = fnamemodify(path, ":p:h:h") 
    endwhile 

    return path 
endfunction 

所以,那麼,如果我編輯~/mirror/MyProject/src/lib/module.h,我可以輸入:e //,並擴展到:e ~/mirror/MyProject/

如果我不在MyProject目錄中,它將保持//:如果我正在編輯~/other_project/main.cpp,那麼:e //將不會展開。

您輸入的第一個/cabbr <expr> /匹配,第二個使其擴大。

你也許也可以使用一個變量來允許在編輯時動態設置「MyProject」。

+0

請小心這個縮寫詞,因爲它也會在搜索過程中擴展。我建議你看看':h getcmdtype()',這樣你就可以防範這些情況 – 2015-02-05 23:21:41