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 not debugged .vimrc in a systematic way, so I am not sure how to proceed. Setting verbose
helps to kind of see what is going on and I am almost certain that the .vimrc is being loaded more than once. (especially filetype.vim
and ftplugin.vim
) Whenever I press Ctrl-C to stop the hang, I get an error in filetype.vim
, which I think is because vim spends most time trying to load filetype.vim
. The most probable culprit I see is the auto reload of .vimrc:
if has("autocmd")
autocmd bufwritepost .vimrc source $MYVIMRC "auto source vimrc
endif
How could I stop this from happening?
The culprit here is your use of
autocmd
. When you define an auto-command withvim 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: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: