Autocmd似乎不会触发cinkeys

时间:2014-03-12 17:01:58

标签: vim

我的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文件时,命令没有触发?

1 个答案:

答案 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