15%

Ahorra 15%<\/span> en todos los servicios de hosting

Pon a prueba tus habilidades y obtén Descuento<\/span> en cualquier plan de hosting

Usa el código:

Skills
Comenzar
08.10.2024

Cómo usar el editor Vi/Vim en Ubuntu: una referencia técnica completa

Vi y Vim (Vi Improved) son editores de texto modales controlados por teclado que operan completamente dentro del terminal, lo que los hace indispensables para la administración de servidores, la edición de configuraciones remotas y los flujos de trabajo de scripting en Ubuntu y otras distribuciones Linux. Vim extiende Vi con resaltado de sintaxis, deshacer multinivel, ventanas divididas, soporte de plugins y una capa de configuración scriptable, todo mientras consume recursos del sistema insignificantes.

Si administras un entorno de VPS Hosting o un servidor bare-metal, el dominio de Vim no es opcional — es una habilidad fundamental. Las sesiones SSH no siempre tienen acceso a GUI, y Vim está disponible de forma casi universal en todos los sistemas basados en Unix que alguna vez utilizarás.

Por qué Vim sigue dominando los entornos de servidor

Los IDEs modernos son potentes, pero son irrelevantes cuando estás conectado a un servidor Ubuntu sin cabeza a través de SSH a las 2 AM depurando una configuración de Nginx rota. El diseño modal de Vim significa que cada pulsación de tecla es un comando — no hay dependencia del ratón, no hay sobrecarga de renderizado y no hay latencia introducida por una capa gráfica.

Razones clave por las que los administradores de sistemas confían en Vim:

  • Sin dependencias externas: Funciona sobre cualquier conexión SSH, incluyendo enlaces de bajo ancho de banda o alta latencia
  • Disponibilidad consistente: Preinstalado o trivialmente instalable en Debian, Ubuntu, CentOS, Alpine y prácticamente cualquier distribución Linux
  • Velocidad a escala: Editar archivos de configuración, archivos de registro o scripts de miles de líneas es más rápido en Vim que en cualquier editor GUI una vez que se establece la memoria muscular
  • Scriptabilidad: El lenguaje de scripting integrado de Vim (Vimscript) y el soporte de Lua (en Neovim) permiten la automatización completa de tareas de edición repetitivas

Instalación de Vim en Ubuntu

Ubuntu viene con un paquete `vim-tiny` mínimo, que carece de resaltado de sintaxis, soporte multifichero y muchas funciones avanzadas. Para obtener la funcionalidad completa, instala el paquete completo:

“`bash

sudo apt update

sudo apt install vim -y

“`

Para verificar la versión instalada y confirmar el soporte completo de funciones:

“`bash

vim –version

“`

Busca `+syntax`, `+clipboard`, `+python3` y `+multi_byte` en los indicadores de características. Un prefijo `-` significa que esa característica fue compilada fuera del binario. Si necesitas esas características y están ausentes, instala `vim-gtk3` o `vim-nox` en su lugar:

“`bash

sudo apt install vim-nox -y # Headless full-feature build

sudo apt install vim-gtk3 -y # GTK3 build with clipboard integration

“`

Caso límite crítico: En imágenes mínimas de servidor Ubuntu — como las utilizadas en contenedores Docker o Servidores Dedicados arrancados con cloud-init — incluso `vi` puede estar ausente. En ese caso, instala `vim` explícitamente antes de intentar editar cualquier archivo de configuración.

Abrir, crear y recuperar archivos

“`bash

vim filename.txt # Open existing file or create new one

vim /etc/nginx/nginx.conf # Open a system configuration file (use sudo if needed)

sudo vim /etc/ssh/sshd_config # Edit privileged files

vim +42 filename.txt # Open file and jump directly to line 42

vim +/searchterm file.txt # Open file with cursor on first match of searchterm

“`

Recuperación de archivo de intercambio: Vim crea automáticamente un archivo de intercambio oculto (`.filename.txt.swp`) durante la edición. Si tu sesión se bloquea o la conexión SSH se cae, vuelve a abrir el mismo archivo y Vim te pedirá que recuperes los cambios no guardados. Elige siempre `(R)ecover` primero, guarda el contenido recuperado, luego elimina el archivo de intercambio con `:e` seguido de `:!rm ~/.filename.txt.swp` o ejecutando `vim -r filename.txt`.

