Por qué usar Vim

Filosofía y proceso de aprendizaje del editor de texto Vim
VI(M) es un editor de texto que apareció en 1991 y todavía es muy popular (junto con Emacs). Por lo general, los desarrolladores experimentados lo eligen después de usar otros editores. A menudo, hacen la transición desde IDE completos. ¿Por qué?
Vim con linter configurado, árbol de archivos NERDTree y búsqueda difusa con fzf
Esta guía no proporcionará un tutorial paso a paso de Vim. El objetivo es explicar la filosofía de Vim, las razones de su popularidad y proporcionar una dirección para el aprendizaje continuo.
Diferencias entre editores
En el mundo moderno, hay muchas opciones de editores: Sublime Text, Atom, VS Code, Brackets, por nombrar algunos. Y eso sin mencionar los IDE.
Visual Studio Code
Todos ellos tienen sus desventajas, pero en términos de funcionalidad, están llenos de características. Los editores se comparan en función de las siguientes características:
  • Velocidad de trabajo. Aunque esto se considera lo más importante, la práctica demuestra que los programadores están dispuestos a sacrificar velocidad por características avanzadas.
  • Capacidades de edición de texto, como cursores múltiples o divisiones de pantalla.
  • Amplia variedad de complementos, que incluyen soporte para lenguajes y herramientas.
  • Integraciones, como git, terminales y más.
Cuando se compara Vim con otros editores de esta manera, parece quedarse atrás. Sí, es el más rápido, pero claramente tiene menos y peores complementos, y carece de integraciones, aunque muchos de ellos no son necesarios en el mundo de Vim. Además, Vim (y su versión gvim, que se ejecuta como una aplicación de ventana independiente) es un programa de terminal con todas las implicaciones que eso conlleva. Aunque se admite el uso del mouse, trabajar con él en Vim es incómodo. Por ejemplo, el desplazamiento se realiza en saltos, ya que el desplazamiento de línea a línea es la norma en una terminal de texto.

Y luego está la curva de aprendizaje. La curva de aprendizaje de Vim es aún más pronunciada que la de Emacs. Aprender a usar Vim implica sufrir literalmente (aunque no por mucho tiempo si se aprende correctamente).
Un extraño entre los suyos
Entonces, ¿por qué Vim?

Si el método de mecanografía a ciegas se creó para escribir texto de manera eficiente, Vim se creó para editar texto a ciegas.

Vim ofrece una forma diferente de trabajar con texto. En lugar de usar teclas de acceso directo + mouse + flechas para moverse por el texto y realizar modificaciones, Vim introduce el concepto de modos. Por defecto, cuando se abre el editor, se entra en el modo normal. En este modo, todo el teclado actúa como un panel de control y no se puede escribir texto. Su principal función es utilizar el teclado para moverse por el texto y realizar modificaciones mediante comandos. A diferencia de las teclas de acceso directo, todos los comandos son cortos y a menudo compuestos, y se presionan de forma secuencial, no simultánea como las teclas de acceso directo.

En otras palabras, Vim proporciona un lenguaje para modificar texto.

Aquí hay algunos ejemplos:
  • w - moverse a la siguiente palabra
  • W - moverse a la siguiente palabra separada por espacios
  • b - moverse a la palabra anterior
  • B - moverse a la palabra anterior separada por espacios
  • dd - eliminar una línea
  • diw - eliminar la palabra debajo del cursor
  • daw - eliminar la palabra debajo del cursor junto con su entorno (todo excepto los espacios, como comillas)
  • gg - moverse al principio del documento
  • / - iniciar una búsqueda; todo lo que se ingrese a continuación se buscará en el archivo abierto (además, hay comandos para moverse hacia adelante y hacia atrás en los resultados de la búsqueda)
Aquí hay un ejemplo más interesante: r. Después de presionar esta tecla, el editor espera el siguiente carácter. Luego, cuando se ingrese, el editor reemplaza el carácter debajo del cursor por el ingresado. No es difícil adivinar que r significa replace. Vim tiene cientos de comandos como este, y muchos de ellos se pueden combinar en cadenas complejas, lo que permite hacer cosas sorprendentes.

El sistema de comandos en sí se organiza en un sistema lógico, donde todo tiene sentido y está en su lugar. No solo en términos de nombres (i - inner, a - around, etc.), sino también en términos de ubicación en el teclado. De hecho, si no estás usando la distribución de teclado QWERTY, todo el teclado "se moverá" y usar Vim será extremadamente incómodo.

