without - Постепенно медленное время перезагрузки.vimrc
~/ vim plugged (2)
Виновником здесь является использование autocmd
. Когда вы определяете авто-команду с
autocmd <Event> <Action>
vim определяет новую команду auto независимо от существующих . Таким образом, когда у вас есть несколько таких автоматических команд в вашем .vimrc
и вы их постоянно создаете (в данном случае для каждой записи), вы в конечном итоге определяете сотни и тысячи автоматических команд, которые все повторяют одно и то же. Очень скоро это взорвется и замедлит вашу сессию vim, что вы и заметили.
Вместо этого вам нужно сгруппировать ваши автоматические команды, а затем очистить определения для этой группы с помощью autocmd!
, В качестве простого примера:
augroup Group1
autocmd!
autocmd <Event1> <Action1>
autocmd <Event2> <Action2>
...
augroup END
Вы можете иметь столько групп, сколько хотите, что позволяет вам организовывать их по аналогичным действиям / событиям.
Мое время загрузки для vim составляет около полсекунды (проверено с помощью «--startuptime»), но после того, как я пару раз перезагрузил vimrc через source
, впоследствии он замедляется. Я не отлаживал .vimrc систематически, поэтому не уверен, что делать дальше. Настройка verbose
помогает увидеть, что происходит, и я почти уверен, что .vimrc загружается более одного раза. (особенно ftplugin.vim
и ftplugin.vim
) Всякий раз, когда я ftplugin.vim
Ctrl-C, чтобы остановить зависание, я получаю ошибку в filetype.vim
, которая, я думаю, filetype.vim
, что vim тратит большую часть времени, пытаясь загрузить filetype.vim
. Наиболее вероятный виновник, которого я вижу, это автоматическая перезагрузка .vimrc:
if has("autocmd")
autocmd bufwritepost .vimrc source $MYVIMRC "auto source vimrc
endif
Как я мог предотвратить это?
Это мое решение, которое также очищает предыдущие сопоставления:
augroup VimrcGroup
autocmd!
" Make changes effective after saving .vimrc. Beware that autocommands are
" duplicated if .vimrc gets sourced again, unless they are wrapped in an
" augroup and the autocommands are cleared first using 'autocmd!'
autocmd bufwritepost $MYVIMRC call OnSavingVimrc()
augroup END
" Avoid infinite loops
if !exists("*OnSavingVimrc")
function! OnSavingVimrc()
" Clear previous mappings, they don't go away automatically when sourcing vimrc
mapclear
echo "Sourcing Vimrc after saving it"
source $MYVIMRC
endfunction
endif