2017-03-06 51 views
1

我已經知道如何退出Vim,現在我想知道是否有可能在按gf時強制Vim在當前目錄中搜索'/somedir/file.js',就好像它是'./somedir/file.js'?使VIM考慮當前文件夾的根

UPD:有question如何設置一般路徑,但它不會幫助/myfolder/指向某個我想要的文件夾。 /myfolder/始終是當前音量根的絕對路徑。

+2

也許這有助於http://stackoverflow.com/questions/2288756/how-to-set-working-current-directory-in-vim –

+0

只需刪除第一個'/'? –

+0

還有另外一個建議:在根目錄下創建符號鏈接:)但是,嚴格來說,問題是如何讓VIM考慮'/'不是卷的根目錄,而是項目的根目錄(或其他某個文件夾)。在開始時刪除斜線會破壞項目。 –

回答

1

Vim計數以/開頭的文件名始終爲文件系統根目錄,因爲您觀察到的文件名爲 。如果不是這樣的話,如果'isf'( 控制什麼是文件名的選項)接受了正則表達式,這將是更容易解決的 。但是,如果您從'isf'中刪除/,則不再將斜槓 視爲文件名的一部分。

我能想到的唯一解決方案是使用可視模式 gf。您可能知道,如果您有視覺選擇的文字並使用gf 那麼視覺選擇將被考慮,而不是'isf' 匹配。然後,我們需要做的就是直觀地選擇 光標下的文件名稱,但不包括可能的前導/。這可以通過地圖來解決,如果 你不介意搞亂你以前的搜索:

nnoremap <silent> gf :let @/ = substitute(expand('<cfile>'), '^/', '', '') 
        \ <bar>normal gngf<cr> 

這將覆蓋gf設置下光標 (expand())搜索到的文件名,如果減去任何斜線(substitute())然後運行 選擇匹配的正常命令gn,最後運行 原始gf

如果你想保存你以前的搜索和恢復,你可以很容易地創建一個函數來包裝這一切。請注意,我也寫了這兩條線,只是因爲我是一個長線的公開敵人。但是,如果你只是想要測試它 刪除\並寫入一行。

現在您的gf將解釋爲/filefile。因此,如果你在 正確的目錄,這將工作。如果您需要在不同的 目錄中進行搜索,則需要的選項是'path''pa'對於 短。您可以提供要搜索的目錄列表。很像Unix shell的$PATH。被逗號隔開。從幫助(請務必閱讀 歇歇吧,有:h 'pa):

這是將使用 gf[f]f^Wf:find:sfind:tabfind時搜索的目錄列表和其他 命令,前提是正在搜索的文件具有相對路徑(不以「/」,「./」或「../」開頭)。 '路徑'選項中的目錄可能是相對的或絕對的。

總之,在你的項目中使用此,設置您的'path'如果需要 如你所願並啓用此地圖。或者在 :autocmd或類似的東西中自動運行。您並沒有像最初建議的那樣更改 項目的根目錄,但您有一種模擬 ,其中包括'path'中的所需目錄,然後強制gf至 忽略前導/

+0

真棒回答!謝謝,像魅力一樣工作! –

+0

快樂,它工作@AlexDolgov!如果您認爲問題已解決,請不要忘記接受正確答案;) – sidyll