agosto 23, 2022
~ 11 MIN
La Terminal - VIM
< Blog RSSLa Terminal - VIM
Una de las tareas más comunes para un programador es la edición de código, para lo cual usamos editores de texto. Si bien la mayoría de gente está acostumbrada al uso de editores de texto como Word, su uso en programación (si bien posible) no es del todo deseable. Para ello existen herramientas especialmente diseñadas para aumentar la productividad a la hora de escribir código, ejectuarlo, debugarlo (buscar posibles errores), etc. Programas como VSCode son perfectos para esta tarea. Conocidos como IDEs (Integrated Development Environments), nos ofrecen prácticamente todo lo que necesitamos a la hora de crear programas en un solo entorno. Sin embargo, esta serie trata sobre la terminal, y esque también existen editores de texto basados enteramente en la interacción a través de comandos. Algunos ejemplos son vim, nano, emacs, etc. Estos editores de texto brillan por su ligereza, velocidad y aumento de la productividad. Al no estar basados en una interfaz gráfica no necesitamos el uso del ratón, por lo que un usuario avanzado de editores de texto en la terminal puede modificar código a la velocidad de la luz, casi como tener superpoderes. Por otro lado, estos editores suelen tener una curva de aprendizaje muy elevada (más bien una pared de aprendizaje 😓), ya que deberemos memorizar todos los comandos, lo cual supone una gran barrera de entrada para mucha gente, sobretodo con poca experiencia con el uso de la terminal. Este post va a estar dedicado a vim, uno de los editores de texto más usados en la terminal. Si bien es posible que te sientas abrumado al principio por su complejidad, invertir tiempo en el aprendizaje de vim dará sus frutos a largo plazo. ¡Vamos a ello!
Primeros pasos
Para abrir vim
, simplemente abre tu terminal y ejecuta el comando vim
. Esto abrirá una nueva ventana vacía en la que puedes empezar a escribir texto. Sin embargo, si presionas las teclas de tu teclado verás que no ocurre nada... Empezamos mal 😅. Esto es debido a que vim
tiene diferentes modos de operación, y en función del modo en el que nos encontremos podremos hacer unas cosas u otras. Por defecto, al abrir vim
nos encontraremos en el modo normal, que no nos permite escribir texto. Para ello necesitamos entrar en el modo de inserción presionando la tecla i
. Ahora ya podrás escribir texto en el editor. Para volver al modo normal, deberás presionar la tecla <ESC>
. Una vez en modo normal, puedes cerrar el editor usando el comando :q
. Sin embargo, recibiremos un error ya que no hemos guardado nuestro archivo. Puedes ignorar el error con :!q
(lo cual no guardará los cambios) o bien usar :wq
para guardar los cambios y cerrar el editor (puedes guardar primero con :w
y luego cerrar con :q
). Esto, sin embargo, nos dará otro error ya que nuestro archivo no tiene nombre. Para ello, usa :wq
seguido del nombre y luego ejecuta <ENTER>
. Voilà, has creado tu primer archivo de texto con vim
, ¡felicidades! 🥳 Una vez creado el archivo, podrás ejectuar los comando anteriores para guardar cambios y cerrar vim
sin problemas. Para ello, abre el archivo con vim
seguido del nombre que le hayas puesto.
Alternativamente, puedes crear un archivo a la hora de abrir
vim
directamente con el comandovim
seguido del nombre del archivo que quieras crear, de esta manera te ahorrarás un paso.
Modos de operación
Como hemos visto en la sección anterior, vim
nos ofrece diferentes modos de operación. Estos son:
- modo normal: modo por defecto al abrir
vim
, al que llegamos presionando la tecla<ESC>
desde los otros modos. - modo de inserción: modo que nos permite añadir texto, al que llegamos presionando la tecla
i
desde el modo normal. - modo de reemplazo: modo que nos permite añadir texto, moviendo el texto existente, al que llegamos con la tecla
R
desde el modo normal. - modor de selección: modo que nos permite seleccionar texto (también llamado modo visual), al que llegamos con la tecla
v
desde el modo normal (con variaciones usando<SHIFT>+v
o<CTRL>+v
para selecionar por líneas o bloques, respectivamente). - modo línea de comandos: modo que nos permite ejectuar comandos, al que llegamos con la tecla
:
desde el modo normal.
Puedes ejectuar el comando :help
seguida de cualquier comando para abrir la ayuda de vim
, en la que encontrarás documentación y explicación sobre su funcionamiento.
Edición básica
Como ya hemos visto anteriormente, puedes abrir vim
simplemente ejectuando el comando en la terminal. Una vez abierto el editor, puedes entrar en el modo de inserción con la tecla i
, escribir lo que quieras, y guardar el contenido volviendo al modo normal presionando <ESC>
, entrando en el modo de línea de comandos presionando :
y ejectuar el comando w
. De manera similar, el comando q
cerrará vim
.
Es posible tener varias ventanas abiertas, para ello usa el comando :sp
o :vsp
seguido del nombre del archivo que quieras abrir. Ejecutar el comando solo te duplicará el archivo actual en el que estes trabajando (útil para trabajar en diferentes partes del mismo archivo a la vez). Puedes moverte entre ventanas con el comando <CTRL>+w+w
. Además, en cada ventana, puedes tener diferentes "pestañas", diferentes archivos abiertos a la vez. Para ello usa el comando :tabnew
. Puedes moverte entre pestañas con los comandos gt
y gT
.
Moviendo el cursor
En modo normal, puedes mover tu cursor a través del texto con las teclas h
, j
, k
y l
para ir hacia la izquierda, abajo, arriba y derecha (alternativamente, puedes usar la flechas del teclado, pero usar estas teclas te evitará mover la mano demasiado, aumentando la velocidad de edicción). Por otro lado también es posible moverse palabra por palabra, más rápido, con las teclas w
y b
, hacia adelante y atrás repectivamente (la tecla e
te moverá el cursor al final de la palabra). Puedes mover el cursos al principio o final de una línea con las teclas 0
y $
(^
te moverá al primer caracter, pudiendo evitar espacios en blanco a principio de línea). Las teclas gg
y G
te moverán al principio o final de un archivo. También puedes usar f
seguida del caracter que quieras para mover el cursos a la primera ocurrencia.
Insertando texto
Una vez tienes el cursor en la posición deseada, puedes insertar texto de diferentes maneras. Como ya hemos visto, i
nos permitirá insertar texto allí donde tengamos el cursor. Otros modos de inserción son: o
para añadir texto en la siguiente línea, O
para añadir texto en la línea superior, a
para insertar texto una posición después del cursor, A
para insertar texto al final de la línea, etc.
Eliminando texto
Puedes eliminar texto usando x
. También puedes eliminar text con la tecla d
seguida de un movimento, por ejemplo dw
eliminará hasta el final de una palabra, db
hasta el principio. Un comando muy útil es dd
, que elimina una línea entera. Si además de elminar texto queremos añadir nuevo, podemos usar c
de manera similar. Por otro lado, el comando r
nos permite reemplazar texto (ahorrándonos un par de tecleados valiosos).
Deshacer y rehacer
Como puedes ver, vim
es un lenguaje de programación en si mismo, por lo que atajos populares como <CTRL>+z
para deshacer una acción no funcionarán. En este caso, podemos usar u
para deshacer nuestra última acción y <CTRL>+R
para rehacerla.
Copiar y pegar
Para copiar texto podemos usar la tecla y
, y p
para pegar. Podemos usar los movimientos para seleccionar hasta donde copiar, por ejemplo yw
o yb
, e incluso usar yy
para copiar toda una línea.
Edición avanzada
El modo visual
Todos los comandos que hemos visto hasta ahora nos permiten llevar a cabo una edición básica, sin embargo hay varias operaciones que requieren de un uso un poco más avanzado de vim
. Por ejemplo, ¿cómo podemos seleccionar el rango que queremos usar para copiar?. Para ello podemos utilizar el modo visual, al cual accedemos desde el modo normal presionando la tecla v
. Una vez en modo visual, puedes usar las teclas de movimiento vistas anteriormente para seleccionar el texto que quieras, y de la misma manera llevar a cabo la operación determinada. Si en vez de v
usas V
, podrás seleccionar línea enteras.
Contadores
Muchos de los comandos visto hasta ahora admiten el uso de contadores. Esto modificará su comportamiento básico para ejecutar la operación deseada un número determinado de veces. Por ejemplo, hemos visto que dd
nos eliminará una línea. El comando 3dd
nos eliminará 3 líneas. De manera similar, el comando 7dw
nos eliminará las siguientes 7 palabras. Para poder sacar el máximo partido a esta carácterísitca, es muy útil usar un número de línea relativo (veremos cómo hacer esto más adelante).
Modificadores
Es posible eliminar el contenido entre paréntesis, o cualquier otro símbolo como []
o {}
, con el modificador di(
(o ci(
para reemplazar su contenido). Podemos mover el cursor entre pares de paréntesis con la tecla %
.
Buscando texto
La búsqueda de texto es una actividad muy común a la hora de programar. Para ello podemos usar /
seguido del texto que queremos buscar. Al presionar <ENTER>
, el cursos se moverá a la primera ocurrencia encontrada. Podemos movernos a siguientes ocurrencias con n
. Además de buscar texto, es posible que quiera reemplazarlo. Para ello puedes usar :s/a/b/g
, donde a
es el texto que quieres cambiar y b
el nuevo texto (la opción g
cambiará todas las ocurrencias) en una línea, o :%s/a/b/g
en todo el archivo.
Repitiendo comandos
Una forma muy eficiente de repetir una acción en vim
es usar la tecla .
. Esto nos ahorrará mucho tiempo a la hora de ejecutar acciones repetitivas, como insertar un mismo texto en varios sitios.
Variantes y configuración
Por defecto, vim
carece de muchas características que nos ayudan a la hora de programar. Algunos ejemplos son: mostrar el número de línea, diferentes colores para variables y funciones, navegación lateral, etc. Una opción que tenemos para mejorar esta experiencia es modificar el archivo de configuración de vim
, el cual se ejecuta por defecto al abrir el editor. Para ello ejecuta el comando vim ~/.vimrc
y añade la configuración deseada. Por ejemplo, la línea set number
activará el número de línea (o set number relativenumber
para enumerado relativo). De manera similar puedes configurar el tamaño del <TAB>
, usar espacio en vez de <TAB>
, y muchos otros aspectos que puedes encontrar en la documentación. También es posible instalar plugins
para añadir funcionalidad extra, e incluso usar variantes como neovim. Aun así, cada capa de configuración añadirá más complejidad al sistema y dificultará su replicación en diferentes sistemas (una solución común es tener un repositorio de git
llamado dotfiles
con todos tus archivos de configuración, el vimrc
entre ellos, que puedas clonar y usar fácilmente en cualquier sistema), todo con el objetivo de acercar vim
a la experiencia IDE
que tenemos con, por ejmplo, VSCode
(el cual dispone de una extensión de vim
para poder usar todos las características vistas anteriormente, ¿lo mejor de ambos mundos?). Te recomiendo que investigues al respecto y pruebes diferentes alternativas para evaluar aquella con la que te sientas más cómodo.
Mejorando en vim
La práctica hace al maestro, y como con cualquier otra herramienta difícil de aprender, practicar es la única manera de mejorar, aprender los diferentes comandos y entrenar la memoria muscular que te convertirá en un pro de vim
. Existen multitud de tutoriales y webs de ejercicios que te recomiendo para aprender, aunque quizás lo más útil es el tutorial que incluye vim
por defecto. Para abrirlo, ejecuta en tu termianl el comando vimtutor
y siguie las instrucciones.
Resumen
En este post hemos introducido el editor de texto basado en la terminal vim
así como los comandos más útiles para aprender a trabajar con él. Hemos visto como movernos entre los diferentes modos y editar texto (insertar, eliminar, copiar, pegar, deshacer, buscar, reemplazar), pero hay mucho más por descubrir, por lo que te recomiendo que busques en Google cómo llevar a cabo operaciones más avanzadas cuando las necesites así como hacer diversos tutoriales y ejercicios que te ayuden a mejorar (introducir nuevos comandos poco a poco es una buena aproximación).
¿Significa esto que deberías desinstalar tu editor de texto o IDE para usar sólo vim
? En mi opinión, no. Si bien saber usar vim
es una habilidad importante para un programador, creo que la flexibilidad y potencia que aportan IDEs como VSCode
valen la pena, aunque ello penalice en la velocidad a la hora de programar. Sin embargo, en aquellas ocasiones en las que tenemos que conectarnos a otras máquinas remotas en las que solo disponemos de la terminal como interfaz, usar vim
será realmente interesante. En esos casos, ser capaz de hacer una edición de texto rápida directamente en la terminal nos ahorrará muchísimo tiempo.