Este mecanismo de recuperación es especialmente valioso cuando se editan archivos de configuración críticos en servidores de producción — una conexión caída no significa trabajo perdido.

Comprendiendo la arquitectura modal de Vim

El diseño modal de Vim es el concepto más importante a interiorizar. A diferencia de los editores estándar donde cada pulsación de tecla inserta un carácter, Vim separa la navegación, la edición y la ejecución de comandos en modos distintos.

ModoActivaciónPropósito principal
**Normal**`Esc` (predeterminado al abrir)Navegación, eliminación, copia, pegado, ejecución de macros
**Insertar**`i`, `a`, `o`, `O`, `I`, `A`Escribir e insertar texto
**Visual**`v` (carácter), `V` (línea), `Ctrl+v` (bloque)Seleccionar rangos de texto
**Bloque Visual**`Ctrl+v`Selección y edición basada en columnas
**Línea de comandos**`:`Operaciones de archivo, búsqueda/reemplazo, configuraciones, comandos externos
**Reemplazar**`R`Sobrescribir caracteres existentes
**Ex**`Q`Ejecución de comandos por lotes (raramente usado de forma interactiva)

El error más común de los principiantes es presionar teclas en modo Normal esperando que aparezca texto, y luego entrar en pánico cuando `dd` elimina una línea o `gg` salta al inicio del archivo. Confirma siempre tu modo actual comprobando la parte inferior izquierda de la pantalla — el modo Insertar muestra `– INSERT –`, el modo Visual muestra `– VISUAL –`, y el modo Normal no muestra nada.

Comandos de navegación en modo Normal

La navegación eficiente es lo que separa a un usuario de Vim que es meramente funcional de uno que es genuinamente rápido. Aprende estos en orden de prioridad:

Movimiento básico del cursor

TeclaAcción
`h`Mover un carácter a la izquierda
`l`Mover un carácter a la derecha
`j`Mover una línea hacia abajo
`k`Mover una línea hacia arriba
`w`Saltar al inicio de la siguiente palabra
`b`Saltar al inicio de la palabra anterior
`e`Saltar al final de la palabra actual
`0`Saltar al inicio de la línea
`^`Saltar al primer carácter que no sea espacio en blanco de la línea
`$`Saltar al final de la línea
TeclaAcción
`gg`Saltar a la primera línea del archivo
`G`Saltar a la última línea del archivo
`:42`Saltar a la línea 42
`Ctrl+f`Desplazar una página completa hacia adelante
`Ctrl+b`Desplazar una página completa hacia atrás
`Ctrl+d`Desplazar media página hacia abajo
`Ctrl+u`Desplazar media página hacia arriba
`%`Saltar al corchete, paréntesis o llave correspondiente
`*`Saltar a la siguiente ocurrencia de la palabra bajo el cursor
`#`Saltar a la ocurrencia anterior de la palabra bajo el cursor

Consejo para usuarios avanzados: Precede cualquier comando de movimiento con un número para repetirlo. `5j` baja 5 líneas. `3w` salta 3 palabras hacia adelante. `10dd` elimina 10 líneas. Este multiplicador numérico se aplica a prácticamente todos los comandos del modo Normal y es la clave para editar a velocidad.

Entrar y salir del modo Insertar

TeclaComportamiento
`i`Insertar antes del cursor
`a`Añadir después del cursor
`I`Insertar al inicio de la línea
`A`Añadir al final de la línea
`o`Abrir nueva línea debajo y entrar en modo Insertar
`O`Abrir nueva línea encima y entrar en modo Insertar
`s`Eliminar el carácter bajo el cursor y entrar en modo Insertar
`S`Eliminar la línea completa y entrar en modo Insertar
`Esc` o `Ctrl+[`Volver al modo Normal

Hábito crítico: Desarrolla el reflejo de presionar `Esc` inmediatamente después de terminar una inserción de texto. Permanecer en modo Insertar cuando pretendes navegar es la fuente de la mayoría de las ediciones accidentales.

Guardar, salir y gestión de archivos

