Cómo usar Vim en un VPS Linux
Un tutorial práctico de Vim basado en tareas reales de administración de servidores. Aprende modos, navegación, edición, búsqueda y reemplazo, divisiones de pantalla, configuración de .vimrc y flujos de trabajo para editar archivos de Nginx, SSH y Docker Compose por SSH.
Vim es el editor de texto predeterminado en la mayoría de los servidores Linux. Cuando te conectas por SSH a un VPS para editar una configuración de Nginx, cambiar un puerto SSH o ajustar un archivo Docker Compose, Vim es lo que encuentras. Este tutorial enseña Vim a través de tareas reales de administración de servidores en lugar de ejemplos abstractos.
Aprenderás cómo funcionan los modos de Vim, cómo navegar y editar archivos de forma eficiente, cómo buscar y reemplazar texto, cómo trabajar con múltiples archivos usando splits y buffers, y cómo configurar un .vimrc que acelere el trabajo en el servidor.
Requisitos previos: Un VPS Linux (Debian o Ubuntu) con acceso SSH. Familiaridad básica con la terminal (ejecutar comandos, navegar por directorios).
¿Cómo instalo Vim en Ubuntu o Debian?
La mayoría de los servidores Debian y Ubuntu vienen con vim-tiny, una versión reducida que carece de resaltado de sintaxis, historial de deshacer y soporte de plugins. Instala la versión completa para tener todas las funcionalidades de este tutorial.
sudo apt update && sudo apt install vim -y
Verifica la instalación:
vim --version | head -1
Salida esperada en Debian 12 (Bookworm):
VIM - Vi IMproved 9.0 (2022 Jun 28, compiled Nov 15 2023 17:28:07)
En Ubuntu 24.04 LTS verás Vim 9.1. La versión exacta del parche varía según la distribución, pero todas las funcionalidades de este tutorial funcionan con Vim 8.2 y posteriores.
¿Y Neovim? Neovim es un fork de Vim con un sistema de configuración basado en Lua y soporte LSP integrado. Todo en este tutorial aplica a Neovim excepto la ruta del .vimrc (Neovim usa ~/.config/nvim/init.vim). Si prefieres Neovim, instálalo con sudo apt install neovim.
Ejecuta el tutorial integrado
Vim incluye un tutorial interactivo que toma unos 30 minutos. Ejecútalo antes de seguir leyendo si nunca has usado Vim:
vimtutor
Esto abre un archivo de práctica donde aprendes haciendo. Cubre los fundamentos de movimiento y edición. El resto de este artículo profundiza más y añade flujos de trabajo específicos para servidores que vimtutor no cubre.
¿Qué son los modos de Vim y cómo funcionan?
Vim tiene cuatro modos principales. El modo Normal es el predeterminado. Se usa para navegación y ejecución de comandos. El modo Inserción sirve para escribir texto, se accede con i. El modo Visual selecciona texto, se accede con v. El modo Línea de comandos ejecuta comandos como guardar y salir, se accede con :. Pulsa Esc para volver al modo Normal desde cualquier otro modo.
Esto es diferente de editores como nano donde escribes inmediatamente. En Vim, las pulsaciones de teclas en modo Normal son comandos, no caracteres. Esto se llama edición modal.
| Modo | Acceso | Propósito | Volver a Normal |
|---|---|---|---|
| Normal | Esc (o abrir un archivo) |
Navegar, eliminar, copiar, pegar, ejecutar comandos | Ya en modo Normal |
| Inserción | i, a, o, I, A, O |
Escribir y editar texto | Esc |
| Visual | v (carácter), V (línea), Ctrl+v (bloque) |
Seleccionar texto para operaciones | Esc |
| Línea de comandos | : |
Ejecutar comandos ex (guardar, salir, buscar, reemplazar) | Enter o Esc |
El indicador de modo aparece en la parte inferior izquierda de la pantalla. Cuando ves -- INSERT --, estás en modo Inserción. Cuando no se muestra nada, estás en modo Normal.
Si te sientes atascado: pulsa Esc dos o tres veces. Esto siempre te devuelve al modo Normal sin importar tu estado actual.
¿Cómo navego por archivos en Vim?
La navegación en Vim ocurre en modo Normal. Las teclas de movimiento básicas son h (izquierda), j (abajo), k (arriba) y l (derecha). Las flechas también funcionan, pero hjkl mantiene tus dedos en la fila base y es más rápido una vez que desarrollas la memoria muscular.
Movimiento por carácter y línea
| Tecla | Acción |
|---|---|
h |
Mover un carácter a la izquierda |
j |
Bajar una línea |
k |
Subir una línea |
l |
Mover un carácter a la derecha |
0 |
Ir al inicio de la línea |
$ |
Ir al final de la línea |
^ |
Ir al primer carácter no vacío |
Movimiento por palabra
| Tecla | Acción |
|---|---|
w |
Ir al inicio de la siguiente palabra |
b |
Volver al inicio de la palabra anterior |
e |
Ir al final de la palabra actual |
W |
Ir a la siguiente PALABRA (delimitada por espacios) |
B |
Volver a la PALABRA anterior |
Movimiento en el archivo
| Tecla | Acción |
|---|---|
gg |
Ir a la primera línea del archivo |
G |
Ir a la última línea del archivo |
42G o :42 |
Ir a la línea 42 |
Ctrl+d |
Desplazar media página hacia abajo |
Ctrl+u |
Desplazar media página hacia arriba |
Ctrl+f |
Desplazar una página completa hacia abajo |
Ctrl+b |
Desplazar una página completa hacia arriba |
% |
Ir al paréntesis correspondiente ((, {, [) |
Navegación por búsqueda
Pulsa / para buscar hacia adelante, escribe tu término de búsqueda y pulsa Enter. Pulsa n para ir al siguiente resultado y N para ir al anterior. Pulsa ? para buscar hacia atrás.
Ejemplo: estás editando /etc/nginx/nginx.conf y necesitas encontrar la directiva worker_connections:
/worker_connections
Vim salta a la primera coincidencia. Pulsa n para recorrer todas las coincidencias en el archivo.
¿Cómo edito texto en Vim?
La edición en Vim sigue un patrón: operador + movimiento. El operador indica qué hacer (eliminar, cambiar, copiar). El movimiento indica sobre qué texto actuar (palabra, línea, párrafo). Esta componibilidad es lo que hace a Vim rápido una vez que interiorizas unos pocos bloques de construcción.
Entrar en modo Inserción
| Tecla | Acción |
|---|---|
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 Inserción |
O |
Abrir nueva línea encima y entrar en modo Inserción |
Eliminar, cambiar, copiar y pegar
| Comando | Acción |
|---|---|
x |
Eliminar carácter bajo el cursor |
dd |
Eliminar línea completa |
dw |
Eliminar desde el cursor hasta el inicio de la siguiente palabra |
d$ o D |
Eliminar desde el cursor hasta el final de la línea |
cc |
Cambiar línea completa (elimina y entra en modo Inserción) |
cw |
Cambiar palabra (elimina la palabra y entra en modo Inserción) |
ci" |
Cambiar dentro de comillas (elimina texto entre " y entra en modo Inserción) |
yy |
Copiar (yank) línea completa |
yw |
Copiar palabra |
p |
Pegar (put) después del cursor |
P |
Pegar antes del cursor |
Deshacer y rehacer
| Tecla | Acción |
|---|---|
u |
Deshacer último cambio |
Ctrl+r |
Rehacer (deshacer el deshacer) |
. |
Repetir último cambio |
El comando . (punto) es una de las funcionalidades más útiles de Vim. Repite lo último que hiciste. Cambia una palabra con cw, escribe el reemplazo, pulsa Esc. Ahora muévete a otra palabra y pulsa . para hacer el mismo cambio.
Ejemplos de edición relevantes para servidores
Eliminar una directiva de una configuración de Nginx:
Posiciona tu cursor en la línea access_log /var/log/nginx/access.log; y pulsa dd para eliminar la línea completa.
Cambiar un número de puerto entre comillas:
Posiciona tu cursor en cualquier lugar dentro de "8080" en un archivo Docker Compose y pulsa ci". Esto elimina 8080 y te pone en modo Inserción. Escribe 3000 y pulsa Esc.
Eliminar dos palabras de una directiva:
Pulsa d2w para eliminar las dos siguientes palabras desde la posición del cursor. Los comandos de Vim aceptan un número antes del movimiento: 3dd elimina tres líneas, 5j baja cinco líneas.
¿Cómo busco y reemplazo texto en Vim?
Usa :s (substitute) para reemplazar texto. La sintaxis básica es :s/viejo/nuevo/opciones. Este comando se aplica a la línea actual por defecto. Usa :%s para aplicarlo a todo el archivo.
Patrones de sustitución
| Comando | Acción |
|---|---|
:s/foo/bar/ |
Reemplazar primer foo por bar en la línea actual |
:s/foo/bar/g |
Reemplazar todos los foo por bar en la línea actual |
:%s/foo/bar/g |
Reemplazar todos los foo por bar en todo el archivo |
:%s/foo/bar/gc |
Reemplazar todos con confirmación (s/n para cada coincidencia) |
:5,10s/foo/bar/g |
Reemplazar todos en las líneas 5 a 10 |
Ejemplos prácticos
Cambiar el puerto de escucha de Nginx de 80 a 443:
:%s/listen 80;/listen 443 ssl;/g
Comentar una línea en sshd_config:
Muévete a la línea y pulsa I para insertar al inicio, escribe #, pulsa Esc.
Comentar múltiples líneas: Selecciona las líneas con V (modo visual de línea), baja con j para extender la selección, luego escribe :s/^/#/ y pulsa Enter. Esto antepone # a cada línea seleccionada.
Reemplazar una etiqueta de imagen Docker:
:%s/nginx:1.24/nginx:1.27/g
Fundamentos de regex en la sustitución de Vim
Vim usa su propia variante de regex. Algunos patrones que usarás frecuentemente en configuraciones de servidor:
| Patrón | Coincide con |
|---|---|
^ |
Inicio de línea |
$ |
Final de línea |
. |
Cualquier carácter |
\d |
Un dígito (0-9) |
.* |
Cualquier carácter (codicioso) |
\s |
Espacio en blanco |
Para encontrar puntos literales (como en direcciones IP), escápalos: :%s/192\.168\.1\.1/10.0.0.1/g.
¿Cómo edito múltiples archivos en Vim con splits y buffers?
Vim puede abrir múltiples archivos en una sola sesión usando buffers, ventanas divididas y pestañas. Esto es útil cuando necesitas cruzar referencias entre archivos, como consultar nginx.conf mientras editas un bloque de servidor específico.
Buffers
Un buffer es un archivo cargado en memoria. Puedes tener muchos buffers abiertos y cambiar entre ellos.
| Comando | Acción |
|---|---|
:e /etc/nginx/sites-available/default |
Abrir archivo en nuevo buffer |
:bn |
Cambiar al siguiente buffer |
:bp |
Cambiar al buffer anterior |
:ls |
Listar todos los buffers abiertos |
:b2 |
Cambiar al buffer número 2 |
:bd |
Cerrar buffer actual |
Ventanas divididas
Los splits permiten ver dos archivos lado a lado en la misma terminal.
| Comando | Acción |
|---|---|
:sp /ruta/al/archivo |
Split horizontal (arriba/abajo) |
:vs /ruta/al/archivo |
Split vertical (izquierda/derecha) |
Ctrl+w h/j/k/l |
Moverse entre splits (izquierda/abajo/arriba/derecha) |
Ctrl+w = |
Igualar tamaño de todos los splits |
Ctrl+w q |
Cerrar split actual |
Ejemplo de flujo de trabajo: editar un archivo Docker Compose mientras consultas el archivo .env:
:e docker-compose.yml
:vs .env
Ahora tienes dos paneles. Usa Ctrl+w l y Ctrl+w h para cambiar entre ellos.
Pestañas
Las pestañas son colecciones de ventanas. La mayoría de los usuarios encuentran los splits suficientes para el trabajo en servidores, pero las pestañas están disponibles:
| Comando | Acción |
|---|---|
:tabnew /ruta/al/archivo |
Abrir archivo en nueva pestaña |
gt |
Ir a la siguiente pestaña |
gT |
Ir a la pestaña anterior |
:tabclose |
Cerrar pestaña actual |
¿Cómo personalizo Vim con un archivo .vimrc?
El archivo .vimrc en tu directorio home controla el comportamiento de Vim. Sin él, Vim funciona en un modo casi compatible con Vi que carece de muchas funcionalidades. Un buen .vimrc ajustado para trabajo en servidores hace que la edición de archivos de configuración sea más rápida.
Crea o edita tu .vimrc:
vim ~/.vimrc
Añade estas configuraciones. Cada línea tiene un comentario explicativo:
" Disable Vi compatibility mode (enable all Vim features)
set nocompatible
" Use UTF-8 encoding (required for special characters in listchars on minimal server images)
set encoding=utf-8
" Show line numbers (essential for config files with error messages referencing line numbers)
set number
" Show relative line numbers (makes jumping N lines easy: 5j, 12k)
set relativenumber
" Enable syntax highlighting
syntax on
" Use spaces instead of tabs (most config files expect spaces)
set expandtab
" Set tab width to 2 spaces (common for YAML, Nginx configs)
set tabstop=2
set shiftwidth=2
set softtabstop=2
" Highlight search results as you type
set incsearch
set hlsearch
" Case-insensitive search unless uppercase is used
set ignorecase
set smartcase
" Show matching brackets
set showmatch
" Always show the status line (shows filename and position)
set laststatus=2
" Enable mouse support (useful in modern terminals)
set mouse=a
" Show current mode in status line
set showmode
" Set pastetoggle to F2 (toggle paste mode for clean pasting over SSH)
set pastetoggle=<F2>
" Disable swap files (avoids .swp clutter on servers)
set noswapfile
" Enable filetype detection (loads correct indentation for yaml, json, etc.)
filetype plugin indent on
" Highlight the current line
set cursorline
" Show whitespace characters (catch trailing spaces and mixed indentation)
set list
set listchars=tab:»·,trail:·
Guarda y sal con :wq. Las configuraciones toman efecto la próxima vez que abras Vim.
Para recargar tu .vimrc sin reiniciar Vim:
:source ~/.vimrc
Modo de pegado para sesiones SSH
Cuando pegas texto desde tu portapapeles local en Vim a través de SSH, la indentación automática puede crear un efecto de cascada donde cada línea se desplaza más a la derecha. Esto ocurre porque Vim trata el texto pegado como entrada tecleada y aplica reglas de indentación a cada línea.
Activa el modo de pegado antes de pegar:
- Pulsa
F2(si configurastepastetogglecomo se mostró arriba) o escribe:set paste - Entra en modo Inserción con
i - Pega tu texto (Ctrl+Shift+V o clic derecho en tu terminal)
- Pulsa
F2de nuevo o escribe:set nopaste
Las terminales modernas con Vim 8.2+ soportan el modo de pegado entre corchetes (bracketed paste mode), que gestiona esto automáticamente. Si usas un emulador de terminal reciente (kitty, Alacritty, WezTerm, GNOME Terminal reciente), activar el modo de pegado puede no ser necesario.
¿Cómo añado plugins con vim-plug?
vim-plug es un gestor de plugins ligero que instala plugins en paralelo. Requiere descargar un solo archivo y unas pocas líneas en tu .vimrc.
Instalar vim-plug
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
Verifica que el archivo existe:
ls -la ~/.vim/autoload/plug.vim
Deberías ver el archivo con tu usuario como propietario.
Configurar plugins en el .vimrc
Añade un bloque de plugins al inicio de tu ~/.vimrc, antes de las configuraciones:
call plug#begin('~/.vim/plugged')
" File explorer sidebar
Plug 'preservim/nerdtree'
" Fuzzy file finder
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
Plug 'junegunn/fzf.vim'
" Git status indicators in the gutter
Plug 'airblade/vim-gitgutter'
call plug#end()
Guarda el archivo e instala los plugins:
:source ~/.vimrc
:PlugInstall
vim-plug descarga cada plugin en paralelo. Tras la instalación, puedes abrir NERDTree con :NERDTree, usar :Files para buscar archivos de forma difusa y ver marcadores de diff de git en el margen.
Mantén la configuración mínima en servidores. Los plugins añaden tiempo de arranque. En un VPS donde editas archivos de configuración ocasionalmente, tres a cinco plugins son suficientes. Reserva las configuraciones pesadas para tu máquina de desarrollo local.
¿Cómo edito archivos de configuración del servidor con Vim por SSH?
Esta sección cubre flujos de trabajo que usarás repetidamente al gestionar un VPS. Cada ejemplo usa un archivo real y muestra los pasos exactos.
Usa sudoedit en lugar de sudo vim
Cuando edites archivos que pertenecen a root como /etc/nginx/nginx.conf o /etc/ssh/sshd_config, usa sudoedit en lugar de sudo vim.
sudoedit /etc/nginx/nginx.conf
sudoedit copia el archivo a una ubicación temporal, lo abre con el Vim de tu usuario (incluyendo tu .vimrc y plugins), y luego lo copia de vuelta con permisos de root cuando guardas y sales. Esto es más seguro que sudo vim por dos razones:
sudo vimejecuta Vim como root. Cualquier comando de Vim como:!bashabre un shell de root. En servidores multiusuario esto es un riesgo de escalada de privilegios.sudoeditpreserva tu entorno de usuario. Mantienes tu resaltado de sintaxis, números de línea y atajos de teclado.
Editar un bloque de servidor Nginx
Abre la configuración del sitio predeterminado:
sudoedit /etc/nginx/sites-available/default
Encuentra la directiva server_name escribiendo /server_name y pulsando Enter. Vim salta a la coincidencia. Pulsa cw para cambiar la palabra después de la directiva, escribe tu dominio, pulsa Esc.
Después de guardar, verifica la sintaxis de la configuración de Nginx:
sudo nginx -t
Salida esperada:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Luego recarga:
sudo systemctl reload nginx
Cambiar el puerto SSH en sshd_config
sudoedit /etc/ssh/sshd_config
Busca la directiva del puerto:
/^#\?Port
Esta regex coincide tanto con Port como con #Port (comentado). Si la línea está comentada, pulsa 0 para ir al inicio de la línea, pulsa x para eliminar el #, luego pulsa f seguido de un espacio para saltar al espacio antes del número de puerto. Pulsa cw, escribe el nuevo número de puerto (por ejemplo 2222) y pulsa Esc.
Verifica la configuración:
sudo sshd -t
Sin salida significa que la sintaxis es válida. Reinicia el servicio:
sudo systemctl restart sshd
Antes de desconectarte, abre una segunda sesión SSH en el nuevo puerto para verificar que aún puedes conectarte. Perder el acceso SSH al cambiar el puerto sin probar es un error frecuente.
Editar un archivo Docker Compose
vim ~/myapp/docker-compose.yml
Los archivos YAML son sensibles a la indentación. Las configuraciones del .vimrc definidas antes (tabulaciones de 2 espacios, expandtab) manejan esto correctamente. Si ves caracteres de tabulación en un archivo YAML, conviértelos:
:%s/\t/ /g
Esto reemplaza todas las tabulaciones por dos espacios. Guarda y valida el archivo:
docker compose config --quiet
Sin salida significa que el YAML es válido. Si hay un error de sintaxis, Docker Compose muestra el número de línea. Salta directamente a esa línea en Vim con vim +42 docker-compose.yml (donde 42 es la línea del error).
Editar un archivo de unidad systemd
sudoedit /etc/systemd/system/myapp.service
Después de guardar cambios en una unidad systemd, recarga el daemon:
sudo systemctl daemon-reload
Luego reinicia el servicio y verifica:
sudo systemctl restart myapp
sudo systemctl status myapp
Revisa la línea Active: en la salida de estado. Debería mostrar active (running). Si muestra failed, lee los registros:
journalctl -u myapp -n 20 --no-pager
Hoja de referencia de Vim
Los diez comandos que necesitas desde el primer día:
| Comando | Acción |
|---|---|
i |
Entrar en modo Inserción |
Esc |
Volver al modo Normal |
:wq |
Guardar y salir |
:q! |
Salir sin guardar |
dd |
Eliminar línea |
u |
Deshacer |
/text |
Buscar hacia adelante |
:%s/old/new/g |
Reemplazar todo en el archivo |
:sp file |
Dividir ventana |
F2 |
Alternar modo de pegado |
Para la referencia completa con navegación, edición, modo visual, buffers, splits, patrones regex y atajos para servidores, consulta nuestra Hoja de referencia de Vim.
¿Algo salió mal?
Vim se abrió y no puedo escribir. Estás en modo Normal. Pulsa i para entrar en modo Inserción.
Veo -- INSERT -- pero mis teclas hacen cosas raras. Puede que hayas pulsado accidentalmente Ctrl+s, que congela la salida del terminal. Pulsa Ctrl+q para descongelar.
Mi texto pegado tiene indentación en escalera. Activa el modo de pegado con F2 o :set paste antes de pegar. Recuerda desactivarlo después: F2 de nuevo o :set nopaste.
Vim dice "E45: 'readonly' option is set." El archivo es de solo lectura. Sal con :q y vuelve a abrir con sudoedit /ruta/al/archivo.
Cometí un error y guardé. Si el archivo es una configuración del sistema, Vim puede haber dejado una copia de respaldo. Busca filename~ en el mismo directorio. También puedes deshacer después de reabrir si configuraste set undofile y set undodir=~/.vim/undodir en tu .vimrc (primero crea el directorio con mkdir -p ~/.vim/undodir).
Advertencia de archivo swap: ".file.swp" ya existe. Una sesión de Vim anterior se cerró inesperadamente o sigue abierta. Si ninguna otra sesión está editando el archivo, elige (D)elete para eliminar el archivo swap. Si desactivaste los archivos swap en tu .vimrc (set noswapfile), esto no ocurrirá.
Próximos pasos: Combina Vim con un multiplexor de terminal para que tus sesiones de edición sobrevivan a las desconexiones. Consulta nuestra guía sobre tmux o sobre GNU Screen. Para los ejemplos de configuración de Nginx de este artículo, consulta la guía completa sobre administración de Nginx.
Copyright 2026 Virtua.Cloud. Todos los derechos reservados. Este contenido es una obra original del equipo de Virtua.Cloud. La reproducción, republicación o redistribución sin permiso escrito está prohibida.
¿Listo para probarlo?
Despliega tu propio servidor en segundos. Linux, Windows o FreeBSD.
Ver planes VPS