vim reload

Tiempo de recarga progresivamente más lento de.vimrc



reload (2)

Mi tiempo de arranque para vim es aproximadamente medio segundo (probado con "--startuptime"), pero después de volver a cargar vimrc un par de veces a través de la source , se vuelve más lento posteriormente. No he depurado .vimrc de forma sistemática, por lo que no estoy seguro de cómo proceder. La configuración verbose ayuda a ver qué está pasando y estoy casi seguro de que el .vimrc se está cargando más de una vez. (especialmente ftplugin.vim y ftplugin.vim ) Siempre que ftplugin.vim Ctrl-C para detener el bloqueo, aparece un error en filetype.vim , que creo que es porque vim pasa la mayor parte del tiempo intentando cargar filetype.vim . El culpable más probable que veo es la recarga automática de .vimrc:

if has("autocmd") autocmd bufwritepost .vimrc source $MYVIMRC "auto source vimrc endif

¿Cómo podría evitar que esto suceda?


El culpable aquí es su uso de autocmd . Cuando se define un auto-comando con

autocmd <Event> <Action>

vim define un nuevo comando automático independientemente de los existentes . Entonces, cuando tiene varios de estos comandos automáticos en su .vimrc y los .vimrc repetidamente (en este caso, para cada escritura), termina definiendo cientos y miles de comandos automáticos que hacen lo mismo repetidamente. Muy pronto esto explotará y retrasará su sesión de vim, que es lo que ha notado.

Lo que debe hacer en su lugar, es agrupar sus comandos automáticos y luego borrar las definiciones para ese grupo con autocmd! . Como un simple ejemplo:

augroup Group1 autocmd! autocmd <Event1> <Action1> autocmd <Event2> <Action2> ... augroup END

Puede tener tantos grupos como desee, lo que le permite organizarlos por acciones / eventos similares.


Esta es mi solución que también borra los mapeos anteriores:

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