autocmd 函数总是执行两次

Pro*_*sch 6 vim duplication 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
Run Code Online (Sandbox Code Playgroud)

唯一的问题是:每次 vim 在asciidoc文件中失去焦点时,它都会保存两次。

当我输入:autocmd asciidocFileType命令行时,它显示:

---Auto-Commands---
asciidocFileType  FileType
    asciidoc   :call AsciidocFocusLost()
               :call AsciidocFocusLost()
Run Code Online (Sandbox Code Playgroud)

:autocmd asciidocFocusLost与相同AsciidocRefresh()

为什么要重复?

Ing*_*kat 7

我无法确定为什么你会得到这些重复项(多个来源?),但防止这种情况的规范方法是清除第augroup一个:

augroup asciidocFileType
    autocmd!
    autocmd FileType asciidoc :call AsciidocFocusLost()
augroup END
Run Code Online (Sandbox Code Playgroud)

由于您只有一个定义,因此您也可以通过一个命令来执行此操作:

augroup asciidocFileType
    autocmd! FileType asciidoc :call AsciidocFocusLost()
augroup END
Run Code Online (Sandbox Code Playgroud)

  • 对于`!`,augroups 很重要;否则,您也可以清除其他相同的事件+模式自动命令(来自其他插件)!`:augroup` 将清除限制在您自己的组内。 (2认同)