我的vimrc中有以下几行
" Python indenting and folding
au! FileType python set foldmethod=indent
au! FileType python set nosmartindent
" C++ indenting and folding
au! FileType cpp set cino=i-s
au! FileType cpp set cinkeys=0{,0},0),:,!^F,o,O,e
au! FileType cpp set cinkeys-=0#
au! FileType cpp set smartindent
au! FileType cpp set foldmethod=syntax
fu! FUNC_ECHOVAR(varname)
:let varstr=a:varname
:exec 'let g:foo = &'.varstr
:echo varstr.' = '.g:foo
endfu
command! -nargs=1 ECHOVAR :call FUNC_ECHOVAR(<f-args>)
func! MYINFO()
:ECHOVAR cino
:ECHOVAR cinkeys
:ECHOVAR foldmethod
:ECHOVAR filetype
:ECHOVAR smartindent
endfu
command! MYINFOCMD call MYINFO() <C-R>
当我打开C ++文件并执行MYINFOCMD命令时,我看到了这个打印输出
cino = {1s
cinkeys = 0{0,},),:,0#,!^F,o,O,e
foldmethod = syntax
filetype = cpp
smartindent = 0
我不明白为什么autocmd FileType cpp无法正确设置这些变量,或者至少是我预期设置它们的方式。
有谁知道为什么我的au!加载.cpp文件时,命令没有触发?
答案 0 :(得分:2)
对每个自动命令事件和模式最多使用:au!
一次,因为它删除了以前定义的自动命令。 (如果您的vimrc文件多次获得source
d,请使用它,因此自动命令不会重复。)来自:help autocmd-remove
:
:au[tocmd]! [group] {event} {pat} [nested] {cmd}
Remove all autocommands associated with {event} and
{pat}, and add the command {cmd}. See
|autocmd-nested| for [nested].
或者,将所有自动命令放在一个组中,并使用:au!
一次(:help autocmd-groups
):
augroup Erotemic
au!
" Python indenting and folding
au FileType python set foldmethod=indent
au FileType python set nosmartindent
" C++ indenting and folding
au FileType cpp set cino=i-s
au FileType cpp set cinkeys=0{,0},0),:,!^F,o,O,e
au FileType cpp set cinkeys-=0#
au FileType cpp set smartindent
au FileType cpp set foldmethod=syntax
augroup END
当我尝试前两个自动命令行时,会发生以下情况,然后在每个自动命令行之后列出FileType python
个自动命令:
:au! FileType python set foldmethod=indent
:au FileType python
--- Auto-Commands ---
FileType
python set foldmethod=indent
:au! FileType python set nosmartindent
:au FileType python
--- Auto-Commands ---
FileType
python set nosmartindent