Saltar a contenido

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.

Linux VIM Logo

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:

sudo apt-get install vim

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 tecla Enter. 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:

vim

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:

vim archivo.txt

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:

vim uno.txt dos.txt tres.txt

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:

bash$ cd /home/tuUsuario && vim .vimrc
Dentro del archivo en cuestión podremos setear la configuración deseada:

" 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