El movimiento por el texto es otro aspecto importante. En Vim, todos los movimientos se realizan con las teclas hjkl. Es posible que te sorprenda que estas teclas estén en una sola fila. Pero, como muestra la práctica, te acostumbras rápidamente a este sistema y luego intentas moverte de la misma manera en todas partes.

Una tecla clave en esta estructura es la tecla llamada Leader. No es una tecla específica, es diferente para cada usuario, aunque ahora, por lo general, todos usan la barra espaciadora. La razón es que la mayoría de las combinaciones de teclas personalizadas (y las proporcionadas por los complementos) se realizan a través del líder. En la configuración, se denota como <Leader>.
vim cheat sheet by Max Cantor
Pero un solo modo normal no es suficiente para trabajar de manera eficiente. Para cambiar al modo de inserción insert, hay más de 6 formas diferentes. Por ejemplo, escribir el comando i permite comenzar a escribir directamente en la posición del cursor, mientras que shift + a mueve el cursor al final de la línea (lo cual es necesario con bastante frecuencia). Por otro lado, cc borra la línea en la que se encuentra el cursor y entra en el modo de inserción.

Para salir del modo de inserción y volver al modo normal, simplemente presiona ESC.

Además de estos dos modos, Vim tiene el modo visual, que es similar al modo normal pero se usa exclusivamente para seleccionar texto. También hay otro modo de interactuar con el editor después de ingresar el carácter : en el modo normal. El cursor se mueve hacia abajo en la pantalla, donde se pueden ingresar varios comandos. Por ejemplo, para salir de Vim, se debe ingresar q y presionar Enter. Por lo general, los comandos ingresados de esta manera se denotan como :help. Es decir, debes ingresar : seguido de la palabra help y luego presionar Enter.

Cuando se trabaja correctamente en Vim, el modo de inserción solo se usa para escribir texto (o borrar mientras se escribe). Las modificaciones y los movimientos se realizan, en la gran mayoría de los casos, en el modo de comandos.

La potencia del modo normal se puede apreciar por el hecho de que casi todos los editores populares tienen un complemento que emula el comportamiento de Vim, y generalmente es el complemento más popular con una gran ventaja sobre los demás. Por ejemplo, el complemento para VS Code se ha instalado más de un millón de veces.

Otro ejemplo interesante y, para muchos, sorprendente de la popularidad de este modo es el software que nos rodea. Gmail admite la navegación de estilo Vim directamente en su interfaz web, al igual que GitHub (intenta presionar el signo de interrogación en la página de cualquier repositorio). Cada navegador tiene un complemento popular que permite navegar por las páginas cargadas al estilo de Vim. Todos los paginadores, como less o more, también utilizan la navegación portada de Vim. Por lo tanto, todos los programas que utilizan paginadores, como git log (y otros comandos de git). Incluso en bash, simplemente ingresa set -o vi y la línea de comandos se convierte en vi (sin la m). Por cierto, de forma predeterminada, bash tiene el modo emacs habilitado con las teclas de acceso directo de ese editor.

La existencia de modos es una razón clave, pero no la única. Otra razón igualmente importante son los búferes. En los editores normales, hay una clara distinción entre pestañas con archivos y otros paneles, como el árbol de archivos, la terminal incorporada, la ventana de errores, la ventana de configuración, la ventana de depuración, etc. Todas estas entidades tienen sus propias reglas de funcionamiento y visualización, su propio conjunto de teclas de acceso directo y su propio método de navegación (si es que se puede navegar dentro de ellos).

En Vim, cualquier parte del editor abierta en su propio marco es simplemente un búfer de texto independiente, independientemente de cómo se use. Esto automáticamente significa que hay una forma única de interactuar con estos búferes. Por ejemplo, la búsqueda mencionada anteriormente / funciona perfectamente en cualquier parte del editor. Lo mismo ocurre con los movimientos hjkl. El contenido de dicho búfer se puede copiar con las herramientas estándar, ya sea en su totalidad o seleccionando parte de él. Se puede cerrar con un comando diseñado para cerrar búferes (nuevamente, independientemente de su estructura interna). Incluso se pueden abrir más búferes de los que caben en el área de trabajo. Algunos búferes pueden superponerse a otros sin problemas, lo que no impide cambiar entre ellos. Los búferes son tan convenientes que, a pesar de la existencia de pestañas, los usuarios de Vim rara vez las usan.

