Debugging Vim Slowness
A lot of new things to learn today!
Vim was behaving very slowly each time I saved a Python file on the server. To investigate, I set verbosefile and verbose=9, then saved the file again.
This just gave me vague hints about which commands are likely to cause slowness. 1
I hit a roadblock afterwards, unable to find any more information from the logs.
While comparing the different configurations between server and my home machine, I noticed extra variables in the runtimepath on the server.
Examining further, I noticed that there are some plugins that are being imported into the vim which are not set by me.
Fun Fact: Vim loads the
vimrcfile from/usr/share/vimby default for all the users.
The server runs Debian. The /usr/share/vim/vimrc sources debian.vim, which modifies the runtimepath. 2
I then had a thought that Vim fires an BufWritePost event everytime you write a file. Maybe that can reveal more information for debugging, and lo-and-behold autocmd BufWritePost revealed that
the syntastic autogroup was executing commands that I saw earlier in the logs responsible for the delay. 3
The syntastic plugin was being loaded to vim because it’s parent directory /usr/share/vim/addons/plugin was added to the runtimepath by debian.vim.
This plugin is deprecated and was performing actions I didn’t need.
While I could have removed the path from my runtimepath using runtimepath-=/usr/share/vim/addons, but I didn’t feel comfortable doing it (who knows what else I might loose)
Instead, I decided to remove the specific autocmd causing the issue. I created a ~/.vim/after/plugin directory and added a syntastic.vim file with the following line:
autocmd! syntastic BufWritePost *
This line removes the autocmd for syntastic on the BufWritePost event. Problem partially solved!