Estos comandos se ejecutan desde el modo Línea de comandos (presiona `:` primero):

ComandoAcción
`:w`Guardar (escribir) el archivo actual
`:w filename.txt`Guardar con un nuevo nombre de archivo
`:q`Salir (solo si no hay cambios sin guardar)
`:q!`Forzar salida, descartando todos los cambios sin guardar
`:wq` o `:x`Guardar y salir
`ZZ`Guardar y salir (atajo en modo Normal)
`ZQ`Salir sin guardar (atajo en modo Normal)
`:w !sudo tee %`Guardar un archivo que abriste sin privilegios sudo

El truco `:w !sudo tee %` es conocimiento esencial para los administradores de servidores. Cuando abres un archivo del sistema como `/etc/fstab` sin sudo y realizas cambios, no puedes guardar con `:w`. Este comando canaliza el contenido del buffer a través de `sudo tee` para escribir el archivo con privilegios elevados — sin necesidad de cerrar y volver a abrir Vim.

Operaciones de edición: eliminar, copiar, pegar y deshacer

El modelo de edición de Vim está construido sobre operadores + movimientos. Un operador (como `d` para eliminar o `y` para copiar) combinado con un movimiento (como `w` para palabra o `$` para el final de la línea) crea una acción de edición precisa.

Comandos de edición principales

ComandoAcción
`x`Eliminar el carácter bajo el cursor
`X`Eliminar el carácter antes del cursor
`dd`Eliminar (cortar) la línea actual completa
`D`Eliminar desde el cursor hasta el final de la línea
`dw`Eliminar desde el cursor hasta el final de la palabra
`d$`Eliminar desde el cursor hasta el final de la línea
`d0`Eliminar desde el cursor hasta el inicio de la línea
`yy` o `Y`Copiar (yank) la línea actual completa
`yw`Copiar desde el cursor hasta el final de la palabra
`p`Pegar después del cursor (o debajo de la línea actual para copias de línea completa)
`P`Pegar antes del cursor (o encima de la línea actual)
`u`Deshacer el último cambio
`Ctrl+r`Rehacer el último cambio deshecho
`.`Repetir el último cambio (uno de los comandos más potentes de Vim)
`~`Alternar mayúsculas/minúsculas del carácter bajo el cursor
`>>`Indentar la línea actual un nivel
`<<`Desindentar la línea actual un nivel

El comando `.` (punto) es posiblemente la función de Vim más infrautilizada entre los principiantes. Repite tu última acción compuesta — si eliminaste una palabra con `dw`, presionar `.` elimina la siguiente palabra. Si cambiaste una palabra con `cw` y escribiste un reemplazo, `.` aplica el mismo reemplazo a la siguiente ocurrencia. Esto elimina las ediciones manuales repetitivas en archivos grandes.

Modo Visual: selección precisa de texto

El modo Visual proporciona tres granularidades de selección:

  • `v` — Selección visual por caracteres
  • `V` — Selección visual por líneas (selecciona líneas completas)
  • `Ctrl+v` — Selección visual por bloques (edición de columnas)

Después de hacer una selección, aplica operadores:

TeclaAcción sobre la selección
`d`Eliminar el texto seleccionado
`y`Copiar (yank) el texto seleccionado
`c`Cambiar (eliminar y entrar en modo Insertar)
`>`Indentar la selección
`<`Desindentar la selección
`~`Alternar mayúsculas/minúsculas de la selección
`:`Entrar en modo Línea de comandos con el rango prerelleno

Caso de uso real del modo Visual de bloque (`Ctrl+v`): Tienes un archivo de configuración donde necesitas comentar 15 líneas consecutivas anteponiendo `#`. Selecciona la primera columna de esas líneas con `Ctrl+v`, navega hacia abajo con `j`, presiona `I` (i mayúscula), escribe `#`, luego presiona `Esc`. Vim aplica la inserción a cada línea seleccionada simultáneamente. Esta es una tarea que requeriría una expresión regular o repetición manual en la mayoría de los otros editores.

Búsqueda y reemplazo

Búsqueda

