Apuntes mientras aprendo sobre software y computadoras.

Computación

Cómo instalar plugins de forma manual en Neovim

En este breve apunte voy a estar revisando cómo hacer para instalar plugins de forma manual en Neovim.

Y aunque la información aplica más o menos en cualquier sistema operativo, tengo que mencionar que estoy utilizando Linux al escribir este apunte.

Es cierto que al organizar la instalación de plugins en Neovim, las aplicaciones automáticas como Lazynvim parecen ser las más populares para ordenar el asunto.

De la misma forma, también es muy popular instalar temas de Neovim que ya traen una gran cantidad de herramientas ya instaladas.

Sin embargo a mi me interesa instalar los plugins de forma directa. Puede ser un poco más de trabajo, pero de esta manera me aseguro tener solamente las herramientas que necesito y puedo aprender a hacerlo sin depender de configuraciones extra.

¿Cuál es la principal desventaja de este tipo de instalación?

En mi opinión la principal desventaja es que algunos plugins dependen de otros para funcionar. Si hacemos una instalación manual, tenemos que cuidar de instalar todo lo necesario para que las herramientas funcionen correctamente.

Pero dejando de lado ese problema, y algunos otros más pequeños, pasemos directamente a la práctica.

Cómo instalaba un plugin de Neovim antes de la forma incorrecta

Lo que sigue es solo por documentar el tema. La idea funciona, pero es incorrecta. Lo comparto solo por traer anécdotas personales.

Cuando empecé a instalar plugins sin ayuda de aplicaciones, yo instalaba las herramientas en este directorio:

~/.config/nvim/lua/

El directorio “lua” no existe desde un principio, yo lo creaba para la ocasión. Lo usaba para el archivo “init.lua” y todo lo demás.

Digamos que quería instalar el plugin Telescope, entonces hacía:

git clone https://github.com/nvim-telescope/telescope.nvim.git

Y el arbol de archivos quedaba organizado como:

~/.config/nvim/lua/telescope

Luego dirigía a Neovim a buscar el plugin en ese lugar escribiendo esto en el documento “init.lua”:

local telescope_path = “/home/mi_directorio/.config/nvim/lua/telescope.nvim” vim.opt.runtimepath:append(telescope_path)

Y perfecto, todo quedaba funcionando sin ningún inconveniente. Pero no era una buena idea.

Básicamente lo que estaba haciendo era clonar el directorio del plugin con Git, y luego se lo mostraba al programa en “init.lua”

¿Esa técnica anterior sirve para instalar un plugin en Neovim?

La idea funcionaba, pero no era correcta. Hay una forma oficial, más fácil de ordenar.

Luego al empezar a leer el manual del programa un poco más, me di cuenta de que estaba equivocado en mi forma de organizar el tema.

Dónde es recomendado instalar un plugin de Neovim

Según entiendo, lo que hace Neovim es revisar una serie de directorios buscando archivos para su funcionamiento.Y lo hace siguiendo algo llamado XDG Base Directory Specification.

Como ya mencioné en mi propia mi experiencia, es posible instalar un plugin (o una serie de paquetes) en cualquiera de estos directorios habilitados, y las cosas van a funcionar igual. Pero puedo estar equivocado, así que voy a tratar de hacer las cosas correctamente.

Desde el manual de ayuda de Neovim, escribiendo en modo de utilizar comandos, puedo encontrar en qué forma esta recomendado organizar los directorios usando:

:h ‘rtp’

Con la intención de resumir todo esto, extraigo de lo anterior que en el directorio:

~/.config/nvim/

Van solamente por formalidad los archivos de configuración, por ejemplo “init.lua” y similares.

Si quiero guardar plugins, tengo que hacerlo en realidad empezando por:

~/.local/share/

Ahora tienen que creerme, estoy tratando de resumir todo esto lo más posible.

Neovim hace distinciones entre lo que es un “package” (un paquete) y un plugin. Un paquete es un conjunto de archivos o plugins que dependen uno del otro para funcionar. Y un plugin es algo que funciona individualmente.

Y también hace distinciones entre dónde guardar plugins que se inician al ejecutar Neovim (start), y plugins que se cargan solo al ser llamados (opt).

Puede entenderse que si lo quisiéramos, podríamos estar hablando sobre esto un buen rato. Pero en este momento solamente me interesa que el plugin que quiero instalar funcione, no quiero dar más vueltas.

Por eso para aprender mejor todo esto voy a utilizar un ejemplo práctico real.

Cómo instalar un plugin de forma manual en Neovim

La forma de instalación es casi siempre igual. Pero no es mala idea revisar en cada plugin en particular por si pide algún detalle extra. Principalmente dependencias extra, o algunos otros programas en el sistema.

Algunos plugins por ejemplo piden agregar algún tipo de información en “init.lua” para habilitar opciones.

Pero digamos que quiero instalar en mi configuración de Neovim el plugin llamado “Telescope”, que es una herramienta para realizar busquedas entre documentos y directorios.

Al revisar la página de Github del plugin, puedo notar que la misma dice que se necesita la dependencia “Plenary” para que funcione correctamente. Entonces voy a necesitar instalar también Plenary junto a Telescope. Por eso decía antes que este tipo de instalaciones necesita un poco más de cuidado.

En realidad la forma del directorio necesario puede ser de cualquiera de estas dos formas (según uso “start” u “opt”):

~/.local/share/nvim/site/pack/EJEMPLO/start/EJEMPLO.nvim 
~/.local/share/nvim/site/pack/EJEMPLO/opt/EJEMPLO.nvim

Entonces para empezar voy a crear un directorio:

~/.local/share/nvim/site/pack/plugins/start/

