El editor vim es un clon del original vi el cual incluye ciertas mejoras.
Vim incorpora multitud de funciones que a través de atajos pueden ser utilizadas, además funciona mediante unos modos los cuales permiten que los comandos sean distintos en cada uno de ellos, o simplemente escribir si estamos en el modo insertar.
El sitio web oficial (inglés) es https://vim.sourceforge.io/
Funciones básicas en VIM
¿Qué es VIM?
Vim es un editor de texto para la terminal que proviene de vi.
El editor vi fue desarrollado en los años setenta cuando las conexiones eran mediante consola por serie. Vim pretende mejorarlo corrigiendo algunos defectos del original y además añadir nuevas funciones
El editor vim tiene casi un 100% de retrocompatibildiad con vi
Tiene muchas características como:
- Corrige y autocompleta texto
- Es multiplataforma
- Puede trabajar con pestañas y dividir la ventana
- Resalta la sintaxis en más de 200 tipos de lenguajes
- Muchos niveles para deshacer y rehacer
- Viene por defecto en todos los sistemas GNU/Linux
- Muchas extensiones y facilidad para crear la tuya
- Reconoce la mayoría de los archivos y formatos
- Permite usar macros
- Historial de órdenes
- Permite guardar y restaurar sesiones
Puedes iniciarte a vim mediante el curso básico que hemos preparado en la siguiente lista de reproducción:
Motivos para usar VIM
Es una herramienta necesaria de conocer, sobre todo si eres administrador de sistema o programador.
El motivo para afirmar esto es que vim suele venir en una versión mínima o lite instalado en todas las distribuciones, además en routers y cualquier dispositivo con GNU/Linux además de muchos basados en BSD también. Esto se da por qué es el editor más extendido para terminal, tiene una estabilidad impresionante, es software libre y sobre todo ocupa poquísimo.
Es un editor creado por programadores y su objetivo es para que sea usado por programador. Aún así, cualquier usuario de GNU/Linux que tenga curiosidad por este tipo de sistemas operativos encontrará de gran utilidad aprender este gran editor.
Uno de los motivos principales para aprender vim es que es una apuesta segura, quiero decir con esto que si aprendemos vim nos aseguramos de estar aprendiendo algo útil que no será reemplazado fácilmente ni nos cambiará la forma de trabajar.
Otro motivo para utilizar vim que interesará mucho es que sus atajos de teclado son heredados por multitud de software, de nuevo nos hace que aprender esto sea una apuesta segura (una buena inversión de tiempo). Si queremos podemos instalar complementos para muchos programas como chromium o firefox que nos permitirá agregar atajos de vim al propio navegador → !Desterrando al ratón!
Nos permite ejecutar comandos desde el mismo editor sin necesidad de salir de el (útil para ejecutar scripts si lo estamos editandos o generar un commit en git por ejemplo)
Podemos comparar archivos desde el mismo editor.
Personalmente no conozco a fondo este editor (es necesario muchísimo tiempo para ello) pero cuanto más lo uso más ágil realizo mi trabajo y más cosas descubro. Os animo a continuar con esta entrada y realizar el mini curso que dejaré para iniciarnos a vim.
Aprender jugando
El editor vim es tan popular que han surgido multitud de juegos con los que facilitar el aprendizaje de este.
Muchos de estos juegos son de aventuras de forma que vas aprendiendo comandos y conceptos poco a poco para no saturar al estudiante, esto es bastante necesario tenerlo en cuenta: ¡No quieras aprenderlo todo a la vez! Si te pones como meta un par de comandos nuevos cada semana o día (según tu ritmo de aprendizaje y tiempo invertido) por ejemplo, te resultará mucho más llevadero.
Algunos juegos que yo he probado son:
- Vim Adventures es un juego para aprender VIM en un entorno similar a RPG de 8bitshttps://vim-adventures.com/
- Tutoriales casi juego y además practicar vim en linea (en navegador web) https://www.openvim.com
Atajos útiles para aprender a usar VIM
Lo más importante al aprender vim es tener claro que hace cada tecla (no todas pero si algunas básicas) pues si nos vemos solos ante el peligro puede que nos agobiemos un poco y acabemos descartando continuar el aprendizaje (este momento es crítico, si pasas de aquí puede que luego lo ames!)
Atajos Generales básicos
Comando | Función |
---|---|
i | Entra a INSERTAR para poder escribir. Sale con ESC |
a | Entra a INSERTAR un carácter después del cursor |
A | Entra a INSERTAR al final de la línea actual |
o | Inserta una nueva línea debajo del cursor y entra en modo INSERT |
O | Inserta una nueva línea encima del cursor y entra en modo INSERT |
r | Sustituye el carácter actual bajo el cursor. Pulsar “r” y luego otro carácter |
!COMANDO | El comando después de “!” será ejecutado (comando del S.O) |
Shift-j | Une la línea actual con la siguiente. |
ha! | Imprime por la impresora por defecto |
Moverse por el documento
Comando | Función |
---|---|
h | Mueve a la izquierda |
j | Mueve hacia abajo |
k | Mueve hacia arriba |
l | Mueve a la derecha |
$ | Ir al final de la línea |
^ | Ir al comienzo de una línea |
gg | Lleva al inicio del documento (son dos letras “g”) |
G | Lleva al final del documento |
; | Mueve el cursor al último lugar que hicimos un cambio |
Cortar
Comando | Función |
---|---|
dd | Corta la línea actual. “5dd” Corta las últimas 5 líneas desde cursor |
Pegar
Comando | Función |
---|---|
p | Pega un texto copiado o cortado donde pulsemos “p” |
Borrar
Comando | Función |
---|---|
x | Borra un carácter bajo el cursor en modo NORMAL |
daw | Borra la palabra sobre la que esté el cursor |
dw | Borra palabras desde donde se encuentra actualmente el cursor |
cw | Borra desde el cursor hasta el final de la palabra y nos mete en modo editar |
c$ | Borra desde el cursor hasta el final de la línea y nos mete en modo editar |
ggdG | Te lleva al principio del documento y borra todas las líneas
|
Deshacer y Rehacer
Comando | Función |
---|---|
u | Deshace la última acción |
Control + R | Rehacer la última acción (Tiene varios niveles) |
:earliear NUMEROtiempo | Vuelve al estado del tiempo pasado
|
Buscar
Comando | Función |
---|---|
f | Se pulsa el carácter “f” y buscará en la misma línea la letra introducida |
F | Al igual que “f” busca también caracteres pero hacia atrás de la posición actual en la línea que se encuentra actualmente |
/ | Comienza una búsqueda con la cadena introducido siguiente.
|
Ctrl-g | Muestra posición y estado del cursor en el fichero |
Mayus-G | Lleva al final del documento, luego introducimos la línea a la que deseamos ir y pulsamos de nuevo “Mayus-G” para que nos lleve |
% | Sobre un paréntesis, corchete o llave lleva el cursor hasta el opuesto |
Nºgg | Ir a la línea N.º por ejemplo ir a línea 10 → 10gg |
gd | Sobre una palabra busca la primera aparición en el documento de esta |
Archivos
Comando | Función |
---|---|
:s/viejo/nuevo | Reemplaza la primera coincidencia de “viejo” “por nuevo” |
:s/viejo/nuevo/g | Reemplaza todas las coincidencias de “viejo” por “nuevo” |
:#,#s/viejo/nuevo/g | Reemplaza coincidencias de “viejo” por “nuevo” entre los números de “#” |
:%s/viejo/nuevo/g | Reemplaza “viejo” por “nuevo” en todo el documento completo |
:#,#w NOMBRE_ARCHIVO | Guardará las líneas entre “#” con el nombre de archivo introducido |
:r NOMBRE_ARCHIVO | Inserta en el fichero actual el archivo introducido |
:w | Entra en el modo guardar, después escribimos el nombre del archivo a guardar entre comillas → :w “pepe.txt”
Si el fichero ya está guardado con solo escribir “:w” ya será escrito |
:wa | Guardar todas las pestañas |
: x | Guardar y Salir |
:q | Salir |
ZZ | Guardar y salir directamente. |
:e | Pide un archivo para abrir en la pestaña actual, se puede especificar después → :e nombre_archivo |
Pestañas y Divisiones
Comando | Función |
---|---|
tabe | Crea una nueva pestaña vacía |
tabc | Cierra la pestaña actual (además de :w, :q y :x). Si añadimos “a” después de uno de estos caracteres se aplicará a todas las pestañas( :wa, :qa, :xa) |
gt | Ir a la siguiente pestaña |
gT | Ir a la pestaña anterior |
:split | División independiente horizontal |
:vsplit | División independiente vertical |
Control-W-W | Mueve entre divisiones |
Control-W + Tecla dirección | Mueve a la división según la tecla del cursor |
:tabm posición | Movemos una pestaña a la posición indicada (empieza por 0) |
:tabdo comando | Ejecutar un comando en todas las pestañas |
:q | Cerrar una división |
Sesiones
Comando | Función |
---|---|
:mksesion nombre_fichero_sesión
:mksesion visesion |
Guarda información de la sesión para restaurarla (pestañas, divisiones, subdivisiones, ficheros abiertos, opciones…). Puede abreviarse a “:mks” |
vim -S fichero_sesion | Restauraría vim desde un fichero de sesión guardado |
:source fichero_sesion | Para restaurar sesión si estamos dentro de vim. Puede abreviarse a “:so” |
Marcas
Comando | Función |
---|---|
m[letra] y [letra] | Establece una marca en el documento a la que acceder luego. Si es mayúsculas estará disponible desde todos los documentos |
Autocompletado
Comando | Función |
---|---|
Control-p | Completa la palabra que estamos escribiendo (según el/los docs abiertos) |
Control-x-f | Completa el nombre del archivo que escribimos con existentes en sistema |
Control-x-o | Completa de forma inteligente métodos de clase, clases y módulos. Puede mostrar en algunos casos documentación en subdivisión superior. |
Control-e | Anula sugerencia de completado y elimina lista desplegable.
No funcionará si ya hemos elegido uno de los términos. |