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的问题,但应该很久以前解决。 –