Y de esa forma estoy usando una carpeta llamada “plugins” donde puedo organizar directamente todas las herramientas que instalo dentro.

Ahora en ese directorio “start” dentro de “plugins” para clonar Telescope hago:

git clone https://github.com/nvim-telescope/telescope.nvim.git

Y no tengo que olvidar instalar también Plenary, para que Telescope funcione. Eso lo hago escribiendo en la terminal:

git clone https://github.com/nvim-lua/plenary.nvim.git

Ahora puedo notar que en el directorio:

~/.local/share/nvim/site/pack/plugins/start/

Tengo dos nuevas carpetas:

plenary.nvim telescope.nvim

Y con eso ya es todo, si funcionó bien ya tenemos instalados nuestros plugins sin necesidad de utilizar ninguna herramienta extra. Neovim busca directamente en estos directorios, por lo que no tenemos que agregar más modificaciones en “init.lua” como yo tenía que hacer antes.

Podemos darnos cuenta que básicamente el trabajo es el mismo para cada nuevo plugin que quiero instalar. Para cada caso me dirijo a un directorio con la estructura:

~/.local/share/nvim/site/pack/EJEMPLO/start/EJEMPLO.nvim 
~/.local/share/nvim/site/pack/EJEMPLO/opt/EJEMPLO.nvim

Y uso “git clone” para conseguir el plugin necesario.

Cómo revisar el estado de cada plugin en Neovim

Dentro de Neovim, en modo de usar comandos, puedo utilizar:

:checkhealth

Para revisar el estado general del programa.

En el caso de una herramienta particular como es Telescope en el caso del ejemplo, puedo hacer:

:checkhealth telescope

Eso me va a decir cómo se encuentra el plugin y si es que necesita alguna dependencia extra. Esto no es posible con todos los plugins.

Cómo organizar un grupo de plugins como paquetes relacionados

Antes mencionaba que en Neovim existe la figura de “package” y la figura de plugin por separado.

Puedo aprender más de esto, si busco con:

:help packages

Ahí me dice que “package” es un directorio que contiene plugins. Y que puede contener plugins que dependen unos de otros.

Sabiendo eso, podemos pensar que en lugar de una estructura de directorio como usamos antes en la forma:

~/.local/share/nvim/site/pack/plugins/start/telescope.nvim
~/.local/share/nvim/site/pack/plugins/start/plenary.nvim

Podríamos organizarnos de una forma más facil de entender de esta manera:

~/.local/share/nvim/site/pack/telescope/start/telescope.nvim 
~/.local/share/nvim/site/pack/telescope/start/plenary.nvim

Tengan en cuenta que los plugins van a funcionar de las dos formas. O al menos en mi propia experiencia funciona igual.

Cómo actualizar nuestros plugins de Neovim de forma manual

Bueno, siguiendo nuestro ejemplo anterior vamos a encontrar que en el directorio:

~/.local/share/nvim/site/pack/plugins/start/

Tenemos ahora carpetas como “plenary.nvim” y “telescope”.nvim”.

Necesitamos abrir la terminal en cualquier directorio que buscamos actualizar y hacemos:

git pull origin master

Por supuesto para esto necesitamos tener git instalado en el sistema operativo.

¿Y cómo actualizar múltiples plugins de Neovim a la vez?

Este sencillo script de bash puede ayudarnos para automatizar eso:

#!/bin/bash

#Código para actualizas múltiples plugins de Neovim

# Directorios de los plugins para actualizar
plugins=(
    #"/directorio/al/plugin1"
    #"/directorio/al/plugin2"
    # Se pueden agregar más plugins
)

update_plugin() {
    local dir="$1"
    echo "Actualizando $dir..."
    if cd "$dir"; then
        # Save the original exit status of the last command (cd)
        local original_status=$?
        
        # Execute git pull and check its exit status
        git pull origin master
        local git_status=$?
        
        # Restore the original exit status of the cd command
        local final_status=$original_status
        
        if [ $git_status -eq 0 ]; then
            echo "$dir actualizado correctamente"
        else
            echo "Error al actualizar $dir"
        fi
    else
        echo "No se pudo cambiar al directorio $dir"
    fi
}


# Llamar a la función para actualizar todos los plugins
for dir in "${plugins[@]}"; do
    update_plugin "$dir"
done

echo "Todos los plugins correctamente actualizados."

Cómo utilizar diferentes configuraciones de Neovin con distintos plugins cada una

Ya escribí sobre configuraciones y Neovim en este otro apunte.

De la misma forma que Neovim busca configuraciones en distintas carpetas del directorio “.config”, también lo hace con “.local/share”.

Digamos que tengo una configuración de Neovim llamada “nvim-ensayos” que tengo especializada para escribir textos largos.

Si por ejemplo quiero instalar plugins solamente en esa configuración, en lugar de usar:

~/.local/share/nvim/site/pack/plugins/start/

Como lo estaba haciendo hasta ahora, puedo trabajar directamente en este nuevo directorio:

~/.local/share/nvim-ensayos/site/pack/plugins/start/

Y ahora los plugins que sean instalados van a aplicar solamente a esa configuración de Neovim.

Mi objetivo con esto es poder usar y probar distintas herramientas, sin tener que modificar las que ya utilizo regularmente.

Conclusión:

Con esto le doy un cierra al apunte para aprender cómo instalar plugins manualmente en Neovim.

Puede ser que el proceso de instalación directa no sea tan popular comparado a la utilización de otras herramientas de administración. Sin embargo hacerlo manualmente no es realmente tan difícil, nunca se sabe cuándo puede ser útil.

Cualquier idea que tengas sobre el material, me interesa conocerla.

La seguimos en el próximo apunte.

Leave a Reply