:Lazy

Tabla de contenidos

Captura de Lazy

En la sección de plugins hemos instalado un gestor de paquetes llamado Lazy, que cuenta con una interfaz de usuario muy intuitiva y permite cargar según qué plugins de manera pasiva. De ahí el nombre de “lazy” (vago en inglés).

En este artículo toca profundizar bastante sobre este plugin.

Atajos de teclado

Tecla Descripción
c Comprueba si el plugin tiene una actualización disponible
i Instala el plugin seleccionado
r Restaura la versión del plugin a la que hay en el archivo “lock”
u Actualiza el plugin seleccionado
x Borra un plugin, incluso estando instalado.
C Comprueba si hay actualizaciones y muestra los últimos cambios de versión
D Muestra los registros de depuración
H Vuelve a la pantalla principal, en la que se muestra la lista de plugins
I Instala los plugins que todavía no están instalados
L Muestra los últimos commits de todos los plugins
P Ofrece un informe sobre la carga de todos los plugins y el tiempo de arranque de Neovim
R Actualiza todos los plugins a la versión indicada en el archivo “lock”.
S Ejecuta la instalación, construcción y actualización del plugin
U Actualiza los plugins que tiene una actualización nueva
X Borra los directorios de los plugins que ya no están instalados
? Muestra la ayuda de Lazy

Pestaña Profile (Perfil)

Pestaña Perfil de Lazy

Esta pestaña la vamos a visitar muy a menudo para comprobar el tiempo que tarda en arrancar Neovim tras instalar un buen puñado de plugins. No es lo mismo el tiempo de carga de Neovim en un búfer vacío sin nada, que un archivo de Python o de cualquier otro lenguaje, en el que ya tiene cargado el servidor de lenguaje, el linter y el formateador.

El tiempo de arranque se mide en ms (milisegundos), y lo más obvio es que contra menos milisegundos, menos tiempo carga Neovim.

En esta pestaña nos muestra un listado de los plugins y del **tiempo que han tardado en cargar, del primero al último. Y en este punto hay que decidir cuáles hay que hacer que se carguen más tarde. En la siguiente sección vamos a ver cómo hacemos eso.

Carga diferida de los plugins (Lazy load)

Esta es una de las características clave de Lazy, el poder cargar plugins de manera diferida, de modo que el tiempo de carga sea mucho menor. Para eso hay que mirar el listado de plugins dentro de la pestaña Profile y averiguar cuál es el que tarda más tiempo en cargar.

Una vez identificado el plugin, hay que ir al archivo plugins.lua y dentro de las llaves podemos introducir lazy = true o event = "VeryLazy".

Con la opción lazy le estamos diciendo que solo cargue ese plugin en cuanto se necesite.

Los casos en los que se cargarán los plugins de manera diferida son estos:

También hay una opción priority, en la que podemos especificar la prioridad de ese plugin. El plugin que tenga más prioridad, será el primero en cargarse.

Por defecto, el número de prioridad es de 50.

Ten en cuenta que hay algunos plugins pesados que pueden hacer que Neovim tarde mucho en cargar. Comprueba si hay algún otro plugin que tenga la misma funcionalidad, pero que sea ligero en cuanto a velocidad de carga.

Si quieres, puedes echarle un vistazo a cómo está estructurado el directorio de plugins de LazyVim, una configuración lista para usarse y que hace uso de Lazy para cargar los plugins y mejorar el rendimiento de Neovim. Además está creada por Folke, el mismo autor de Lazy.

En un futuro próximo hablaré sobre las configuraciones de Neovim más conocidas.

Eventos

Dentro de las especificaciones de plugins hay una propiedad llamada event, la cual define el evento que se tiene que producir para cargar un plugin.

Partimos de la base de que ningún plugin tiene configurado algún evento, por lo que se cargarán todos al iniciar Neovim, lo que hará que el tiempo de carga sea mayor.

Por ello es aconsejable pensar cuáles son los plugins que se van a cargar cuando se produzca X evento.

Antes habíamos visto el evento 'VeryLazy', que es exclusivo de Lazy. Pero Neovim ya trae varios eventos, los cuales se recogen en :help events. En la siguiente tabla se recogen los principales eventos que se aplican a los plugins.

Evento Descripción
BufAdd Cuando se crea un nuevo búfer y se añade a la lista de búfers o se renombra el mismo
BufDelete Cuando se borra un búfer de la lista de búfers
BufEnter Después de entrar dentro de un búfer
BufFilePost Después de cambiar el nombre del búfer
BufFilePre Antes de cambiar el nombre del búfer
BufHidden Antes de que el búfer se quede oculto
BufLeave Antes de irse a otro búfer, o a otra ventana
BufNew Después de crear un nuevo búfer, o renombrado
BufNewFile Cuando se crea un archivo que todavía no existe
BufRead Cuando se empieza a editar un nuevo búfer
BufReadPost Después de leer el archivo en el búfer
BufReadPre Cuando se comienza a editar un nuevo búfer, antes de leer el archivo en el búfer
BufUnload Cuando está a punto de liberar el búfer de la lista
BufWinEnter Después de que un búfer se muestre en una ventana
BufWinLeave Antes de que un búfer se borre de una ventana
BufWipeout Antes de que borrar un búfer
BufWrite o BufWritePre Antes de escribir el búfer entero a un archivo
BufWritePost Después de escribir el búfer entero a un archivo
InsertChange Cuando se intercambia entre el modo Insertar o Reemplazo
InsertCharPre Cuando se escribe un carácter en el modo Insertar, antes de insertarlo en el búfer
InsertEnter Antes de entrar en el modo Insertar, Reemplazo o Reemplazo Virtual
InsertLeavePre Antes de abandonar el modo Insertar
InsertLeave Después de abandonar el modo Insertar
VimEnter Cuando ya está cargado Neovim

Aplicando los eventos a los plugins

Antes de los eventos

Nuestra instalación de Neovim tiene 20 plugins, y ha tardado en iniciarse unos 120ms, lo cuál no está mal, pero se podría mejorar mucho más.

Vamos a ir por cada archivo de configuración (o de especificación) y vamos a cambiar a estos eventos:

Tras aplicarle los eventos, vamos a ver cuál es el tiempo de carga.

Tras los eventos aplicados

¡¡19.82 ms!! ¡Ni tan mal, oye!

Es importante jugar con los eventos, ya que algunos pueden hacer que el plugin no cargue correctamente.

Ten en cuenta que los plugins que dependen de uno, al configurar X evento, también se verán afectados.