VIM

Linux Nivel Básico 30 de may. de 2023

El temido, odiado y amado editor Linux

VIM: Vim (Vi Mejorado) es una versión del editor de texto Vi, presente en todos los sistemas UNIX.

Hoy en día está de moda entre las nuevas generaciones el uso de Sublime Text, VsCode o Atom. Sin embargo estas aplicaciones modernas tienen una gran pega y es su ineficacia a la hora de gestionar los recursos del equipo.

Abrir un simple fichero en C, de apenas unos 60 bytes, consume una gran cantidad de RAM para realizar esa tarea:

  • VSCode » 349 Mb
  • Atom » 256 Mb
  • Vim » 5 Mb

Estas cantidades se disparan de forma escandalosa si los fichero son mayores en los editores modernos (horror)...

Otras pruebas de rendimiento entre todos estos editores, fue la sustitución de 100.000 palabras en un texto, los tiempos para completar la tarea fueron los siguientes:

  • Atom» Se colgó varias veces
  • VsCode » Tardó 1 minuto y 20 segundos
  • Sublime Text » 6 segundos
  • Vim » 4 segundos

Una vez explicado todo esto, entenderás porqué Vim es uno de los editores de texto preferidos por los SysAdmin e incluso algunos programadores.

NOTA: Aparte de su edición extraña y su uso desde la consola, Vim ha mejorado considerablemente y permite la inclusión de 'plugins' que permite a los programadores el autocompletado de código, resaltado de sintaxis, inclusión de macros, plegado de código, identación automática y cualquiera de las opciones que hace cualquier editor moderno.

Primer contacto con Vim

Vamos a explicar primero el funcionamiento de Vim, en su modo 'nativo' tal y como está tras instalarlo, sin incluir plugins, macros o cualquier otra mejora.
El preparar, ajustar y personalizar Vim a nuestro gusto, lo dejaremos para el artículo 'Vim avanzado'.

Una de las primera cosas que debemos saber de Vim es que tiene varios modos:

  • modo normal
  • modo inserción
  • modo de comando
  • modo visual:
    • de carácter
    • de línea
    • de bloque

Iniciar VIM

Lo primero que necesitamos saber es como ejecutar/iniciar Vim, simplemente escribe desde la línea de comandos:

vim
 	Y pulsa INTRO

Se abrirá y te saldrá la pantalla inicial, con una pequeña y simple ayuda.

Vamos a cerrarlo:

ESC :q INTRO

Pulsa la tecla ESC, luego pulsa : (dos puntos), escribe q y luego pulsa Intro.

Si queremos abrir directamente un fichero simplemente escribiremos:

vim nombre_del_fichero

Prueba tu mismo a abrir un fichero de texto cualquiera y luego cierra VIM.
Si modificaste algo del fichero, te indicará que no puedes salir sin guardar los cambios, y te indica que uses ! para forzarlo.
Para salir sin realizar ningún cambio deberás escribir:

ESC :q! INTRO

Si quieres, puede descargarte este texto de ejemplo para practicar con VIM.

Una vez tengas descargado el fichero, puedes ir hasta el directorio en donde lo hayas dejado y escribir:

vim texto_de_ejemplo.txt

Si por algún motivo has abierto VIM y quieres editar sin tener que salir del editor y tener que indicar el nombre del fichero, simplemente realiza lo siguiente:

ESC :e texto_de_ejemplo.txt INTRO

Movimiento en VIM

Ahora necesitamos saber como movernos en Vim por un texto.
Para desplazarnos por el texto, podemos usar las teclas del cursor para movernos, pero tambien podemos usar las teclas h j k l para realizar los mismo.
Para usar estas teclas como teclas de dirección, lo primero que hay que hacer es estar en el modo 'normal', para ello nos aseguramos de desactivar el modo de inserción (si estuviese en uso) pulsando la tecla ESC

Para simplificar que movimiento realiza cada tecla, una pequeña tabla con las teclas y su movimiento (Se puede usar en cualquier modo):

Cursor Tecla Movimiento en VIM
h Moverse a la izquierda
l Moverse a la derecha
j Moverse hacia arriba
k Moverse hacia abajo

Movimiento rápido en VIM

