NeoVim, el editor Python para amantes de la terminal
Si bien mi recomendación es que utilices PyCharm como entorno de desarrollo para Python, ya te adelanté que actualmente mi herramienta preferida para hacerlo es NeoVim, y esta es la razón principal para que le dedique una Pyldora Pythonica a Python en NeoVim. Sin embargo, antes de que te lances a utilizar NeoVim como entorno de desarrollo con Python, tengo que indicar que la curva de aprendizaje de NeoVim es potente. Hablo de NeoVim, pero igualmente, podría estar diciendo de Vim. Es decir, necesitas conocer Vim y como trabajar con sus modos antes de ponerte a desarrollar Python en NeoVim. Pero sin lugar a dudas para mi, NeoVim es el editor Python para amantes de la terminal.
Sea como fuere, no te trato de desanimar, simplemente quiero que tengas claro que, la casuística de NeoVim com editor Python, es totalmente distinto del caso de PyCharm. En el caso de PyCharm es instalar y comenzar a escribir código. En el caso NeoVim, tienes que aprender a utilizar Vim, y además tienes que realizar la configuración de NeoVim para que puedas desarrollar con Python. Estas dos tareas, no son tareas sencillas ni mucho menos, son tareas relativamente complejas.
NeoVim, el editor Python para amantes de la terminal
¿Porque NeoVim como editor Python?
Llegados a este punto, y después de las advertencias, probablemente te estés preguntando si tiene sentido Python en NeoVim. NeoVim, tiene dos grandes ventajas frente a cualquier otro editor de código con el que lo compares. Por un lado, y como ya te puedes imaginar, es tremendamente ligero, ninguno de sus competidores, llega, ni llegará nunca (a lo mejor nunca es mucho) a la ligereza de NeoVim. Son todas estas razones, las que me llevan a defender que NeoVim es el editor Python para amantes de la terminal, aunque también lo puedes ejecutar como editor en el escritorio.
Por otro lado, NeoVim te lo personalizas y configuras según tus necesidades. Tienes una gran cantidad de complementos para personalizar tu experiencia con NeoVim, y esto, es una auténtica pasada. Que quieres un menú lateral, menú lateral, que quieres árbol de búsqueda, árbol de búsqueda, que quieres resaltado de sintaxis utilizando TreeSitter, resaltado de sintaxis. Aquí todo te lo montas y te lo configuras tu, según tus necesidades, según tus gustos y según tu flujo de trabajo. Por supuesto, que con otros editores también puedes realizar personalizaciones, pero te aseguro que no podrás hacer personalizaciones a nivel de NeoVim.
Esto, de personalizar y configurar NeoVim, por supuesto que también tiene su lado negativo, y este lado negativo, no es otro que tienes la obligación de configurarlo. Así como con otros puedes empezar a desarrollar con todas las herramientas necesarias y recién sacado de caja, en el caso de NeoVim, si que podrías hacerlo, pero sin todas las comodidades.
El gran cambio de NeoVim. LSP.
He estado utilizando Vim durante algunos años, y no terminaba de entender la diferencia con NeoVim. Sin embargo, a partir de la versión 0.5 de NeoVim, donde se incorpora el LSP, Language Server Protocol. De esta manera NeoVim, actúa como cliente de los servidore LSP y además incluye un framework, implementado en LUa que permite crear todo tipo de herramientas en torno a este protocolo. Y esto se ha notado y mucho.
Sin embargo, de nuevo, como he comentado anteriormente, tiene el inconveniente de que necesitas configurar los distintos servidores que utilices así como LSP. Necesitas de tu parte algo de investigación, para conseguir que todo esto funcione. La ventaja es que hay muchos que comparten sus dotfiles, con lo que al final no es tan complejo como podría parecer inicialmente.
El Language Server Protocol define el protocolo utilizado entre el editor u un servidor de lenguaje que proporciona determinadas características como el autocompletado, referencias, búsquedas, documentación., etc. La idea de todo esto, es estandarizar el protocolo de comunicación entre servidor y cliente. De esta forma, el mismo servidor se puede utilizar para diferentes clientes.
Tree-sitter
Otra de las características que facilitan enormemente el desarrollo con NeoVim es Tree-sitter. Tree-sitter es una herramienta de análisis sintáctico y una librería de análisis sintáctico incremental. O por lo menos eso dicen…, La cuestión es que esta herramienta es capaz de crear un árbol sintáctico para tu código e ir actualizando de forma eficiente, conforme vas escribiendo. El objetivo de esta herramienta es,
- una herramienta general capaz de analizar cualquier lenguaje de programación.
- tiene que ser suficientemente rápida para analizar en línea conforme vamos editando
- debe ser lo suficientemente robusta
- no tiene que tener dependencias para que se pueda utilizar con cualquier aplicación.
Actualmente no hay analizadores para todos los lenguajes, sin embargo, para los que estoy utilizando funciona de maravilla. En concreto, actualmente estoy utilizando NeoVim con los siguientes lenguajes de programación,
- Python
- Rust
- JavaScript
- PHP
Es importante indicar que además de instalar el complemento de Tree-sitter, necesitarás habilitar los lenguajes que quieras. Como te digo, yo he habilitado los que he indicado anteriormente, mas otros como markdown, json, css, html. Al final Tree-sitter te da mucha potencia, y es necesario aprovechar.
Telescope
La siguiente de las piezas fundamentales que he incorporado en NeoVim es Telescope. Este complemento es un buscador en listas que utiliza la lógica difusa para agilizar esta operativa. Se trata de un complemento centrado en la modularidad, para facilitar la personalización. Esta pieza a su vez está compuesta de selectores, previsualizadores y ordenadores.
Aquí para facilitar las búsquedas, lo importante es definir atajos de teclado, como por ejemplo,
map('n', '<leader>tf', ':Telescope file_browser<CR>', default_opts)
map('n', '<leader>ts', ':Telescope symbols<CR>', default_opts)
map('n', '<leader>ff', ':Telescope find_files<CR>', default_opts)
map('n', '<leader>fg', ':Telescope live_grep<CR>', default_opts)
map('n', '<leader>fb', ':Telescope buffers<CR>', default_opts)
map('n', '<leader>fh', ':Telescope help_tags<CR>', default_opts)
map('n', '<leader>fl', ':Telescope git_files<CR>', default_opts)
Autocompletado
Otra de las piezas fundamentales para el desarrollo o para cualquier otro trabajo con un editor es el autocompletado. En este caso estoy utilizando una serie de plugins que han conseguido que el autocompletado funcione a las mil maravillas. El funcionamiento de este plugin, es similar al de Telescope, en el sentido de que se trata de un complemento suficientemente abierto que permite la integración con diferentes fuentes.
Lo cierto es que de todos los complementos y herramientas de autocompletado que he probado y utilizado hasta el momento, este es el que mejor funciona y además con mucha diferencia. Lo cierto es que estoy realmente satisfecho. Eso si, de nuevo, requiere de tu participación para conseguir integrarlo con NeoVim.
Snippets
Otra gran ayuda para mi son los snippets. En este caso estoy utilizando L3MON4D3/LuaSnip
que es un fantástico motor de snippets que funciona de maravilla. Por supuesto que te permite crear tus propios, pero de nuevo, en mi caso, me he decantado por utilizar otro complemento que tiene por defecto una gran cantidad de snippets
predefinidos para un diferentes lenguajes de programación, y lo que no son lenguajes de programación, como puede ser markdown.
Algunos detalles
A parte de estas herramientas que para mi son fundamentales, voy añadiendo y quitando diferentes complementos, conforme los voy probando. Hay un verdadero mundo de complementos ahí fuera, lo que lleva a que siempre esté probando. Algunos de estos complementos, pasan a la lista de imprescindibles, y otros simplemente van cayendo. Así por ejemplo,
autopair
para gestionar el emparejamiento.vista
este complemento te facilita la vista y búsqueda de símbolos de LSP.feline
que es una barra de estado, para tener información sobre errores, control de versiones, etc.tabby
para la gestión de pestañaslazygit
que integralazygit
con NeoVim
Y algunos otros complementos, particulares de Rust, algunos para depuración y unos que estuve probando para seguir el método Zettelkasten… Pero, como digo, esto no tiene relación con Python, que al final es el objetivo a conseguir.
Conclusiones
Como has podido ver tu mismo, Python en NeoVim no es, ni mucho menos, un instalar y programar. Para utilizarlo hay que invertir horas, por un lado para aprender a manejar Vim, algo que ya de por si es una tarea que no tiene fin, y por otro lado, para configurarlo y poder sacar el máximo partido.
A mi en particular, me encanta, por la ligero que resulta y por el altísimo grado de personalización, pero cada uno es cada uno, y a lo mejor tu prefieres invertir tu tiempo en dominar PyCharm, Visual Studio Code o cualquier otro editor antes que dedicarlo a personalizar NeoVim.
El vídeo
Para completar todo esto, te recomiendo que le des un vistazo al siguiente vídeo en el que te muestro el uso de NeoVim con Python,
Más información,
La entrada NeoVim, el editor Python para amantes de la terminal aparece primero en Atareao.