Apuntes mientras aprendo sobre software y computadoras.

Computación

Cómo utilizar servidores de lenguaje (LSP) en Neovim con nvim-lspconfig

En este nuevo apunte rápido vamos a conseguir darle soporte a múltiples lenguaje LaTeX dentro de Neovim por medio del plugin “nvim-lspconfig”.

Esto quiere decir que vamos a usar Neovim como un cliente para un servidor de Lenguaje, y vamos a ayudarnos de este plugin extra para organizarlo.

Ya antes escribí un apunte sobre cómo usar LSP en Neovim sin utilizar plugins.

Pero la verdad es que establecer conexión con un servidor de lenguaje sin ayuda extra de un complemento es muy difícil de organizar. Cada lenguaje tiene sus propias particularidades, e intentar conocerlas desde cero demanda mucho tiempo.

Se puede decir entonces que esta es la solución más razonable, si solamente nos interesa que todo funcione.

Los pasos que siguen voy a realizarlo en una máquina con un sistema Linux. Pero los conceptos pueden dar de si para ser usados en otros sistemas.

Por eso sin entretenernos más….

Agregar el plugin nvim-lspconfig

Tengo un apunte que va a ayudarnos en este caso, para agregar plugins utilizando git directamente.

Y este es el sitio oficial de “nvim-lspconfig”.

En ese espacio podemos encontrar toda la información extra que necesitamos.

Pero en un ultra resumen si quiero hacer las cosas según el manual utilizo el comando:

git clone https://github.com/neovim/nvim-lspconfig ~/.config/nvim/pack/nvim/start/nvim-lspconfig

Y si quiero hacer las cosas al estilo “apunte impensado”, voy a ir hasta el directorio:

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

Ahora en esa carpeta utilizo el comando:

git clone https://github.com/neovim/nvim-lspconfig

Y con eso tenemos que tener el plugin instalado.

Según entiendo, es indistinto utilizar la carpeta “.local” o “.config” para instalar un plugin. Prefiero utilizar “.local” para mantenerlo más ordenado, pero puedo equivocarme.

Tengo que recordar que todas las configuraciones para los futuros LSP que voy a utilizar se encuentran en ese nuevo directorio “nvim-lspconfig” y no necesito modificarlas directamente.

El directorio en el que puedo encontrarlas es el equivalente a:

lua/lspconfig/server_configurations

En nuestro caso esta es la configuración lua que fue creada especialmente para texlab.

Lo que necesitamos ahora es un LSP para probarlo, por eso y ya que necesito algunas cosas con Latex en Neovim…

Agregar un LSP para LaTeX

Requerimientos previos

No estoy seguro de que esto sea completamente necesario, pero puede ser una buena idea tener instalado TexLive en el equipo.

Escribí sobre eso en: cómo instalar la versión más reciente de TexLive en Linux

Cómo instalar Texlab en Linux

El servidor de lenguaje que vamos a utilizar se llama Texlab y este es su sitio oficial.

La cosa es que no todos los sistemas cuentan con este LSP entre sus paquetes, por lo que la forma más rápida de conseguirlo puede variar entre sistema y sistema.

Por suerte podemos encontrar los paquetes pre compilados en este sitio.

Primero tengo que conocer los detalles de mi sistema con el comando:

uname -m

Esto en mi caso da por resultado:

x86_64

Por lo que descargo la versión:

texlab-x86_64-linux.tar

Y lo llevo a mi directorio “Home”,

Luego en base a esa descarga, utilizo este comando para extraerlo:

tar -xzf texlab-x86_64-linux.tar.gz

Muevo el archivo extraido a PATH:

sudo mv texlab /usr/local/bin/

Y en este punto hago el archivo extraido ejecutable:

chmod a+x texlab

Para terminar verifico la instalación con el comando:

$ texlab –version 
texlab 5.19.0

En mi caso como se puede notar ya tengo instalado de forma global la versión “5.19.0” de Texlab.

Recuerden que hasta este punto estuvimos haciendo todo desde la Terminal en Linux.

Vincular la configuracion lua del servidor de lenguaje en init.lua

Ya tengo instalado un LSP de forma general. Lo que tengo que hacer es darle a Neovim las opciones para usarlo.

Entonces en nuestro archivo “init.lua” escribimos:

require’lspconfig’.texlab.setup{}

Con esto hago una referencia al documento “texlab.lua” que conseguí antes, al momento de instalar el plugin “nvim-lspconfig”.

Y listo, con eso terminamos la parte de la configuración.

¿Y qué ocurre si quiero agregar más servidores de lenguaje en Neovim usando este metodo?

Básicamente siempre son los mismos pasos:

1- Averiguo el nombre del LSP que necesito en este sitio.

Puede ser ese sitio o alguno similar, el punto es encontrar el servidor que necesitamos.

2- Instalamos el LSP que vamos a utilizar de forma global en nuestro sistema.

3- Me aseguro de tener lsp-config instalado. Y si ya lo tengo instalado, recuerdo que en ese directorio del plugin se encuentran las configuraciones lua para cada servidor.

4- Conectamos la configuracion del servidor desde “init.lua”. Por ejemplo si estuviera usando “bashls” de servidor de lenguaje, y la configuración es “bashls.lua, uso:

require’lspconfig’.bashls.setup{}

5- Ya podemos usar herramientas como diagnóstico de errores y auto completar en Neovim para el lenguaje que recientemente descargamos soporte.

6- En caso de ser necesario podemos agregar algunas configuraciones extra si todo no funciona desde el vamos.

¿Cómo compruebo que todo funciona correctamente?

Digamos que quiero saber si la instalación del servidor de lenguaje fue correcta.

Al hacer las cosas de esta forma, se supone que Neovim reconoce que tipo de archivo estamos usando y lo “conecta” con el servidor de lenguaje correcto.

Digamos que abrimos un nuevo documento llamado “ensayo.tex”. Neovim va a reconocer el “.tex” de la extensión y va a actuar sobre eso.

En Neovim ahora uso el comando:

:checkhealth lsp

Si todo fue correctamente voy a notar que dice:

vim.lsp: Active Clients
texlab (id=1, root_dir=~/v:null, attached_to=[11])

Y esto me quiere decir que todo salio correctamente, ya puedo empezar a realizar mis proyectos de código con todas las ventajas del servidor de lenguaje agregadas.

¿Y si le falta algún tipo de funcionalidad a mi LSP?

En mi breve experiencia haciendo estas pruebas puedo decir que no siempre todo funciona desde un primer momento.

Cada LSP tiene sus propios detalles, lo mejor es revisar la documentación oficial en cada caso.

Seguramente si falta alguna funcionalidad vamos a necesitar un plugin o configuración extra para poder activarla.

Conclusión:

Con esto le doy un cierre a mi apunte sobre cómo utilizar servidores de lenguaje (LSP) en Neovim con la ayuda del plugin nvim-lspconfig.

Si hay algo que no pude cubrir correctamente en mi explicación o si descubrís algún error, por favor enviame un correo electrónico para que pueda arreglarlo. La información se encuentra en el menú de “contacto”.

La seguimos en el próximo apunte.

Leave a Reply