Esta vez quiero compartir con vos algunos tips que pueden venir bien para mejorar el rendimiento en Vim. Ojo que por rendimiento me refiero a tener una experiencia rápida y con buena respuesta en Vim.

Evitá los plugins (lentos)

Si no podés, usá un gestor de paquetes que soporte lazy loading, como vim-plug. ¿Querés un caso real? Acá va uno con el que estuve peleando hace poco:

Me gusta el plugin UltiSnips, pero la mayoría del tiempo no lo uso. Aunque cuando lo necesito, lo necesito en serio. Entonces, ¿debería sacar el plugin y arreglármelas con alguna función propia? Puede ser. Pero ¡ey! ¡Probemos el lazy loading!

Usando el tip de la wiki de vim-plug

Hay un tip en la wiki de vim-plug sobre how to lazy load UltiSnips. Pero yo quería otra alternativa, porque no me gustaba que la primera vez que entrás en insert mode se congele por un par de milisegundos (sí, eso me molesta, ¡y mucho!).

Usando una función propia

Así que armé una custom function que carga UltiSnips solo cuando disparás la tecla de expansión.

Evitá tener (miles de) plugins

Si no podés, usá un gestor de paquetes que soporte descargas en paralelo, como vim-plug. Si leíste la documentación de vim-plug, habrás notado que vas a necesitar Vim con soporte de ruby. Podés mirar mi dotvim wiki para lograrlo.

Evitá un plugin (grande) para completado

¡Alerta! Este es muy personal.

Las funciones de completado que trae Vim de fábrica, mirá :h ins-completion, son suficientes para mi flujo de trabajo. Probé algunos plugins como YouCompleteMe, Neocomplete, SuperTab, pero ninguno me dejó contento. Yo solo necesitaba dos cosas:

  • Un mapeo de Tab para disparar los completados y,
  • Nada de popups si no es estrictamente necesario (o sea: no quiero que me moleste un popup mostrándome que hay una única coincidencia).

Respecto del primer punto, lo más simple sería tener una función propia como this one, pero me convencieron de usar VimCompletesMe. ¿La razón? Tiene apenas unas pocas líneas de código entendible y hace un mapeo de Tab realmente inteligente.

Para el segundo punto, simplemente usá la opción de Vim completeopt=menu.

Igual, a veces cuando quiero ser preciso sin ninguna ambigüedad sobre qué me gustaría completar, uso los mapeos que vienen incorporados (ej: C-X-L para completar líneas). Perdón por ser repetitivo, ¡pero :h ins-completion es tu amigo!

Si estás usando CtrlP…

…te recomiendo mejorar la velocidad del filtrado usando un filtro externo, como ctrlp-py-matcher. Está buenísimo cuando tenés que hacer Fuzzy Search no solo sobre miles y miles de archivos, ¡sino también sobre cosas como un archivo de ctags que puede ser enorme en proyectos gigantes!

Buscá más rápido que vimgrep

Podés usar el viejo y querido grep, pero yo prefiero una solución mejor de entrada. Para eso recomiendo Ag, porque tiene buenos defaults que lo hacen más rápido que grep. Si estás en Windows, probá Pt, que es más rápido que Ag.

Si querés aprovechar Ag en Vim, podés jugar con las opciones grepprg y grepformat, por ejemplo see here.

Cosas copadas para Windows

Probablemente esta sea la mejor cosa que encontré (de casualidad).

Hay una cosa chiquita pero enorme que estaba enlenteciendo todo el flujo de Vim (especialmente el tiempo de arranque). Resulta que tenía el Power Plan configurado en Balanced en vez de High Performance. Cambiar a este último hizo la magia. ¿No me creés? Mirá:

Balanced vs. High Performance Power Plan

Un último tip que puede cambiar tu experiencia general en Windows: podés mejorar el rendimiento del sistema jugando con las opciones en %windir%\system32\SystemPropertiesPerformance.exe. Yo las deshabilité todas salvo “Smooth edges of screen fonts”. Probalo, no te vas a arrepentir.

¡Eso es todo, amigos!