2016-02-29 55 views
1

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命令不会?

+0

是否有原因,你不想设置'autochdir'? –

+0

@ChristianBrabandt我不想避免'设置autochdir'。我应该注意':help autochdir'提到,*“注意:当这个选项被启用时,某些插件可能不起作用”*,但这不是我想要避免它的原因。由于'set autochdir',我在插件中没有遇到任何问题。我想这个问题是关于'autocmd BufEnter'的,因为这个解决方法出现在互联网上的几个地方引起了我的好奇心。 –

+0

啊好的。但首先,我认为插件需要考虑到这一点,如果它们无法使用'autochdir',那么我认为这个信息来自一段时间,当这个选项有点儿的时候有点儿车。我记得netrw的问题,但应该很久以前解决。 –

回答

2

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

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

顺便说一句:我从来没有明白,为什么会使用这样的自动命令,而不是简单地设置'autochdir'。因为这是这个选项的用途。我认为在过去,autochdir选项有一些缺陷,但据我所知,这已经修复,所以这种解决方法不再需要了。

+0

因为询问有关更改文件目录的(完成)任务比解释e更容易。 G。你想要cd到该文件的项目的根目录,或其他东西。 – intelfx