2017-03-28 106 views
0

如何更改特定緩衝區的當前工作目錄並將其更改爲其他緩衝區的先前值?VIM:僅更改當前緩衝區的工作目錄

更確切地說,我想要做的是爲特定文件類型提供自動命令,當包含該文件類型的緩衝區處於活動狀態時,它將更改當前工作目錄。在與其他緩衝區一起工作時將其改回。

我有這樣的事情,在我的vimrc:

autocmd BufEnter *.py :lcd%:p:h 
autocmd BufLeave *.py :lcd- 

這裏的想法是,我想對Python的文件時,切換到文件所在的目錄和別的東西,例如工作時切換到以前的目錄文本,vimL等。顯然,它沒有工作。我也嘗試使用BufWinLeave,但它沒有改變任何東西。

你能指出這裏有什麼問題嗎?或者也許有一個更簡單的解決方案呢?

+0

如果':lcd'隻影響* .py文件,那麼你爲什麼會甚至嘗試恢復的CWD其他緩衝區?如果該緩衝區的CWD從未改變過,那麼你將恢復到什麼狀態? –

+0

請注意':lcd'是窗口本地的,而不是緩衝區本地的。 – romainl

+0

@ work.bin as romainl said window-local,not buffer- or file-local。在同一個窗口中,我可以有幾個不同文件類型的緩衝區。而且我希望cwd對於所有緩衝區都是相同的,除了.py文件,我想將CWD更改爲包含.py文件的dir。 – mfedoten

回答

0

我想你可以完成與下面類似的東西:

augroup CDRooter 
    autocmd! 
    autocmd BufWinEnter * if &filetype == 'python' | lcd %:p:h | else | lcd! | endif 
augroup END 

注:我不知道:lcd -將工作做好。相反,我使用:lcd!來簡單地將窗口恢復爲使用全局當前工作目錄。

基本思想是每當你進入一個窗口嗅探文件類型並相應地執行:lcd

如需更多幫助,請參見:

:h 'filetype' 
:h BufWinEnter 
:h :lcd 
:h :augroup 
:h :autocmd 
:h :if 
+0

那真的不行。它按預期工作,但不是我想要的。我不想進入主目錄,我想轉到打開文件(而不是.py)的目錄。 ':當我手動嘗試時,lcd -'沒有問題。但在我的問題自動命令它不,似乎cwd多次更改爲相同的目錄,因爲'ICD - '返回相同的目錄(封裝python文件)。 – mfedoten

+0

@mfedoten我已經改爲使用':lcd!'來爲非python窗口使用全局當前工作目錄。這可能不是你想要的。您可能希望對某些特定的非python緩衝區使用':lcd'。如果是這種情況,您可能需要一些機制將正確的目錄存儲在緩衝區變量中,並將其用於::lcd到正確的目錄。或者依靠某些命令將':lcd'重新設置到正確的位置(例如fugitive.vim的':Glcd') –

相關問題