664 - Vi, Vim o Neovim ¿Cual es el mejor?
#vi #vim #neovim ¿cual es el mejor editor #linux de los tres?¿cual elegir?¿que diferencias hay entre los tres?¿donde utilizar cada uno de ellos?
Últimamente, tanto en en el grupo de Telegram como en el canal de YouTube hay una pregunta recurrente, que es ¿Que diferencias hay entre Vim y Neovim?. ¿Cual escoger para cada situación?. Así que esto me dio una idea para un episodio, y para lo cual ha sido necesario documentarme, claro. He querido añadir también al vetusto Vi, con el objetivo de que la comparativa sea lo mas exhaustiva posible, y que sepas cual es tu mejor opción en cada caso. En mi caso, particular, cuando decidí adentrarme en el mundo de Vi, lo hice directamente a Vim, y tengo que confesarte que me costó decidirme dar el salto de Vim a Neovim. Aunque este salto lo hice básicamente por dos aspectos que para mi resultaban importantes, el primero es el LSP, Language Server Protocol, y en segundo lugar por los complementos de Neovim, que al utilizar LUA como lenguaje de scripting facilitaba mucho la creación de estos. Así, en este episodio voy a intentar aclarar las diferencias entre Vi, Vim y Neovim, cuando elegir uno u otro y la razón para hacerlo.
Vi, Vim o Neovmim ¿Cual elegir?
Los orígenes
El origen de Vi es el editor de la línea de comandos conocido como ed. Vi fue desarrollado a finales de los 70 por Bill Joy, un estudiante graduado en la Universidad de California en Berkeley. Joy, más tarde, cofundó Sun Microsystems y como científico jefe hasta 2003. Inicialmente desarrolló ex como un editor de línea mejorado que admitía un superconjunto de los comandos de ed. Más tarde, desarrolló Vi como una interfaz visual para ex.
Por otro lado, tenemos Vim. Vim significa Vi IMproved, aunque inicialmente se conoció el proyecto como Vi IMitation, es un editor de texto que hizo su primera aparición pública el 2 de noviembre de 1991, gracias al esfuerzo y la dedicación de Bram Moolenaar. La historia de Vim comienza cuando Moolenaar compra una computadora Amiga y desea usar el editor de texto con el que estaba familiarizado en Unix. Sin embargo, no existía una versión de Vi para Amiga que cumpliera con sus necesidades y expectativas. En consecuencia, Moolenaar decidió tomar el toro por los cuernos y se puso a trabajar en la versión de Vi disponible para Amiga e introduciendo una serie de mejoras y correcciones.
El objetivo inicial de Moolenaar era simplemente imitar la funcionalidad de Vi. Sin embargo, a medida que pasó el tiempo y acumuló experiencia, se dio cuenta de que podía hacer más, no sólo podía imitar a Vi, sino mejorarla. Y así es como Vim empezó a evolucionar, convirtiéndose en algo más que una simple imitación. Moolenaar y la comunidad, que se había formado en torno al proyecto comenzaron a agregar nuevas funciones, superando los límites de lo que era posible con un editor de texto. Con la versión 1.22, Vim había superado a Vi en términos de características, marcando un punto de inflexión en su desarrollo. Fue, a partir de este punto, y en reconocimiento a este avance, cuando se cambió en el nombre del proyecto de Vi IMitation a Vi IMproved, enfatizando el hecho de haber pasado de un simple intento de imitación a una mejora real del original.
Vi vs Vim
Historia y contexto
- vi: Es el editor de texto original creado por Bill Joy en 1976, disponible en prácticamente todos los sistemas Unix por defecto.
- vim: Es una mejora de vi («Vi IMproved»), creada por Bram Moolenaar en 1991. Es más moderno y extendido, con muchas características adicionales.
Interfaz y usabilidad
- vi: Tiene una interfaz muy básica sin colores o realce de sintaxis.
- vim: Soporta colores, resaltado de sintaxis y múltiples configuraciones visuales personalizables.
Funcionalidades avanzadas
- vi: Limitado a funciones esenciales de edición de texto.
- vim: Incluye funcionalidades avanzadas como:
- Autocompletado de palabras y código.
- Deshacer en múltiples niveles.
- Edición de múltiples ventanas y pestañas.
- Búsqueda más potente con expresiones regulares avanzadas.
Configuración
- vi: Apenas tiene opciones configurables y no dispone de un archivo de configuración tan flexible.
- vim: Es altamente configurable con el archivo
~/.vimrc
, donde los usuarios pueden personalizar el editor según sus necesidades.
Compatibilidad con extensiones y plugins
- vi: No soporta extensiones.
- vim: Tiene soporte para plugins, lo que permite ampliar sus capacidades, incluyendo herramientas para depuración, escritura en Markdown, y más.
Modo visual
- vi: No tiene un modo visual para seleccionar texto fácilmente.
- vim: Introduce el «modo visual», lo que facilita la selección de texto para copiar, cortar o realizar modificaciones específicas.
Compatibilidad con teclas especiales
- vi: No reconoce muchas combinaciones de teclas modernas (como flechas de desplazamiento o teclas de función) correctamente en algunas versiones.
- vim: Soporta teclas modernas y combinaciones para una experiencia más fluida.
Soporte de sistemas modernos
- vi: Aunque es universal, puede carecer de soporte actualizado en algunos sistemas operativos modernos.
- vim: Es más activo y cuenta con actualizaciones frecuentes, además de ser multiplataforma (disponible en Linux, macOS, Windows, etc.).
Ayuda y documentación
- vi: Documentación limitada dentro del programa, normalmente tendrás que buscar documentación en línea o recurrir a otros recursos.
- vim: Incluye un sistema de ayuda interno muy completo (puedes acceder con
:help
).
Disponibilidad
- vi: Siempre está disponible en sistemas basados en Unix, ya que forma parte del estándar POSIX.
- vim: Aunque no siempre viene instalado por defecto, es fácil de instalar en prácticamente cualquier sistema operativo.
Vi vs Vim
Historia y objetivo
- Vim: Lanzado en 1991 como una mejora de vi. Su objetivo principal es ofrecer una versión mejorada de vi con funcionalidades más avanzadas, respetando el diseño clásico.
- Neovim: Lanzado en 2014 como un «fork» de Vim, diseñado para modernizar y refactorizar su código base, simplificando su mantenimiento y añadiendo nuevas características.
Código base y arquitectura
- Vim: Su código es más antiguo y menos modular, lo que hace más complicado implementar algunas mejoras modernas.
- Neovim: Tiene un código base más limpio y modular, lo que facilita agregar nuevas funcionalidades y mantener el proyecto.
Objetivo de diseño
- Vim: Está enfocado en ser un editor de texto poderoso con una rica personalización a través del archivo
.vimrc
. - Neovim: Busca ser más flexible, moderno, y enfocarse en el futuro, con características nativas como integración con APIs, uso asíncrono, y soporte para características modernas como LSP.
Soporte asíncrono
- Vim: Soporta operaciones asíncronas, pero con limitaciones en comparación con Neovim.
- Neovim: Desde su inicio, está diseñado para manejar operaciones asíncronas de manera más eficiente, lo que lo hace ideal para tareas como autocompletado, linting, y manejo de múltiples procesos simultáneos.
Sistema de plugins
- Vim: Admite plugins, pero la instalación y el manejo puede ser más engorroso y menos eficiente. Muchos usan herramientas externas como Pathogen, Vundle, o vim-plug.
- Neovim: Ofrece un sistema de plugins más moderno y simplificado. También facilita el uso de lenguajes como Lua para la creación de plugins, lo que lo hace más potente y rápido.
Configuración
- Vim: Principalmente usa el archivo
.vimrc
basado en VimScript, que puede ser complejo en configuraciones avanzadas. - Neovim: Aunque también soporta VimScript, permite configurar en Lua de forma nativa, lo que facilita configuraciones más limpias y organizadas.
Lenguajes de programación soportados
- Vim: Soporta VimScript para configuraciones y plugins. Algunos plugins modernos requieren parches o adaptaciones.
- Neovim: Integra nativamente soporte para Lua y trabaja con lenguajes modernos de manera más eficiente. También es más compatible con herramientas como Language Server Protocol (LSP).
Interfaz gráfica (GUI)
- Vim: Tiene soporte para GUIs externas como GVim, pero su desarrollo no está tan activo.
- Neovim: Incluye una arquitectura que facilita integrar GUIs modernas. Hay varios frontends gráficos diseñados específicamente para Neovim, como Neovide o Goneovim.
Compatibilidad
- Vim: Es compatible con versiones más antiguas, por lo que a veces se privilegia mantener la retrocompatibilidad en lugar de incluir características nuevas.
- Neovim: Aunque mantiene alta compatibilidad con Vim, se permite romperla en casos necesarios para modernizar el editor.
Documentación y comunidad
- Vim: Tiene una documentación muy extensa y una comunidad grande que ha trabajado con él durante décadas.
- Neovim: La comunidad de Neovim está más orientada al desarrollo moderno y crece rápidamente gracias a sus características innovadoras.
Rendimiento y experiencia de usuario
- Vim: Muy eficiente en términos de uso de recursos, especialmente en sistemas más antiguos.
- Neovim: Mejora el rendimiento general, especialmente en operaciones asíncronas y la integración con herramientas modernas.
Más información,
Emacs, tío, emacs. 😛