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
命令不會?
是否有原因,你不想設置'autochdir'? –
@ChristianBrabandt我不想避免'設置autochdir'。我應該注意':help autochdir'提到,*「注意:當這個選項被啓用時,某些插件可能不起作用」*,但這不是我想要避免它的原因。由於'set autochdir',我在插件中沒有遇到任何問題。我想這個問題是關於'autocmd BufEnter'的,因爲這個解決方法出現在互聯網上的幾個地方引起了我的好奇心。 –
啊好的。但首先,我認爲插件需要考慮到這一點,如果它們無法使用'autochdir',那麼我認爲這個信息來自一段時間,當這個選項有點兒的時候有點兒車。我記得netrw的問題,但應該很久以前解決。 –