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