2016-02-29 94 views
1

http://vim.wikia.com/wiki/Set_working_directory_to_the_current_file的文章提供了兩個建議。哪個autocmd事件用於將當前目錄設置爲當前窗口中文件的目錄?

  • 一個設置autochdir選項。

    set autochdir 
    
  • 另外,關於BufEnter事件使用autocmd

    autocmd BufEnter * silent! lcd %:p:h 
    

這個問題只有約autocmd

在StackOverflow上,還有其他帖子,其中答案建議使用autocmd BufEnter來解決此問題。

lcd是當地的一個窗口。除非我們明確地改變它,否則每個窗口的當前目錄保持不變。所以我很好奇爲什麼autocmd BufEnter在這裏被建議。這對我來說太過分了,因爲autocmd BufEnter每次在窗口之間切換時都會執行lcd,比如說Ctrl-w w,即使當我切換到的窗口中的緩衝區沒有改變。

我想,只要窗口中的緩衝區發生變化就足夠執行lcd,因此autocmd BufwinEnter就足夠了。

如果使用autocmd BufWinEnter代替,會出現什麼問題?

例如,讓我們考慮以下備用解決方案。

autocmd BufWinEnter * lcd %:p:h 

你能描述一個場景,其中所述autocmd BufEnter命令會做正確的事,但autocmd BufWinEnter命令不會?

+0

是否有原因,你不想設置'autochdir'? –

+0

@ChristianBrabandt我不想避免'設置autochdir'。我應該注意':help autochdir'提到,*「注意:當這個選項被啓用時,某些插件可能不起作用」*,但這不是我想要避免它的原因。由於'set autochdir',我在插件中沒有遇到任何問題。我想這個問題是關於'autocmd BufEnter'的,因爲這個解決方法出現在互聯網上的幾個地方引起了我的好奇心。 –

+0

啊好的。但首先,我認爲插件需要考慮到這一點,如果它們無法使用'autochdir',那麼我認爲這個信息來自一段時間,當這個選項有點兒的時候有點兒車。我記得netrw的問題,但應該很久以前解決。 –

回答

2

理論上,我認爲BufWinEnter自動命令可能是更好的方法,因爲它避免每次進入緩衝區時重置目錄。

但是,您可能想知道,如果用戶更改當前窗口的當前目錄,會發生什麼。使用BufEnter自動命令,一旦你重新進入特定的緩衝區,這將被重置,而BufWinEnter自動命令將不會觸發。這可能是個問題,但在決定使用哪種自動命令時應該考慮。

順便說一句:我從來沒有明白,爲什麼會使用這樣的自動命令,而不是簡單地設置'autochdir'。因爲這是這個選項的用途。我認爲在過去,autochdir選項有一些缺陷,但據我所知,這已經修復,所以這種解決方法不再需要了。

+0

因爲詢問有關更改文件目錄的(完成)任務比解釋e更容易。 G。你想要cd到該文件的項目的根目錄,或其他東西。 – intelfx