“`

/pattern Search forward for pattern (regex supported)

?pattern Search backward for pattern

n Jump to next match

N Jump to previous match

  • Search forward for word under cursor

Search backward for word under cursor

:noh Clear search highlighting

“`

Sintaxis de búsqueda y reemplazo

“`

:%s/old/new/g Replace all occurrences in entire file

:%s/old/new/gc Replace all with confirmation prompt for each

:%s/old/new/gi Case-insensitive replace across entire file

:10,20s/old/new/g Replace only within lines 10 through 20

:'<,'>s/old/new/g Replace within visually selected range

:%s/bwordb/new/g Replace whole word only (word boundary anchors)

“`

Soporte de expresiones regulares: Vim usa su propio dialecto de expresiones regulares. El límite de palabra `b`, `d` para dígitos, `s` para espacios en blanco y `+` (uno o más) están disponibles. Para la sintaxis de expresiones regulares extendidas, usa el prefijo `v`: `:%s/v(foo|bar)/baz/g` coincide con “foo” o “bar” y los reemplaza con “baz”.

Trabajar con múltiples archivos, buffers y ventanas divididas

Aquí es donde el poder de Vim se hace más evidente para sesiones de edición complejas.

Buffers

Un buffer es una representación en memoria de un archivo. Vim puede mantener muchos buffers abiertos simultáneamente.

“`

:e filename Open a file into a new buffer

:ls or :buffers List all open buffers

:b2 Switch to buffer number 2

:bnext or :bn Switch to next buffer

:bprev or :bp Switch to previous buffer

:bd Delete (close) current buffer

“`

Ventanas divididas

“`

:split filename Horizontal split, open file in upper pane

:vsplit filename Vertical split, open file in right pane

Ctrl+w h/j/k/l Navigate between split panes

Ctrl+w = Equalize split pane sizes

Ctrl+w q Close current pane

“`

Pestañas

“`

:tabnew filename Open file in a new tab

:tabnext or gt Switch to next tab

:tabprev or gT Switch to previous tab

:tabclose Close current tab

“`

Escenario práctico: Al editar la configuración de un servidor web en un VPS con cPanel, es posible que necesites hacer referencia cruzada al `nginx.conf` principal mientras editas un archivo de host virtual. Abre ambos en una división vertical con `:vsplit /etc/nginx/nginx.conf` y navega entre paneles con `Ctrl+w l` y `Ctrl+w h` — sin necesidad de cerrar un archivo para consultar el otro.

Configuración de Vim con .vimrc

El archivo `.vimrc` en tu directorio de inicio es la configuración persistente de Vim. Se ejecuta como Vimscript cada vez que Vim se inicia.

“`bash

vim ~/.vimrc

“`

Configuración recomendada para servidores de producción

“`vim

" Display settings

set number " Show absolute line numbers

set relativenumber " Show relative line numbers (great for jump commands)

set cursorline " Highlight the current line

set scrolloff=8 " Keep 8 lines visible above/below cursor when scrolling

" Indentation

set autoindent " Copy indent from current line on new line

set smartindent " Context-aware indentation for code

set expandtab " Convert tabs to spaces

set tabstop=4 " Tab width = 4 spaces

set shiftwidth=4 " Indentation width for >> and <<

" Search behavior

set hlsearch " Highlight all search matches

set incsearch " Show matches as you type

set ignorecase " Case-insensitive search

set smartcase " Override ignorecase if search contains uppercase

" Usability

set mouse=a " Enable mouse in all modes

syntax on " Enable syntax highlighting

set encoding=utf-8 " Default encoding

set clipboard=unnamedplus " Use system clipboard for yank/paste

set undofile " Persist undo history across sessions

set undodir=~/.vim/undo " Directory for persistent undo files

" Visual

set showmatch " Briefly jump to matching bracket

set laststatus=2 " Always show status line

set wildmenu " Enhanced command-line completion

“`

Importante: La directiva `set undofile` crea un historial de deshacer persistente almacenado en disco. Esto significa que puedes cerrar un archivo, volver a abrirlo días después y aún deshacer los cambios de la sesión anterior. Crea el directorio de deshacer antes de habilitar esto:

“`bash

mkdir -p ~/.vim/undo

“`