Para desplazarnos más rápido dentro de VIM, disponemos de otras teclas y combinaciones de estas para movernos:

Tecla direccion Tecla Movimiento que se realiza
Inicio 0 Ir al Inicio de la línea
Fin $ Ir al Final de la línea
CTRL ← b Ir al Inicio de la palabra Anterior
CTRL → w Ir al Inicio de la palabra Siguiente
e Ir al Final la palabra Siguiente
CTRL Inicio 1 G ó 1 Mayús g Ir al Principio del documento
CTRL Fin G ó Mayús g Ir al Final del documento
NOTA 1: Recuerda que para usar las letras de direccion, debes estar en modo normal y no en modo inserción. Acuerdate de pulsar siempre ESC para pasar al modo normal.
NOTA 2: En VIM se distinguen Mayúsculas y minúsculas para los comandos, acciones y teclas de movimiento.

Borrado e Inserción

Borrar caracteres/texto
Con el fichero 'texto_de_ejemplo.txt' abierto, desplazate por el texto y localiza algun carácter que quieras borrar...
En el texto de ejemplo, en la segunda línea, hay un asterisco que 'molesta' y lo puedes eliminar.
Pulsa ESC, situa el cursor debajo de él y pulsa la tecla x para borrarlo (también puedes usar la tecla SUPR)

Insertar caracteres/texto
Vemos que nos falta un guión que he usado como 'subrayado'...
Para poder insertar texto o un simple carácter, debemos de estar en el modo inserción.
Para activar la inserción realiza lo siguiente:

ESC i

Ahora puedes insertar el guión, para que quede todo 'subrayado'.

Grabar y Salir en el editor VIM

Para Grabar los cambios debes de escribir:

ESC :w INTRO

Para Salir del editor VIM, recuerda que debes escribir:

ESC :q INTRO

Una de las ventajas de VIM, es que te permite agrupar comandos.
Los dos pasos anteriores se pueden realizar en uno sólo escribiendo lo siguiente:

ESC :wq INTRO

Apertura de ficheros en VIM

Probemos de nuevo a abrir el fichero texto_de_ejemplo.txt, podemos hacerlo de varias formas:

1) Abrir directamente el fichero deseado:

vim texto_de_ejemplo.txt

2) Iniciar VIM y luego leer el fichero:

vim
ESC :e texto_de_ejemplo.txt INTRO

Si tenemos abierto VIM, puede que no recordemos el nombre exacto del fichero que queremos abrir, para ello podemos usar 2 trucos:

1) Hacer listado de ficheros de la ruta actual desde vim:

ESC :! ls INTRO

Este comando de VIM lanza la instrucción ls y nos muestra los ficheros, un nuevo INTRO nos devuelve a VIM y ya podemos usar ESC :e fichero para editar el fichero deseado.

2) Abrir un 'navegador' con el que desplazarnos por la lista de ficheros con las teclas de dirección, y usar INTRO para seleccionar el fichero a editar:

ESC :e .

Deshacer / Rehacer cambios

Una pequeña tabla con la combinación de teclas necesarias para deshacer o rehacer los cambios realizados:

Combinación teclas Acción en VIM
ESC u Deshacer los ultimos cambios. Cada ESC u deshace un bloque de cambios.
ESC U Deshacer una línea entera.
ESC CTRL r Rehacer los cambios.

Sintaxis de comandos y acciones en VIM

Vim posee una manera especial de recibir ordenes, hay que saber un poco de su sintaxis para sacarle el máximo rendimiento.
Hay varias formas, con saber la más habitual suficiente, no hay que complicarse..

Sintaxis para comandos:

N Comando Objeto

N » Es el nº de veces que queremos se ejecute el comando, si no ponemos numero, se considera por defecto una sola vez.
Comando » El comando a usar, por ejemplo d para borrar (delete), y para pegar (yank), etc...
Objeto: El elemento o unidad sobre el que actua el comando.

La excepcion a esta sintaxis es el comando borrar líneas dd, codificado así para acelerar el trabajo con el teclado:

dd 	» Borrar (delete) una línea.
Ndd 	» Borrar N líneas.

