: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

TeclaDescripción
cComprueba si el plugin tiene una actualización disponible
iInstala el plugin seleccionado
rRestaura la versión del plugin a la que hay en el archivo “lock”
uActualiza el plugin seleccionado
xBorra un plugin, incluso estando instalado.
CComprueba si hay actualizaciones y muestra los últimos cambios de versión
DMuestra los registros de depuración
HVuelve a la pantalla principal, en la que se muestra la lista de plugins
IInstala los plugins que todavía no están instalados
LMuestra los últimos commits de todos los plugins
POfrece un informe sobre la carga de todos los plugins y el tiempo de arranque de Neovim
RActualiza todos los plugins a la versión indicada en el archivo “lock”.
SEjecuta la instalación, construcción y actualización del plugin
UActualiza los plugins que tiene una actualización nueva
XBorra 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.

EventoDescripción
BufAddCuando se crea un nuevo búfer y se añade a la lista de búfers o se renombra el mismo
BufDeleteCuando se borra un búfer de la lista de búfers
BufEnterDespués de entrar dentro de un búfer
BufFilePostDespués de cambiar el nombre del búfer
BufFilePreAntes de cambiar el nombre del búfer
BufHiddenAntes de que el búfer se quede oculto
BufLeaveAntes de irse a otro búfer, o a otra ventana
BufNewDespués de crear un nuevo búfer, o renombrado
BufNewFileCuando se crea un archivo que todavía no existe
BufReadCuando se empieza a editar un nuevo búfer
BufReadPostDespués de leer el archivo en el búfer
BufReadPreCuando se comienza a editar un nuevo búfer, antes de leer el archivo en el búfer
BufUnloadCuando está a punto de liberar el búfer de la lista
BufWinEnterDespués de que un búfer se muestre en una ventana
BufWinLeaveAntes de que un búfer se borre de una ventana
BufWipeoutAntes de que borrar un búfer
BufWrite o BufWritePreAntes de escribir el búfer entero a un archivo
BufWritePostDespués de escribir el búfer entero a un archivo
InsertChangeCuando se intercambia entre el modo Insertar o Reemplazo
InsertCharPreCuando se escribe un carácter en el modo Insertar, antes de insertarlo en el búfer
InsertEnterAntes de entrar en el modo Insertar, Reemplazo o Reemplazo Virtual
InsertLeavePreAntes de abandonar el modo Insertar
InsertLeaveDespués de abandonar el modo Insertar
VimEnterCuando 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.