Esto es especialmente valioso cuando se realizan cambios incrementales en archivos de configuración en sistemas de producción — por ejemplo, al ajustar la configuración de PHP-FPM o modificar los parámetros SSL en un servidor que ejecuta Certificados SSL para múltiples dominios.

Macros: automatización de ediciones repetitivas

Las macros son una de las funciones más potentes y menos utilizadas de Vim. Una macro graba una secuencia de pulsaciones de teclas y las reproduce.

“`

qa Start recording macro into register 'a'

[actions] Perform any sequence of Normal/Insert mode commands

q Stop recording

@a Replay macro stored in register 'a'

@@ Replay the last executed macro

10@a Replay macro 'a' ten times

“`

Ejemplo del mundo real: Tienes un archivo CSV con 200 líneas y necesitas envolver el segundo campo de cada línea entre comillas dobles. Graba la macro en la primera línea, reprodúcela 199 veces con `199@a`, y la transformación estará completa en menos de un segundo. No se requiere scripting.

Marcas y saltos

Las marcas te permiten marcar posiciones dentro de un archivo y volver a ellas instantáneamente.

“`

ma Set mark 'a' at current cursor position

'a Jump to the line of mark 'a'

`a Jump to the exact position of mark 'a'

'' Jump back to position before last jump

Ctrl+o Jump to previous position in jump list

Ctrl+i Jump to next position in jump list

:marks List all current marks

“`

Vim vs. Nano vs. Emacs: elegir el editor de terminal adecuado

CaracterísticaVimNanoEmacs
**Curva de aprendizaje**Pronunciada (sistema modal)MínimaMuy pronunciada
**Tiempo de inicio**Casi instantáneoCasi instantáneoMás lento
**Uso de memoria**Muy bajoMuy bajoModerado a alto
**Resaltado de sintaxis**CompletoBásicoCompleto
**Ecosistema de plugins**ExtensoMínimoExtenso
**Soporte de macros**Nativo, potenteNingunoNativo
**Ventanas divididas**No
**Edición remota**Vía SSH de forma nativaVía SSH de forma nativaProtocolo TRAMP
**Complejidad de configuración**Moderada (.vimrc)MínimaAlta (Elisp)
**Ideal para**Usuarios avanzados, administradores de sistemasEdiciones rápidas, principiantesDesarrolladores, usuarios de Lisp

Para tareas de administración de servidores — editar archivos de configuración, escribir scripts de shell, revisar registros — Vim proporciona el mejor equilibrio entre potencia, disponibilidad y velocidad. Nano es aceptable para ediciones puntuales cuando no puedes permitirte la carga cognitiva. Emacs es una opción legítima para desarrolladores que viven en el terminal, pero su huella de recursos y tiempo de inicio lo hacen menos práctico en entornos de servidor con recursos limitados.

Errores comunes y cómo evitarlos

1. Editar archivos de producción sin una copia de seguridad

Crea siempre una copia de seguridad antes de editar archivos críticos del sistema:

“`bash

sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak

sudo vim /etc/nginx/nginx.conf

“`

2. Olvidar usar sudo

Si abres un archivo con privilegios sin sudo y realizas cambios, usa `:w !sudo tee %` para guardar sin perder tus ediciones.

3. Confundir registros

Cuando eliminas texto con `dd`, va al registro predeterminado `"`. Si luego copias algo con `yy`, el texto eliminado se sobrescribe. Para preservar una copia antes de eliminar, usa registros con nombre: `"ayy` copia en el registro `a`, y `"ap` pega desde él.

4. Dejar archivos de intercambio en sistemas compartidos

Los archivos de intercambio de Vim en `/tmp` o en el directorio de trabajo pueden confundir a otros usuarios o procesos automatizados. Configura un directorio de intercambio dedicado en `.vimrc`:

“`vim

set directory=~/.vim/swap//

“`

La doble barra diagonal al final hace que Vim codifique la ruta completa del archivo en el nombre del archivo de intercambio, evitando colisiones.

5. Problemas de fin de línea en archivos multiplataforma

Si editas un archivo que se originó en Windows, puede tener terminaciones de línea CRLF (`rn`). Vim mostrará `^M` al final de cada línea. Corrígelo con:

