2

我的 .vimrc 中有以下内容,以便在保存后处理

" source as soon as we write the vimrc file
if has("autocmd")
  autocmd bufwritepost .vimrc source $MYVIMRC
endif

但是,我有一个更复杂的文件,似乎在保存后发布 vimrc 文件的时间越来越长,直到我不得不退出我的 gvim 会话并重新开始。

有没有“清晰的工作空间”或更好的方法来解决这个问题,这样我就可以整天享受我的单一 gvim 会话的舒适感?

4

2 回答 2

13

每次获取 autocmd 时,都会将其添加到 autocmd 列表中。因此,当您保存时,您可能会数千次采购您的 vimrc,因为每次您采购时都会将 autocmd 添加到列表中。(您可以看到 autocmd 通过 do 多次添加:au bufwritepost

要解决此问题,您只需将 autocmd 包装在 augroup 中并在加载时清除该组。

augroup NAME_OF_GROUP
  autocmd!
  autocmd bufwritepost .vimrc source $MYVIMRC
augroup end

从组中autocmd!删除所有自动命令。

帮助页面阅读:h autocmd-define:h autocmd-groups

于 2013-08-02T19:46:36.057 回答
4

也许你遇到了它在

:h autocommand

帮助说:

当你的 .vimrc 文件被调用两次时,自动命令将出现两次。为避免这种情况,请在定义自动命令之前将此命令放入 .vimrc 文件中:

:autocmd!   " Remove ALL autocommands for the current group.

如果你不想删除所有的自动命令,你可以使用一个变量来确保 Vim 只包含一次自动命令:

:if !exists("autocommands_loaded")
:  let autocommands_loaded = 1
:  au ...
:endif

我习惯像这样对我的自动命令进行分组

augroup BWCCreateDir
    autocmd!
    autocmd BufWritePre * :call s:MkNonExDir(expand('<afile>'), +expand('<abuf>'))
augroup END
于 2013-08-02T19:47:45.123 回答