¿Cómo ver qué complementos están haciendo que Vim sea lento?

318

¿Hay alguna forma de perfilar los complementos de Vim?

Mi MacVim se vuelve más y más lento cuando abro un archivo grande .py. Sé que podría anular la selección de todos los complementos y volver a seleccionar uno por uno para verificar qué complemento es el culpable, pero ¿hay alguna forma más rápida?

Mi dotvim está aquí: https://github.com/charlax/dotvim

charlax
fuente
1
En realidad, el inicio está bien. Vim se vuelve lento después de unos minutos de uso. Se refiere especialmente a los .pyarchivos.
charlax
La búsqueda binaria es el camino a seguir. Ha hecho su pregunta hace 2 horas, la causa de su problema se habría encontrado en ese momento. La autocmdcorazonada de Ingo Karkat me parece la más plausible.
romainl
Eso es cierto, pero ¿no crees que si hay una manera de obtener el mismo resultado en incluso una hora, eso es mejor? Además, el inicio está bien, es después de unos minutos de uso, por lo que habría tomado mucho tiempo. autocmdse ve bien. Solo lo intenté pero Vim no es lento en este momento.
charlax
1
Solo enfrenté el mismo problema, pero en grandes archivos ruby. Encontrado que folding=syntaxpuede disminuir la velocidad. Probado folding=manualy ahora todo funciona bien
Aleksandr K.

Respuestas:

496

Puede utilizar el soporte de creación de perfiles incorporado: después de iniciar vim do

:profile start profile.log
:profile func *
:profile file *
" At this point do slow actions
:profile pause
:noautocmd qall!

(a diferencia de dejar de fumar, noautocmdno es realmente necesario, solo hace que vim salga más rápido).

Nota: no obtendrá información sobre las funciones que se eliminaron antes de que vim salga.

ZyX
fuente
13
Esto es increíble. Pude ver que EasyTags es el culpable. ¡Muchas gracias!
charlax
55
esto me ayudó a detectar "vim-gitgutter" como la obstrucción.
Sebastián Grignoli
66
@subjectego :set more | verbose function {function_name}le mostrará el contenido de la función y dónde se encuentra.
ZyX
26
Si no está claro, el resultado profile.loges un archivo en el directorio actual de su sesión de Vim.
Micah Smith
77
Salte al final de profile.logpara ver la lista de funciones ordenadas por tiempo total (me profile.logpareció inútil antes de encontrar que hay una lista ordenada al final).
Andrey Portnoy
78

Encontré otro método vim buildin muy útil para mostrar exactamente los mensajes de tiempo mientras cargaba su .vimrc.

vim --startuptime timeCost.txt timeCost.txt

Por favor, corre:

:help --startuptime

en VIM para obtener más información.

feihu
fuente
3
En caso de que alguien más se pregunte, esto no existe en todas las distribuciones vim / gvim. No está en stock Win Gvim 7.4 aquí (aunque está documentado en viminfo)
thynctank
1
@thynctank Probé mi gvim 7.4 y funcionó. Aquí está mi versiónIM - Vi IMproved 7.4 (2013 Aug 10, compiled Aug 10 2013 14:33:40)
feihu
¡La mejor respuesta! Me ayudó a identificar el complemento más lento que me hizo enojar en cada inicio. Gracias :)
kovpack
Esto y básica -Vmostró que era un no local $HOMEcausando el problema
BSB
Debe ejecutar :epara actualizar el archivo. Ordene el archivo en su lugar de acuerdo con el tiempo total empleado para cada operación, así:%! sort -k2 -nr
Ashutosh Jindal
31

Podría ser un complemento o el resaltado de sintaxis; pruebe :syntax offcuando ocurra esto y vea si Vim se vuelve más rápido al instante

Con los complementos, una "lentitud general" generalmente proviene de los comandos automáticos; A los :autocmdenumera a todos. Investiga matando a algunos de ellos a través de :autocmd! [group] {event}. Proceda de los eventos más frecuentes (es decir CursorMoved[I]) a los menos frecuentes (p BufWinEnter. Ej .).

Si puede reproducir de manera confiable la lentitud, una búsqueda binaria podría ayudar: aleje la mitad de los archivos ~/.vim/plugin/y luego la otra, repita en el conjunto que fue lento.

Si realmente necesita mirar debajo del capó, obtenga una versión de Vim que tenga el :profilecomando habilitado. (No es la versión GRANDE de Windows de vainilla, pero la que viene con Cygwin la tiene; además, la autocompilación es bastante fácil en la mayoría de las distribuciones).

Ingo Karkat
fuente
17

He encontrado útil imprimir toda la actividad de Vim en un archivo iniciando Vim con la -Vopción:

vim -V12log

Esto proporciona la máxima verbosidad (nivel 12) y la envía al archivo log. Luego puede realizar algunas acciones de Vim que sabe que son lentas, y luego ver qué funciones / asignaciones se están llamando internamente.

Príncipe Goulash
fuente
10
pero no hay tiempo en el registro
Kokizzu
7

Si tiene problemas con las operaciones de actualización de pantalla ( ^Ldesplazamiento, etc.) que son lentas, su problema puede ser un archivo de resaltado de sintaxis ineficiente. Puede probar esto deshabilitando temporalmente el resaltado de sintaxis ( :syn off) y ver si el problema desaparece; si desea profundizar en los detalles, puede perfilar el archivo de sintaxis actual usando :syntime:

  1. Abra un archivo que causa problemas de rendimiento de resaltado de sintaxis.
  2. Ejecute :syntime onpara comenzar a perfilar.
  3. Desplácese un poco por el archivo.
  4. Ejecutar :syntime reportpara generar un informe. Los patrones enumerados primero en el informe son los que tomaron más tiempo para procesar.
duskwuff -inactive-
fuente
2
Si parece que el archivo de resaltado de sintaxis es el culpable, ¿cuál es el próximo curso de acción?
Spectator6