Skip to content

02 La Familia Vi_Vi Vim y Neovim

Alan edited this page Jun 13, 2026 · 1 revision

La Familia Vi: Vi, Vim y Neovim

Tabla de Contenidos

Vi

Vi (visual) es un editor de texto terminal. Nació como el modo visual del editor de texto ex, creado por Bill Joy en 1976.

El Comando vi

vi [ opciones ] [ archivo ... ]

Vim

Vim (Vi IMproved) es un editor de texto compatible con Vi, al cual se le añadieron muchas mejoras frente a Vi, por ejemplo:

  • Multi-level undo
  • Multiple windows and buffers
  • Syntax highlighting
  • Command-line editing
  • Filename completion
  • On-line help
  • Visual selection

El Comando vim

vim [ opciones ] [ archivo ... ]

Neovim

Neovim es un fork de Vim impulsado por la comunidad en el que se refactorizó el código base de Vim y se añadieron funciones y mejoras, como:

  • API de primera clase para extensibilidad
  • Soporte nativo de LSP (Language Server Protocol)
  • Soporte nativo de Lua como lenguaje de configuración y scripting
  • Arquitectura asíncrona por defecto

El Comando nvim

nvim [ opciones ] [ archivo ... ]

Modos de Vim/Neovim

Modo Normal

El modo normal es el modo predeterminado. Este nos permite navegar a través del archivo y cambiar a los demás modos. Para regresar al modo normal basta con presionar <Esc>.

Desplazamiento

Atajos para el Desplazamiento entre Caracteres
Atajo Acción
h Desplazarse un carácter hacia la izquierda
j Desplazarse un carácter hacia abajo
k Desplazarse un carácter hacia arriba
l Desplazarse un carácter hacia la derecha
Atajos para el Desplazamiento entre Líneas
Atajo Acción
0 Desplazarse hacia el inicio de línea
$ Desplazarse hacia el final de la línea
^ Desplazarse hacia el primer carácter imprimible
Atajos para el Desplazamiento entre Palabras
Atajo Nombre Acción
w word Desplazarse hacia el inicio de la siguiente palabra
W Word Desplazarse hacia el inicio de la siguiente WORD (separada por espacios)
b back Desplazarse hacia el inicio de la palabra anterior
B Back Desplazarse hacia el inicio de la WORD anterior (separada por espacios)
e end Desplazarse hacia el fin de la palabra actual o siguiente
E End Desplazarse hacia el fin de la WORD actual o siguiente (separada por espacios)
ge Desplazarse hacia el fin de la palabra anterior
gE Desplazarse hacia el fin de la WORD anterior (separada por espacios)

Note

En Vim, una word es una secuencia de letras, dígitos y guiones bajos, o una secuencia de otros caracteres no blancos. Una WORD (mayúscula) es cualquier secuencia de caracteres no blancos. Por eso W, B y E ignoran la puntuación y solo se detienen en espacios.

Atajos para el Desplazamiento entre los Signos de Agrupación
Atajo Acción
% Desplazarse alternadamente entre signos de agrupación (pares soportados por defecto: () {} []; véase :h matchpairs para más información)
Atajos para el Desplazamiento mediante Scroll
Atajo Acción
<ctrl> + e Bajar una línea
<ctrl> + y Subir una línea
<ctrl> + d Bajar media página
<ctrl> + u Subir media página
<ctrl> + f Bajar una página
<ctrl> + b Subir una página
Atajos para el Desplazamiento hacia Secciones
Atajo Acción
gg Ir a la primera línea
G Ir a la última línea
N G
N gg
Ir a la línea N

Copiar, Pegar y Cortar

Tip

