VIM
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.
Truco para "Cortar Bloque"
Cortar un bloque de texto (por ejemplo una columna) en un fichero
- Situarse con el
cursor
en la posición de inicio de donde queramos cortar ESC v
(para entrar en modo "visual")- Desplazar el cursor hasta la posición final de donde queremos cortar y pulsar
CTRL + v
(Se define un rectángulo) - Pulsar la tecla
d
(delete) - Guardar ó Guardar y Salir
Os dejo una animación de un txt de ejemplo de como se hace: