2013-04-24 6 views
1

я собрал следующую кучу удивительности:autocmd функция всегда выполняется дважды

if !exists("g:AsciidocAutoSave") 
    let g:AsciidocAutoSave = 0 
endif 

fun! AsciidocRefresh() 
    if g:AsciidocAutoSave == 1 
    execute 'write' 
    execute 'silent !asciidoc -b html5 -a icons "%"' 
    endif 
endf 

fun! AsciidocFocusLost() 
    augroup asciidocFocusLost 
    autocmd FocusLost <buffer> call AsciidocRefresh() 
    augroup END 
endfun 

augroup asciidocFileType 
    autocmd FileType asciidoc :call AsciidocFocusLost() 
augroup END 

Единственная проблема заключается в: Это экономит дважды каждый раз ВИМ теряет фокус, когда в asciidoc файле.

Когда я поставил :autocmd asciidocFileType в командной строке, он показывает:

---Auto-Commands--- 
asciidocFileType FileType 
    asciidoc :call AsciidocFocusLost() 
       :call AsciidocFocusLost() 

То же самое с :autocmd asciidocFocusLost и AsciidocRefresh().

Почему это дублирование?

ответ

2

Я не могу вам сказать наверняка почему вы получили эти дубликаты, но канонический способ предотвратить это расчистке augroup первое (множественный сорсинг?):

augroup asciidocFileType 
    autocmd! 
    autocmd FileType asciidoc :call AsciidocFocusLost() 
augroup END 

Поскольку у вас есть только один вы также можете сделать это в одной команде:

augroup asciidocFileType 
    autocmd! FileType asciidoc :call AsciidocFocusLost() 
augroup END 
+0

Спасибо. Тем временем я нашел трюк с «!», Сделав даже группы ненужными. Но я думаю, что я не единственный, у кого есть аналогичная проблема, поэтому вопрос не является абсолютно ненужным. – Profpatsch

+0

С '!', Augroups важны; в противном случае вы можете очистить другие, одинаковые события + шаблоны autocmds (из других плагинов) тоже! ': Augroup 'ограничивает очистку вашей собственной группой. –

+0

А, ладно. Благодарю. – Profpatsch