Otra ventaja repentina aparece debido a la naturaleza textual del propio editor. Puesto que se abre directamente en pestañas de terminal, y los terminales avanzados tienen una característica como ventanas split, la integración del terminal dentro de Vim no es realmente necesaria, y usando una combinación de pestañas de terminal y Vim se puede personalizar el flujo de trabajo muy convenientemente.
Terminal iTerm 2 con ventanas split
El costo
Las facilidades descritas no son gratuitas. Hay ciertos requisitos previos. El principal de ellos es la mecanografía a ciegas. La experiencia muestra que si un programador escribe a ciegas pero no utiliza el método de mecanografía a ciegas de diez dedos, o no puede adaptarse o experimenta incomodidad constante. Si aún no has aprendido a escribir a ciegas, debes posponer el aprendizaje de Vim para el futuro.

Por lo general, las personas que escriben correctamente y valoran la capacidad de no mover las manos de la posición central (mover las manos a las flechas les causa incomodidad física y rechazo) encuentran en Vim una verdadera joya. Todo el sistema de comandos se adapta perfectamente a este concepto.

Pero aquí también hay trampas. En los días en que se creó Vim, el teclado tenía un aspecto diferente. En lugar de la tecla de bloqueo de mayúsculas y la tecla de tabulación, había teclas de control y escape. Estas últimas se usan mucho en Vim. Si no haces nada al respecto, tendrás que hacer un gran esfuerzo para usar Vim. Por lo tanto, lo primero que hacen los usuarios de Vim es cambiar ctrl a la tecla de bloqueo de mayúsculas y, para esc, usan la combinación estándar ctrl + [, que es fácil de hacer con el control desplazado para aquellos que dominan bien el método de mecanografía a ciegas, o usan la combinación jj, que definen por sí mismos.
Teclado del terminal ADM-3A
En el mundo de Vim, hay un detalle que afecta seriamente la cantidad de usuarios. A diferencia de los editores modernos, que permiten configuración mediante la selección de casillas de verificación o la modificación de valores en un archivo JSON, Vim requiere soporte para su propio archivo de configuración y el manejo manual de casi todo. Vim no tiene un mecanismo para ver e instalar complementos directamente desde el editor. Cada complemento debe encontrarse por separado en GitHub y agregarse al archivo de configuración. Si se necesita configuración adicional, también se debe hacer en este archivo. El archivo de configuración utiliza el lenguaje de programación VimL, el mismo en el que está escrito el propio editor. Desafortunadamente, no se puede configurar una vez y olvidarse. A pesar de que hay una gran cantidad de ejemplos de estos archivos de configuración en la red, constantemente hay que ajustar algo, reemplazar complementos y agregar nuevas teclas de acceso directo.
Fragmento del archivo de configuración de Vim
Cuándo no aprender Vim
  • Si estás satisfecho con los editores normales
  • Si no tienes suficiente dominio de la mecanografía a ciegas
  • Si no estás dispuesto a lidiar con la configuración y solo quieres que el editor funcione
  • Si eres un usuario de Emacs (en ese caso, aprende spacemacs)
Vale la pena mencionar que no debes aprender Vim al mismo tiempo que lo que planeas hacer dentro de él. La carga cognitiva al aprender Vim es tan alta que no te quedará energía para aprender un nuevo lenguaje, marco o incluso programación en general. Vale la pena mirar Vim cuando ya estás trabajando cómodamente y quieres nuevas experiencias emocionantes.

Otro aspecto importante es estar dispuesto a aceptar la ideología de Vim. A menudo sucede que un programador comienza a usar Vim pero no comienza a usar Vim. Sigue usando las flechas y rara vez entra en el modo de comandos. Este enfoque de aprendizaje de Vim es el más peligroso. Una vez que te acostumbras, será extremadamente difícil volver a aprender. Un gran número de personas que se consideran usuarios de Vim no usan Vim y, en realidad, trabajan de manera extremadamente ineficiente.

Aprender Vim es un proceso mentalmente desafiante. El hecho es que la experiencia en sí no te hace mejor en algo. Después de aprender a escribir de alguna manera, una persona seguirá escribiendo de esa manera incluso después de muchos años (no en términos de velocidad, sino en términos de eficiencia en el trabajo). Lo mismo ocurre con el uso de editores.

Para aumentar tu eficiencia, debes estar constantemente observando tus acciones, rastreando las que llevan demasiado tiempo, leyendo artículos y libros en busca de nuevas formas de resolver viejos problemas. Este enfoque es importante no solo al trabajar con Vim, sino también en general, no solo en programación. Pero es en Vim donde no se puede lograr el éxito de otra manera. Durante el aprendizaje, no puedes darte el lujo de hacer las cosas de cualquier manera y luego resolverlo más tarde. Sin darte cuenta, se formarán malos hábitos y tu crecimiento se detendrá. Si no estás listo para esto, debes posponer el aprendizaje.
Cuánto tiempo llevará
Si sigues los consejos anteriores y practicas Vim correctamente, llevará aproximadamente un mes llegar desde "cada acción lleva un minuto" hasta "puedo trabajar sin prisa, consultando la documentación periódicamente". Después de eso, el proceso se vuelve más fácil, pero no debes detenerte en esta etapa. Afinar todas las habilidades necesarias puede llevar hasta un año. Pero no te asustes. De todos modos, después de uno o dos meses, podrás trabajar de manera bastante decente.
NeoVim
Hace algún tiempo, se creó el proyecto NeoVim. Es un fork de Vim desarrollado por entusiastas. Ahora es muy popular y funciona mejor que el Vim original. Es casi completamente compatible con los complementos, y la mayoría de los complementos se desarrollan teniendo en cuenta NeoVim. Recomiendo usar NeoVim como tu editor principal.
Proceso de aprendizaje
  • Instala NeoVim y Vim (con soporte para Python 3).
  • No todos los pasos descritos a continuación deben realizarse de manera secuencial. Si algo se puede hacer en paralelo, hazlo en paralelo. De todos modos, antes de sumergirte en Vim, debes completar el tutorial oficial de Vim, que se incluye con Vim mismo. Abre una terminal y escribe vimtutor, y si es necesario, instala Vim. Después de eso, puedes comenzar con los tutoriales interactivos mencionados a continuación. Debes hacer esto al mismo tiempo que practicas con Vim real.
  • Imprime y estudia las hojas de trucos de Vim.
  • Aprende a usar las características de tu terminal, como divisiones y pestañas, utilizando las teclas de acceso directo.
  • Cambia los mapeos de teclas como se describe anteriormente.
  • A partir de aquí, hay dos caminos. Puedes comenzar desde cero y configurar tu propio .vimrc (configuración), lo cual es extremadamente difícil y costoso al principio, o, lo que es mejor, tomar una configuración prehecha y concentrarte en aprender Vim en sí. Luego, gradualmente, puedes explorar cómo funciona todo por dentro y, si es necesario, crear tu propia configuración. Recomiendo usar mi configuración. Incorpora las mejores prácticas y prácticamente no contiene código personalizado. Además, utiliza los complementos más modernos. Estudia cuidadosamente el archivo Makefile y ejecuta todos los comandos necesarios. Durante el trabajo, revisa constantemente el archivo .vimrc y estudia su contenido junto con los complementos instalados. Todos los complementos se alojan en GitHub junto con su documentación.
  • Aprende a usar el administrador de paquetes plug. Este es el primer paso para ingresar a Vim.
  • El aprendizaje de Vim incluye dos aspectos. El primero es trabajar dentro de un búfer. Esto incluye la navegación y el dominio de los comandos básicos de modificación y movimiento. El segundo es la navegación por el proyecto y la gestión de la estructura de archivos. La gestión de la estructura de archivos (creación, cambio de nombre y eliminación) se realiza mediante el complemento NERDTree, y para la navegación, hay tres métodos principales y varios métodos adicionales. Los principales son la búsqueda difusa (fzf), el cambio entre búferes (bufexplorer) y la navegación por el árbol de archivos (NERDTree). Todos son importantes y se utilizan constantemente. Aunque Vim admite pestañas, los usuarios de Vim rara vez las usan, pero incluso si las usan, no es para los mismos fines que se usan en los editores normales. Los métodos adicionales de navegación incluyen saltos a las últimas modificaciones (Vim las recuerda y permite saltar hacia adelante y hacia atrás) y la combinación gf, que significa "go to file".
  • Estudia el conjunto de complementos que se adapten a tu pila de tecnología y luego instálalos. Hay muchos artículos en línea sobre cómo configurar Vim para casi cualquier pila de desarrollo. La única recomendación es buscar complementos basados en lsp.
Recursos útiles
De vez en cuando, vale la pena consultar la documentación. También se puede abrir en Vim utilizando el comando :help.
Leer otros artículos de Guías
Lea otros artículos relevantes del mundo de la tecnología y el espíritu empresarial.