My boot time for vim is about a half second (tested with \"--startuptime\"), but after I reload vimrc a couple times via source
, it gets slower subsequently. I have
The culprit here is your use of autocmd
. When you define an auto-command with
autocmd <Event> <Action>
vim defines a new auto command regardless of existing ones. So when you have several such auto commands in your .vimrc
and repeatedly source it (in this case, for every write), you end up defining hundreds and thousands of auto commands which all do the same thing repeatedly. Very soon this will blow up and slow your vim session, which is what you've been noticing.
What you need to do instead, is to group your auto commands and then clear the definitions for that group with autocmd!
. As a simple example:
augroup Group1
autocmd!
autocmd <Event1> <Action1>
autocmd <Event2> <Action2>
...
augroup END
You can have as many groups as you like, which allows you to organize them by similar actions/events.
This is my solution that also clears previous mappings:
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