使用哪个autocmd事件将当前目录设置为当前窗口中文件的目录?

时间:2016-02-29 06:34:53

标签: vim

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命令不会执行的情况吗?

1 个答案:

答案 0 :(得分:2)

理论上,我认为BufWinEnter自动命令可能是更好的方法,因为它避免了每次进入缓冲区时重置目录。

但是,您可能想知道,如果用户更改当前窗口的当前目录会发生什么。使用BufEnter自动命令,一旦重新进入该特定缓冲区,这将被重置,而BufWinEnter自动命令将不会触发。这可能是一个问题,但是在决定使用哪个自动命令时应该考虑这个问题。

BTW:我从来没有理解过,为什么要使用这样的自动命令而不是简单地设置'autochdir'。因为这就是这个选项的用途。我认为在过去,autochdir选项有一些错误,但据我所知,这已得到修复,因此不再需要这样的解决方法。