重新加载Vimrc文件需要更长时间

Kev*_*Lee 1 vim

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

" source as soon as we write the vimrc file
if has("autocmd")
  autocmd bufwritepost .vimrc source $MYVIMRC
endif
Run Code Online (Sandbox Code Playgroud)

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

是否有一个"清晰的工作空间"或更好的方法来解决这个问题,以便我可以整天保持在我的单一gvim会话的舒适范围内?

FDi*_*off 11

每次autocmd来源时,它都会被添加到autocmd列表中.因此,当您保存时,您可能会花费数千次来获取vimrc,因为每次您获取时都会将autocmd添加到列表中.(您可以看到autocmd通过执行多次添加:au bufwritepost)

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

augroup NAME_OF_GROUP
  autocmd!
  autocmd bufwritepost .vimrc source $MYVIMRC
augroup end
Run Code Online (Sandbox Code Playgroud)

autocmd!从组中移除所有自动命令.

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


use*_*332 5

也许您遇到过它概述的现象

:h autocommand
Run Code Online (Sandbox Code Playgroud)

帮助说:

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

:autocmd!   " Remove ALL autocommands for the current group.
Run Code Online (Sandbox Code Playgroud)

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

:if !exists("autocommands_loaded")
:  let autocommands_loaded = 1
:  au ...
:endif
Run Code Online (Sandbox Code Playgroud)

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

augroup BWCCreateDir
    autocmd!
    autocmd BufWritePre * :call s:MkNonExDir(expand('<afile>'), +expand('<abuf>'))
augroup END
Run Code Online (Sandbox Code Playgroud)