2014-03-12 76 views
0

我在我的vimrc以下行自動命令似乎不觸發cinkeys

" 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文件時,命令不會觸發?

回答

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 
+0

這很有道理,我想!只是意味着強制手術。我遇到了麻煩,所以我只是想,我會強迫一切。我只是:%s/^ au!/ au /而我的煩惱消失了。謝謝! – Erotemic