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

Vim 要使用哪个autocmd事件将当前目录设置为当前窗口中文件的目录?,vim,Vim,这篇文章提供了两条建议 设置autochdir选项的程序 set autochdir 另一个在BufEnter事件上使用autocmd autocmd BufEnter * silent! lcd %:p:h 此问题仅与autocmd有关 关于StackOverflow,还有一些帖子的答案建议使用autocmd BufEnter来解决这个问题 但是lcd对于窗口来说是本地的。每个窗口的当前目录保持不变,除非我们显式更改它。所以我很好奇为什么这里建议使用autocmd BufE

这篇文章提供了两条建议

  • 设置
    autochdir
    选项的程序

    set autochdir
    
  • 另一个在
    BufEnter
    事件上使用
    autocmd

    autocmd BufEnter * silent! lcd %:p:h
    
此问题仅与
autocmd
有关

关于StackOverflow,还有一些帖子的答案建议使用
autocmd BufEnter
来解决这个问题

但是
lcd
对于窗口来说是本地的。每个窗口的当前目录保持不变,除非我们显式更改它。所以我很好奇为什么这里建议使用
autocmd BufEnter
。我觉得这太过分了,因为每当我在窗口之间切换时,比如说使用
Ctrl-w
,即使我切换到的窗口中的缓冲区没有改变,
autocmd-BufEnter
也会执行
lcd

我认为,每当窗口中的缓冲区发生变化时,执行
lcd
就足够了,因此
autocmd bufwinter
就足够了

如果改用
autocmd bufwenter
,会出现什么问题

例如,让我们考虑下面的替代方案。

autocmd BufWinEnter * lcd %:p:h

你能描述一个场景吗?
autocmd-BufEnter
命令可以做正确的事情,但是
autocmd-bufwenter
命令不行?

理论上,我认为bufwenter-autocommand可能是更好的方法,因为它可以避免每次进入缓冲区时都重置目录

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


顺便说一句:我一直不明白,为什么会使用这样的自动命令而不是简单地设置“autochdir”。因为这就是这个选择的目的。我认为在过去,autochdir选项有一些错误,但据我所知,这已经被修复,因此不再需要这样的解决方法。

是否有原因,您不想设置“autochdir”?@ChristianBrabandt我不想避免
设置autochdir
。我应该注意到,
:help autochdir
提到,“注意:当此选项在某些插件上时,可能无法工作”,但这不是我想避免使用它的原因。由于
set autochdir
,我在使用的插件中没有遇到任何问题。我希望这个问题是关于
autocmd BufEnter
的,因为这个出现在互联网上好几个地方的变通方法激起了我的好奇心。啊,好的。但首先,我认为插件需要接受这一点,并且必须加以修复,如果它们不能接受“autochdir”,其次,我认为这些信息来自某个时候,当时这个选项有点问题。我记得netrw的问题,但那应该在很久以前就解决了,因为询问更改到文件目录的(编造的)任务比解释e更容易。G您希望cd到该文件的项目根目录或其他内容。