http://vim.wikia.com/wiki/Set_working_directory_to_the_current_file上的文章提供了两条建议。
设置autochdir
选项。
set autochdir
在autocmd
事件中使用BufEnter
的另一个人。
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 :(得分:2)
理论上,我认为BufWinEnter自动命令可能是更好的方法,因为它避免了每次进入缓冲区时重置目录。
但是,您可能想知道,如果用户更改当前窗口的当前目录会发生什么。使用BufEnter自动命令,一旦重新进入该特定缓冲区,这将被重置,而BufWinEnter自动命令将不会触发。这可能是一个问题,但是在决定使用哪个自动命令时应该考虑这个问题。
BTW:我从来没有理解过,为什么要使用这样的自动命令而不是简单地设置'autochdir'。因为这就是这个选项的用途。我认为在过去,autochdir选项有一些错误,但据我所知,这已得到修复,因此不再需要这样的解决方法。