按文件位置有条件地调用autocmd

时间:2012-08-25 06:35:28

标签: vim

.vimrc文件中,如果从特定目录加载文件,是否可以只执行autocmd?

在MacVim中,我的.vimrc中有一行代码自动cds到包含我正在编辑的文件的目录 - 但是当我访问git文件时它会导致错误:Gedit创建(vim)包逃犯)。

autocmd是:

autocmd BufEnter * execute "chdir ".escape(expand("%:p:h"), ' ')

错误是:

Error detected while processing BufEnter Auto commands for "*":

:echo expand("%")很明显,Fugitive会创建以fugitive:///开头的路径,所以我想弄清楚如何测试文件路径的前12个字符== {{1} }

3 个答案:

答案 0 :(得分:2)

嗯,我想我误会了。你正在改变shell中的目录,而不是在Vim中,不是吗?在这种情况下,autochdir是不够的。

:Gedit创建一个带有时髦名称的临时文件:

:e vimrc
:Gedit ~2
:echo expand("%")
fugitive:///home/romainl/.vim/.git//8aece3dc3c19522c33c997bc82a2487e3bdf013b/vimrc
:echo expand("%:p:h")
fugitive:///home/romainl/.vim/.git//8aece3dc3c19522c33c997bc82a2487e3bdf013b/

你的shell无法进入cd到那个“目录”,因为它不是一个有效的路径。

但是,我有set autochdir告诉vim cd自动到包含当前文件的目录。多亏了我可以看到临时文件在:

:pwd
/tmp/vGiSmH2

我可以使用:pwdcd的输出。

答案 1 :(得分:1)

这可以使用strpart函数来实现。

我最终解决了以下问题:

if strpart(expand("%:p:h"), 0, 15) == "/Users/myputer/"
   autocmd BufEnter * execute "chdir ".escape(expand("%:p:h"), ' ')
endif

如果文件夹以cd

开头,则只有/Users/myputer/

答案 2 :(得分:0)

有一个ticket for this issue

{{1}}

这很有效。