Nomenclatura de los Objetos/Elementos disponibles en VIM:

  • l » Letra (letter) sobre la que esté situado el cursor.
  • w » Palabra (word). Desde el cursor hasta el final de la palabra, incluyendo el espacio.
  • e » Palabra (word). Desde el cursor hasta el final de la palabra SIN incluir el espacio.
  • $ » Desde el cursor hasta el final de la línea.

Comandos básicos en VIM

Una pequeña tabla con los comandos más usados habitualmente para un manejo básico de VIM:

Comando Acción que realiza en VIM
ESC Pasar a modo 'normal'
ESC i Pasar a modo 'inserción'
ESC v Pasar a modo 'visual'
yy Copiar (yank) la línea
dd Borrar (delete) y Copiar línea. Se borra y se almacena en el portapapeles de VIM = Cortar
p Pegar (paste) el último contenido del portapapeles de VIM
o Insertar/abrir (open) una línea en blanco debajo de la línea del cursor.
O Insertar/abrir (open) una línea en blanco encima de la línea del cursor.
u Deshacer ultimos cambios
U Deshacer todos los cambios de una línea
CTRL r Rehacer los cambios
r Reemplazar el caracter bajo el cursor
cw Cambiar texto de una palabra (change word) desde la posición del cursor
CTRL g Ver nombre del Fichero actual. Nº de línea actual y numero de líneas del fichero.
:set number Mostrar números de línea.
:set nonumber No mostrar números de línea. Ocultar números de línea.
Mayús g Ir al final del fichero
N Mayús g Ir a a la línea N (También se puede usar :N)
/texto Busca la palabra texto en el fichero y situa el cursor sobre esa palabra.
n Busca hacia adelante la siguiente aparición de la palabra indicada en /texto
Mayús n Busca hacia atras la palabra indicada cuando se usó /texto
% Busqueda de apertura/cierre asociados de: llaves { }, paréntesis ( ) y corchetes [ ] Situado sobre una de ellas te lleva directamente a la relacionada que abre/cierra.
:s/Texto1/Texto2/ Sustituir/Reemplazar en la línea actual, solo la 1ª aparición de Texto1 por Texto2
:s/Texto1/Texto2/g Sustituir/Reemplazar en la línea actual, todas las apariciones Texto1 por Texto2
:N,Ms/Txt1/Txt2/g Sustituir entre las líneas N y M todas las apariciones de Txt1 por Txt2
:%s/Txt1/Txt2/g Sustituir en todo el documento todas las apariciones de Txt1 por Txt2
:!comando_linux Ejecutar el comando_linux indicado. Pulsar Intro para volver a VIM.
:w Grabar el fichero actual.
:w! Forzar la grabación del fichero actual.
:wq Grabar y Salir del fichero actual.
:wq! Forzar la grabación y Salir del fichero actual.
:q Salir. Si hay algo pendiente de salvar no se permite.
:q! Salir sin grabar (modo forzado)
:w CopiaA Hace una copia del fichero actual y se graba como CopiaA. Se continua la edición con el fichero actual.
:N,Mw CopiaB Se copia el contenido de las lineas N a la M en el fichero CopiaB.
:r Fichero Lee (read) e inserta el contenido de Fichero a partir de la posición del cursor en el fichero actual.
:e Fichero Cierra el fichero actual (si se guardo) y edita el Fichero indicado.
:edit . Abre el 'navegador' de VIM que permite recorrer directorios con los cursores. Escoger con INTRO el directorio a entrar y fichero a editar.
:help Muestra la ayuda general de Vim
:help ayuda.txt Muestra el capítulo de ayuda específico, de los que aparecen al ver la ayuda general.

Con toda esta información hay más que suficiente para defenderse decentemente con VIM.

Publicaré un artículo sobre el uso de 'Vim Avanzado' con algunos trucos, consejos, plugins y personalizaciones que podrás aplicar para poder usar VIM como un profesional.

Etiquetas

Luis GuLo

🐧 SysAdmin GNU/Linux - 🐳 Docker - 🖥️ Bash Scripting - 🐪 Perl - 🐬 MySQL - 👥 Formador de TI - 👥 Formador de SysAdmin's - 💢 Ansible - ☁️ Cloud Computing - ❤️ Debian GNU/Linux