El editor de textos vim¶
VIM (del inglés Vi IMproved ó Vi mejorado, en español) es un editor de texto basado en terminal creado a partir del editor vi, presente en todos los sistemas UNIX. Dada su naturaleza, al igual que otros editores similares como nano se gestiona a través del teclado.
El desarrollo de este poderoso editor se remonta al año 1991 y desde aquel entonces no ha cesado de incorporar características. Amado u odiado, este editor ofrece múltiples opciones en una sola herramienta, siendo altamente configurable para adaptarse a distintas necesidades de programadores y profesionales de la informática.
Instalación¶
Para instalar el editor en nuestro sistema, ejecutamos en una terminal:
Modos de operación¶
A modo de introducción al uso del editor de texto vim, se ofrece esta guía de uso. Para saber más, podés visitar la documentación oficial del programa.
Vim es un editor de tipo modal. Es decir, soporta varios modos de operación:
- normal (o comando)
- inserción
- línea de órdenes (o línea de comandos o Cmdline)
- selección
- visual
- Ex
Los modos normal, inserción y línea de órdenes suelen ser los más utilizados y, por lo mismo, serán los que estudiaremos en esta guía.
-
Normal (o Comando): es el modo principal y siempre se puede acceder a él presionando la tecla
Esc
. Cuando Vim inicia lo hace en este modo. En este modo no podemos editar directamente el texto sino que lo haremos a través de comandos basados en teclas o combinaciones de éstas. -
Modo inserción: para acceder a este modo debemos presionar la tecla
i
. En este modo podremos insertar texto, es decir, escribir dentro de un archivo como lo solemos hacer normalmente. -
CMD (o CMD): para acceder a este modo debemos presionar la tecla
:
y seguidamente, introducir el comando que deseamos ejecutar finalizando con la teclaEnter
. Es decir,:comando Enter
. Este modo se utiliza generalmente para guardar y salir del documento, así como para realizar búsquedas complejas y otras operaciones relacionadas con la configuración del programa.
Abrir un archivo¶
Luego de haber instalado VIM podremos abrir una terminal y comenzar a utilizar el editor ejecutando:
Veremos la ventana principal del editor con un archivo vacío listo para usar.
Si en cambio, quisiéramos abrir un archivo existente, simplemente deberíamos pasarle la ruta hacia el mismo como parámetro:
No es necesario colocar la extensión del archivo. En el ejemplo se coloca sólo con fines explicativos.
Antes de seguir, conviene distringuir desde la óptima de Vim a qué llamamos archivo y buffer: un archivo está guardado en el disco rígido mientras que un buffer se guarda en la memoria.
Cada vez que Vim abre un archivo en realidad lo que abre es una copia de éste y la guarda momentáneamente en memoria. A ésto es lo que llamamos buffer. Sólo cuando guardemos los cambios, la información contenida en el buffer se guardará en el archivo.
Abriendo múltiples archivos¶
De esta forma podríamos abrir varios archivos de la siguiente manera:
Luego, sólo veremos un archivo abierto en pantalla. El resto de los archivos también fueron abiertos, solo que se encuentran guardados en el buffer.
Desplazamiento entre archivos o buffers¶
Una vez que abrimos un archivo o buffer podemos desplazarnos dentro de éste de múltiples maneras. A continuación se listan algunas de las acciones posibles junto con sus atajos de teclado.
Desplazamiento entre los buffers¶
CMD | Acción |
---|---|
:bn |
Abrir el siguiente buffer disponible. |
:bp |
Abrir el buffer anterior disponible. |
:bf |
Abrir el primer buffer disponible. |
:bl |
Abrir el último buffer de la lista. |
:bd |
Eliminar buffer actual de la lista. No elimina el archivo del disco. |
:bd buffer |
Eliminar un buffer determinado de la lista. No elimina el archivo del disco. |
:ls |
Lista los buffers abiertos. |
:args |
Lista los buffers abiertos. |
Desplazamiento general¶
Normal | CMD | Acción |
---|---|---|
k (ó ↑) | - | Desplazar el cursor hacia arriba |
l (ó →) | - | Desplazar el cursor hacia la derecha |
j (ó ↓) | - | Desplazar el cursor hacia abajo |
h (ó ←) | - | Desplazar el cursor hacia la izquierda |
gg | :0 |
Ir al comienzo del archivo |
G | :$ |
Ir al final del archivo |
n G | :n |
Ir a la línea n del archivo |
Ctrl + f | - | Ir a la siguiente página |
Ctrl + b | - | Ir a la anterior página |
{ | - | Ir al párrafo siguiente |
} | - | Ir al párrafo anterior |
Desplazamiento entre pantallas¶
Normal | CMD | Acción |
---|---|---|
- | :split |
Dividir la pantalla horizonalmente |
- | :vsplit |
Dividir la pantalla verticalemnte |
Ctrl + w | - | Navegar entre pantallas divididas |
Desplazamiento entre pestañas¶
Normal | CMD | Acción |
---|---|---|
- | :tabe |
Crear una nueva pestaña vacía |
- | :tabs |
Listar pestañas abiertas |
gt | - | Ir hacia la siguiente pestaña |
gT | - | Ir hacia la anterior pestaña |
- | :tabm n |
Ubicar la pestaña actual en la posición n |
Desplazamiento entre marcas¶
Normal | Acción |
---|---|
m + (a-z) | Crear una marca y asignarle una letra (entre la a y z) |
' + (a-z) | Ir al principio de una línea marcada con la letra (entre a y z) |
' + . | Ir hacia el último cambio realizado en el documento |
Insertar texto¶
Normal | Acción |
---|---|
i | Insertar texto delante de la posición actual del cursor. |
a | Insertar texto detrás de la posición actual del cursor. |
I | Insertar texto al comienzo de la línea donde se encuentra el cursor. |
A | Insertar texto al final de la línea donde se encuentra el cursor. |
o | Crear una nueva línea abajo de la posición actual del cursor. |
O | Crear una nueva línea arriba de la posición actual del cursor. |
Copiar, cortar y pegar texto¶
Normal | Acción |
---|---|
Shift + v | Seleccionar la línea en la que se encuentra el cursor. |
Ctrl + v | Iniciar selección desde la posición actual del cursor. Deben utilizarse las teclas de dirección. |
y | Copiar selección. |
yy | Copiar la línea en la que se encuentra el cursor. |
n yy | Copiar n líneas desde la ubicación actual del cursor. |
d | Cortar selección. |
dd | Cortar la línea en la que se encuentra el cursor. |
p | Pegar el contenido del buffer después de la posición actual del cursor. |
P | Pegar el contenido del buffer antes de la posición actual del cursor. |
Copiar, cortar y pegar texto (avanzado)¶
CMD | Acción |
---|---|
:g/algo/t$ |
Copiar todas las líneas que contengan la palabra algo al final del archivo. |
:g/algo/m$ |
Mover todas las líneas que contengan la palabra algo al final del archivo. |
:m[+/-]n |
Mover la línea actual n veces hacia abajo (-) o hacia arriba (+) |
Eliminar texto¶
Normal | Acción |
---|---|
x | Eliminar el carácter ubicado en la posición actual del cursor |
X | Eliminar el carácter anterior a la posición actual del cursor |
dd | Eliminar la línea correspondiente a la posición actual del cursor |
n dd | Eliminar n líneas después de la posición actual del cursor |
D | Eliminar texto desde la ubicación actual del cursor hasta el final de la línea. |
d$ | Eliminar texto desde la ubicación actual del cursor hasta el final de la línea. |
dw | Eliminar la siguiente palabra a partir de la posición actual del cursor. |
dG | Eliminar texto desde la posición actual del cursor hasta el final del archivo. |
dgg | Eliminar texto desde la posición actual del cursor hasta el principio del archivo. |
Eliminar texto (Avanzado)¶
CMD | Acción |
---|---|
:g/borrar/d |
Eliminar todas las líneas que contengan la palabra borrar |
:g/^\s*$/d |
Eliminar todas las líneas vacías o en blanco. |
:g/^#/d |
Eliminar todas las líneas que estén comentadas. |
:g!/^#/d |
Eliminar todas las líneas que no estén comentadas. |
:g/^\(#\|$\)/d |
Eliminar todas las líneas que estén comentadas y en blanco. |
Buscar¶
Comando | Acción |
---|---|
/algo | Buscar la palabra algo hacia adelante |
?algo | Buscar la palabra algo hacia atrás |
n | Ir hacia la próxima coincidencia de búsqueda |
N | Ir hacia la anterior coincidencia de búsqueda |
% | Ir hacia el complementario del paréntesis, llave o corchete actual |
Reemplazar¶
Comando | Acción |
---|---|
cw | Reemplazar la palabra en la que se encuentra ubicado el cursor. |
cc | Reemplazar el texto completo de la línea en la que se encuentra ubicado el cursor. |
Reemplazar (avanzado)¶
CMD | Acción |
---|---|
:%s/old/new/g |
Reemplazar old por new en todo el archivo |
:s/old/new/g |
Reemplazar old por new en la línea actual. |
:n,m s/old/new/g |
Reemplazar old por new entre las líneas n a m. |
Guardar, descartar cambios y salir¶
Comandos | Acción |
---|---|
u | Deshacer el último cambio realizado |
Ctrl + r | Rehacer el último cambio realizado |
ZZ | Guardar los cambios y salir. |
CMD | Acción |
---|---|
:w |
Guardar los cambios. |
:w! |
Forzar guardar los cambios. |
:w nuevo.txt |
Guardar el contenido del archivo actual en nuevo.txt. |
:w! nuevo.txt |
Forzar guardar el contenido del archivo actual en nuevo.txt sobrescribiéndolo si existe. |
:n,m w nuevo.txt |
Guardar el texto comprendido entre las líneas n y m en nuevo.txt. |
:q |
Salir. |
:q! |
Forzar salir sin guardar los cambios. |
:wq |
Guardar los cambios y salir. |
:wq! |
Forzar guardar los cambios y salir. |
:e nuevo.txt |
Abrir nuevo.txt sin guardar los cambios en el archivo actual. |
:e! nuevo.txt |
Forzar abrir nuevo.txt sin guardar los cambios en el archivo actual. |
:x |
Guardar los cambios y salir. |
Algunos tips¶
Comandos | Acción |
---|---|
< | Disminuir tabulación |
> | Aumentar tabulación |
CMD | Acción |
---|---|
:set autoindent |
Sangría automática |
:set shiftwidth=4 |
Definir cuatro espacios para la sangría |
:syntax on |
Habilitar resaltado de sintáxis |
set encoding=utf-8 |
Encoding UTF8 |
:set number |
Habilitar numeración de líneas |
:set number! |
Deshabilitar numeración de líneas |
:set wrap |
Habiliar el ajuste de líneas. |
:set nowrap |
Deshabilitar el ajuste de líneas. |
:set hlsearch |
Habilitar resaltado de coincidencias de búsqueda. |
:set nohlsearch |
Deshabilitar resaltado de coincidencias de búsqueda. |
:! comando |
Ejecutar un comando de Linux sin salir del editor |
_Estas funcionalidades se aplicarán en tiempo real al archivo que tengamos abierto en ese momento, pero se perderán una vez que cerremos el editor. A continuación se explica como guardar permanente nuestras preferencias _
Para establecer la configuración que deseemos de manera permanente tendremos que abrir (o crear, en caso de no existir) el archivo .vimrc
en la carpeta home
de nuestro usuario:
" Esquema de colores
colorscheme molokai
" Habilitar el resaltado de sintaxis
syntax on
" Mostrar número de líneas
set number
" Ancho de la sangría (en espacios) al presionar la tecla TAB (por defecto)
set tabstop=4
" Ancho de la sangría (en espacios) al presionar la tecla TAB
set softtabstop=4
" Ancho de la sangría al presionar las teclas < y > (en Comando)
set shiftwidth=4
" Numero de espacios insertados al presionar la tecla TAB. Depende del valor de shiftwidth
set smarttab
" Inserar espacios en lugar de tabulaciones al presionar la tecla TAB (en modo inserción)
set expandtab
" Sangría automática al comenzar una nueva línea
set autoindent
" Ajustar texto de líneas largas
set linebreak
Saber más sobre VIM¶
Como habrás notado, aventurarse a navegar el universo Vim, supone una inversión inicial de tiempo y esfuerzo, puesto que su manejo no se parece en nada a lo que conocemos cuando hablamos de editores de texto.
Una vez que hayamos conseguido dominar medianamente la herramienta nos veremos compensados por la eficiencia y rapidez con la que realizaremos ciertas tareas en comparación a los editores de texto tradicionales.
La guía ofrecida en este curso intenta ser sólo una pequeña introducción al manejo del editor Vim. No obstante, si deseamos aprender a manejar la herramienta con mayor profundidad podemos consultar el abundante material disponible sobre este programa. He aquí algunos ejemplos:
Videos¶
- Curso Vim - Lucas Ontivero
- Curso Vim - Martín Algañaraz: 1, 2 y 3
- VimCasts (en inglés)