每当我打开 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
。