vim:执行文件组命令

vim:执行文件组命令

每当我打开 Golang 文件时,我都会尝试打开 NERDtree:

au FileType go exe 'NERDTree'

但是,当我从另一个目录打开 Go 文件时,它仍然显示当前目录。我可以将目录作为参数传递,但我不知道如何获取要打开的文件的目录。

答案1

当前文件名可以通过特殊%名称(:help cmdline-special);可以修改为完整路径,然后截掉文件名本身,得到路径:%:p:h, cp.:help filename-modifiers

这可以直接传递给内置命令,例如:edit,不幸的是不能传递给:NERDTree。为此,我们必须显式地表示expand()它,然后通过以下方式将结果插入命令行中:execute(在您的问题中不需要使用):

autocmd FileType go execute 'NERDTree' expand('%:p:h')

或者,你也可以直接:set autochdir,这样 Vim 就会自动切换目录。

autocmd FileType 扩展性不佳

我建议将任何设置、映射和特定于文件类型的自动命令放入~/.vim/ftplugin/{filetype}_whatever.vim(或{filetype}/whatever.vim; cp. :help ftplugin-name),而不是定义大量:autocmd FileType {filetype}; 。它更干净并且扩展性更好;不过,要求你有:filetype plugin on。设置覆盖默认文件类型插件中的内容应该改为~/.vim/after/ftplugin/{filetype}.vim

相关内容