“`bash

:%s/r//g

“`

Lista de verificación de puntos clave prácticos

Úsala como matriz de decisión de referencia rápida antes y durante las sesiones de Vim:

  • Antes de editar cualquier archivo de producción: Crea una copia de seguridad con marca de tiempo con `cp file file.$(date +%Y%m%d%H%M%S).bak`
  • Conciencia del modo: Si las pulsaciones de teclas no insertan texto, presiona `Esc` y confirma tu modo
  • Hábito de guardado rápido: Presiona `Esc` luego `:w` después de cada cambio significativo — no esperes hasta el final
  • Usa `:set number` temporalmente si necesitas navegar a una línea específica y no la tienes en `.vimrc`
  • Para búsqueda/reemplazo global: Prueba siempre con `:%s/old/new/gc` (con confirmación) antes de ejecutar `:%s/old/new/g` a ciegas
  • Aviso de archivo de intercambio al abrir: Elige siempre `(R)ecover`, guarda el contenido, luego elimina el archivo de intercambio
  • Para ediciones de columnas: Usa el modo Visual de bloque `Ctrl+v` en lugar de repetición manual
  • Deshacer persistente: Configura `set undofile` en `.vimrc` en cualquier servidor que administres regularmente
  • Integración con el portapapeles: Si `p` pega contenido inesperado, verifica que `set clipboard=unnamedplus` esté configurado y que `xclip` o `xsel` esté instalado
  • En caso de duda: `:help keyword` abre la documentación integrada para cualquier comando u opción

Ya sea que estés administrando archivos de configuración en entornos de Alojamiento Web Compartido o manteniendo infraestructura compleja en Servidores Dedicados, la eficiencia de Vim se acumula con el tiempo — cada comando que internalizas elimina fricción de tu flujo de trabajo de forma permanente.

Preguntas frecuentes

P: ¿Cuál es la diferencia entre Vi y Vim en Ubuntu?

`vi` en los sistemas Ubuntu modernos es típicamente un enlace simbólico a `vim` en un modo de compatibilidad reducida, o a `vim-tiny`. El Vi verdadero es el editor original de 1976 sin resaltado de sintaxis, sin deshacer multinivel y sin soporte de plugins. Vim añade más de 100 características sobre Vi manteniendo total compatibilidad con los atajos de teclado de Vi.

P: ¿Cómo salgo de Vim si estoy completamente bloqueado?

Presiona `Esc` varias veces para asegurarte de estar en modo Normal, luego escribe `:q!` y presiona Enter. Esto fuerza la salida sin guardar. Si incluso eso falla (raro, pero posible en estados de comandos recursivos), presiona `Ctrl+c` primero, luego `:q!`.

P: ¿Puede Vim editar archivos a través de SSH sin copiarlos localmente?

Sí. Usa `vim scp://user@hostname//path/to/file` para editar archivos remotos directamente a través de SCP. Vim gestiona la transferencia de forma transparente. Alternativamente, usa `rsync` para obtener el archivo, editarlo localmente y enviarlo de vuelta — esto es más rápido para archivos grandes.

P: ¿Cómo habilito el resaltado de sintaxis para un tipo de archivo específico que Vim no reconoce?

Ejecuta `:set filetype=nginx` (o `python`, `yaml`, `bash`, etc.) para asignar manualmente un tipo de archivo para la sesión actual. Para hacerlo permanente para una extensión de archivo específica, añade `autocmd BufRead,BufNewFile *.conf set filetype=nginx` a tu `.vimrc`.

P: ¿Es Neovim una mejor opción que Vim para uso en servidores?

Para tareas de administración de servidores puras, el Vim estándar es suficiente y está más universalmente disponible. Neovim ofrece configuración basada en Lua, mejor soporte de plugins asíncronos y un cliente LSP integrado — ventajas que importan principalmente para flujos de trabajo de desarrollo. En servidores de producción donde solo instalas lo necesario, Vim sigue siendo la opción pragmática.

15%

Ahorra 15%<\/span> en todos los servicios de hosting

Pon a prueba tus habilidades y obtén Descuento<\/span> en cualquier plan de hosting

Usa el código:

Skills
Comenzar