5

我整理了以下一堆令人敬畏的东西:

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

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

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

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

:autocmd asciidocFocusLost和相同AsciidocRefresh()

为什么会出现这种重复?

4

2 回答 2

5

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

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

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

augroup asciidocFileType
    autocmd! FileType asciidoc :call AsciidocFocusLost()
augroup END
于 2013-04-24T16:08:56.943 回答
0

@ingo-karkat的回答很好,但我想我知道为什么你会得到两倍的autocmds 以及如何自然地防止它:

vim/Neovim 的一些发行版默认确保filetype plugin indenton. 用neovimenv XDG_CONFIG_HOME=/dev/null nvim -c 'filetype'或用vim测试它env HOME=/dev/null vim -c filetype

如果输出是

filetype detection:ON  plugin:ON  indent:ON

然后你不需要添加filetype * on到你的 vimrc 中。

于 2018-03-16T09:36:32.247 回答