Puedes utilizar i (inner) para operar sobre el contenido interior de un delimitador sin incluirlo, e.g., yi( copia el contenido dentro de (), di" elimina el contenido dentro de "". Usa a (around) para incluir también el delimitador, e.g., da( elimina () y su contenido.

Atajos para Copiar (Yank)
Atajo Acción
yw Copiar desde el cursor hasta el fin de palabra
yy Copiar la línea actual
N yy Copiar N líneas
y0 Copiar hasta el inicio de la línea
y$ Copiar hasta el final de la línea
y^ Copiar hasta el primer carácter imprimible
yiw Copiar la palabra bajo el cursor
yip Copiar el párrafo bajo el cursor
ygg Copiar hasta el inicio del archivo
yG Copiar hasta el final del archivo
Atajos para Pegar (Paste)
Atajo Acción
p Pegar después del cursor
P Pegar antes del cursor
N p Pegar N veces después del cursor
N P Pegar N veces antes del cursor
Atajos para Cortar (Delete)
Atajo Acción
x Cortar el carácter bajo el cursor
dd Cortar la línea actual
N dd Cortar N líneas
d<space> Cortar el carácter bajo el cursor
d0 Cortar hasta el inicio de la línea
d$ Cortar hasta el final de la línea
d^ Cortar hasta el primer carácter imprimible
diw Cortar la palabra bajo el cursor
dip Cortar el párrafo bajo el cursor
dgg Cortar hasta el inicio del archivo
dG Cortar hasta el final del archivo

Note

En Vim/Neovim, eliminar (delete) en realidad corta el contenido al registro predeterminado ". Por eso dd seguido de p mueve una línea.

Note

x y d<space> cortan el carácter bajo el cursor, pero con una diferencia: x no acepta un operador de movimiento, mientras que d<space> sí forma parte de la gramática d{movimiento}, por lo que su comportamiento es estrictamente equivalente a dl.

Atajos para Cortar y Reemplazar (Change)
Atajo Acción
cw Cortar desde el cursor hasta el fin de palabra e insertar
ciw Cortar la palabra bajo el cursor e insertar
C Cortar hasta el final de la línea e insertar
cc Cortar la línea entera e insertar
Atajos para Revertir y Rehacer
Atajo Acción
u Revertir
<ctrl> + r Rehacer

Búsqueda de Texto

Atajo Acción
/[patrón] Busca hacia adelante coincidencias del patrón
?[patrón] Busca hacia atrás coincidencias del patrón
/\v[patrón] Patrón very magic: los caracteres no alfanuméricos son interpretados como símbolos especiales de RegEx (no es necesario escaparlos)
n Salta a la siguiente coincidencia en la dirección de búsqueda
N Salta a la anterior coincidencia en la dirección de búsqueda

Note

El modificador \v no es un atajo independiente; se escribe como parte del patrón de búsqueda, e.g., /\vfoo(bar)+. También se puede utiliza en los comandos de reemplazo.

Tip

Para aprender más sobre los patrones de búsqueda (expresiones regulares de Vim), véase Vim Regular Expressions 101.

Modo Insert

El modo insert (inserción) es el modo que nos permite editar el archivo, equivalente al modo por defecto de la mayoría de editores de texto.

Atajos para Entrar al Modo Insert

Atajo Nombre Acción
i insert Entra al modo insert posicionándose antes del cursor
a append Entra al modo insert posicionándose después del cursor
I Insert Entra al modo insert en el primer carácter imprimible de la línea
A Append Entra al modo insert al final de la línea
o Entra al modo insert abriendo una nueva línea debajo
O Entra al modo insert abriendo una nueva línea encima

Modo Visual

El modo visual nos permite seleccionar texto para copiarlo, eliminarlo, sustituirlo, etc. Existen tres variantes:

Atajo Acción
v Modo visual por carácter
V Modo visual por línea
<ctrl> + v Modo visual en bloque (selección rectangular)

Comandos en Modo Visual

Una vez seleccionado el texto, se pueden ejecutar los siguientes comandos:

Atajo Acción
y Copiar el texto seleccionado
d Cortar el texto seleccionado
u Convertir el texto a minúsculas
U Convertir el texto a mayúsculas
> Indentar el texto seleccionado
< Desindentar el texto seleccionado

Modo Replace

El modo replace (reemplazo) permite sobrescribir caracteres sin entrar al modo insert.

Atajo Acción
r Reemplaza el carácter bajo el cursor y vuelve al modo normal
R Entra al modo replace: sobrescribe carácter a carácter

Note

Los atajos s y S pertenecen al modo normal y son atajos de change: s equivale a cl (cortar carácter e insertar) y S equivale a cc (cortar línea e insertar). No constituyen un modo separado.

Modo Comando

El modo comando nos permite ejecutar comandos dentro de Vim/Neovim. Para ejecutar un comando podemos seguir los siguientes pasos:

  1. Entrar al modo normal presionando <Esc>
  2. Presionar :
  3. Escribir el comando
  4. Presionar <Enter> para ejecutarlo

Comandos Básicos

Comando Acción
:w [archivo] Guarda el archivo actual (o en [archivo] si se especifica)
:q Cierra el buffer actual
:qa Cierra todos los buffers abiertos
:wq [archivo]
:x [archivo]
Guarda y cierra el buffer actual
:wa Guarda todos los buffers abiertos
:wqa
:xa
Guarda y cierra todos los buffers abiertos
:e [archivo] Abre o crea un archivo en el buffer actual
:e! Recarga el archivo desde disco, descartando cambios no guardados
:!{comando} Ejecuta un comando de shell y muestra el resultado en Vim/Neovim
ZZ Guarda solo si hubo cambios y cierra (equivale a :x)
ZQ Cierra sin guardar (equivale a :q!)

Tip

Para forzar un comando, agrega ! después de él, e.g., :q! para salir sin guardar cambios.

Comando de Reemplazo

El comando de reemplazo nos permite buscar y reemplazar texto dentro de un archivo mediante expresiones regulares (RegEx), permitiendo desde sustituciones literales hasta patrones complejos.

Tip

Para aprender más sobre el comando de reemplazo y las expresiones regulares de Vim, véase Vim Regular Expressions 101.

Búsqueda y Reemplazo

La sintaxis para la búsqueda y reemplazo es la siguiente:

:[rango]s[ubstitute]/patrón/string/[flags]

Donde para cada línea dentro del rango se reemplaza una coincidencia (match) del patrón con la string. Las flags disponibles son:

  • c — Confirma cada sustitución interactivamente
  • g — Reemplaza todas las ocurrencias en la línea (sin g, solo la primera)
  • i — Aplica case-insensitive para el patrón
  • I — Aplica case-sensitive para el patrón (anula i)
Rango de Operación, Direccionamiento de Línea y Marcas
Especificador Descripción
número Número absoluto de una línea
. La línea actual
$ La última línea del archivo
% El archivo completo; equivalente a 1,$
't Posición de la marca t
/patrón/ La siguiente línea donde hay coincidencia con el patrón
?patrón? La línea anterior donde hay coincidencia con el patrón
\// La siguiente línea que coincida con el patrón de búsqueda usado anteriormente
\?? La línea anterior que coincida con el patrón de búsqueda usado anteriormente
\& La siguiente línea que coincida con el patrón de sustitución usado anteriormente
Ejemplos de Búsqueda y Reemplazo Sencillos
Comando Acción
:s/foo/bar/ Reemplaza la primera ocurrencia de foo por bar en la línea actual
:s/foo/bar/g Reemplaza todas las ocurrencias de foo por bar en la línea actual
:%s/foo/bar/g Reemplaza todas las ocurrencias de foo por bar en todo el archivo
:%s/foo/bar/gc Igual que el anterior, pero confirma cada sustitución
:5,12s/foo/bar/g Reemplaza todas las ocurrencias entre las líneas 5 y 12
Ejemplos de Búsqueda y Reemplazo Avanzados
Comando Acción
:%s/\<foo\>/bar/g Reemplaza foo solo como palabra completa (límites de word en Vim: \<\>)
:%s/foo/bar/gi Reemplaza foo de forma case-insensitive en todo el archivo
:%s/\(foo\)\(bar\)/\2\1/g Intercambia foo y bar usando grupos de captura
:%s/^/ / Añade dos espacios al inicio de cada línea
:%s/\s\+$// Elimina los espacios en blanco al final de cada línea

Recursos Recomendados

Referencias

Introducción a los Sistemas Operativos

Introducción a Linux

Licencias de Software

Archivos y Directorios

Introducción a la CLI

Manipulación de Archivos y Directorios

Documentación y Exploración de Comandos

Redirección

Búsqueda de Archivos y Texto

Editores de Texto de Terminal

Gestión de Usuarios y Grupos

Propiedad y Permisos

Herramientas Esenciales

Hardware

Apéndice

Clone this wiki locally