Anexo B: Editores Vi y Nvim - Mini-Curso Práctico
Anexo B: Editores Vi y Nvim - Mini-Curso Práctico
Introducción
Vi/Vim/Nvim son editores de texto basados en terminal disponibles en TODO servidor Linux. No tienen interfaz gráfica, por lo que son imprescindibles para administrar servidores remotos vía SSH.
- Vi: Editor clásico (1976), disponible en cualquier Unix
- Vim: “Vi Improved” (1991), extensión mejorada de Vi
- Neovim: “Next generation Vim” (2014), moderno, extensible
Este mini-curso te enseña solo lo que necesitas para editar archivos rápidamente en Abacom.
🗺️ En este anexo aprenderás:
- Modos de Vi/Vim (Normal, Insert, Command)
- Navegación y movimiento
- Edición básica (insertar, copiar, pegar, borrar)
- Búsqueda y reemplazo
- Guardar y salir
- Configuración básica
- Diferencias Vi vs Vim vs Nvim
⏱️ Duración estimada: 90 minutos de práctica
¿Vi? ¿Vim? ¿Nvim? ¿Cuál Uso?
En producción (servidores remotos):
- Usa Vi o Vim - Siempre está disponible
- Nvim puede no estar instalado en servidores antiguos
En tu máquina de desarrollo:
- Usa Nvim - Moderno, más funcionalidad, configuración mejorada
- O Vim si Nvim no está disponible
Para Abacom:
- Aprende Vim (compatible con Vi, pero mejor)
- Ten Nvim en tu máquina local para trabajo cómodo
💡 Editores en Diferentes SOs
BASH
# Verificar si está instalado
$ which vim
/usr/bin/vim
$ which nvim
/usr/bin/nvim
# Instalar si no está
$ sudo apt install vim vim-nox # Linux
$ sudo apt install neovim # Para Nvim
# Usar Vim
$ vim archivo.txt
# O Nvim
$ nvim archivo.txt
# Configuración en ~/.vimrc o ~/.config/nvim/init.vimDisponibilidad:
- ✅ Vim: Siempre disponible en servidores
- ✅ Nvim: Disponible en máquinas modernas
- Recomendado: Vim en producción, Nvim en desarrollo
BASH
# macOS viene con Vi preinstalado
$ which vi
/usr/bin/vi
# Verificar Vim
$ which vim
/usr/bin/vim
# O instalar via Homebrew
$ brew install vim
$ brew install neovim
# Usar Vim
$ vim archivo.txt
# Configuración típica:
$ ~/.vimrc
$ ~/.config/nvim/init.vim
# Nota: En macOS, Vim puede ser versión antigua
# Mejor usar Homebrew para instalar versión más nuevaDisponibilidad:
- ⚠️ Vi: Versión antigua (preinstalada)
- ⚠️ Vim: Versión antigua o no instalada
- ✅ Nvim: Disponible via Homebrew
- Recomendado: Instalar Vim/Nvim via Homebrew
POWERSHELL
# Windows NO tiene Vim nativo
# Opciones:
# OPCIÓN 1: Windows Subsystem for Linux (WSL)
PS> wsl vim archivo.txt
# Accede a Vim via WSL (requiere Ubuntu/Debian en WSL)
# OPCIÓN 2: Git Bash (incluye Vim)
PS> "C:\Program Files\Git\usr\bin\vim.exe" archivo.txt
# OPCIÓN 3: Instalar directamente (NeoVim portable)
PS> choco install neovim # Via Chocolatey
PS> nvim archivo.txt
# OPCIÓN 4: VS Code con extensión VIM
PS> code archivo.txt
# Instalar "Vim" extension en VS Code (mejor UX)
# Configuración en Windows:
# %APPDATA%\.vimrc o ~/.config/nvim/init.vim (via WSL)Disponibilidad:
- ❌ Vim: No disponible nativamente
- ⚠️ Vi: Solo via WSL
- ✅ Nvim: Via Chocolatey o manual
- ✅ VS Code + Vim extension: Recomendado para principiantes
Comparación rápida: | Aspecto | Linux | macOS | Windows | |——–|——-|——-|———| | Vim disponible | ✅ Sí | ⚠️ Versión vieja | ❌ No | | Nvim disponible | ✅ Fácil | ✅ Homebrew | ✅ Chocolatey | | Recomendado para producción | Vim | Vim | WSL + Vim | | Recomendado para desarrollo | Nvim | Nvim | VS Code + Vim |
Los 3 Modos de Vim
Modo Normal (Command Mode)
Aquí accedes pero NO ESCRIBES. Es donde pasas más tiempo.
- Navegar con hjkl (izquierda, abajo, arriba, derecha)
- Buscar, copiar, pegar, borrar, deshacer
- Presiona ESC desde cualquier modo para volver aquí
Modo Insert (Edit Mode)
Aquí escribes como en un editor normal.
- Todas las teclas escriben caracteres
- Presiona ESC para volver a Modo Normal
- Se activa con: i, a, o, c, etc
Modo Command (: Mode)
Aquí ejecutas comandos de Vim.
- Presiona : en Modo Normal para entrar
- Comandos: :w (guardar), :q (salir), :set (configurar)
- Presiona Enter para ejecutar, ESC para cancelar
Concepto 2: Editar en Modo Insert
Entrar a Modo Insert
i → Insert antes del cursor
I → Insert al inicio de la línea
a → Append después del cursor
A → Append al final de la línea
o → Open nueva línea abajo
O → Open nueva línea arriba
Ejemplo práctico:
BASH
# Abre archivo
vim /tmp/test.txt
# Presiona i (enter Modo Insert)
# Escribe: Hola Abacom
# Presiona ESC (volver a Modo Normal)
# Presiona :w (guardar)Editar Dentro de Palabras
c → Change (cambiar) = borrar y entrar Insert
cw → Cambiar palabra bajo cursor
Ejemplo:
BASH
Línea original: El servidor web está activo
# Posiciona cursor en "web"
# Presiona cw (change word)
# Tipo: nginx
# Resultado: El servidor nginx está activoConcepto 3: Copiar, Cortar, Pegar
Copiar (Yank)
y → Yank (copiar) línea completa
yw → Yank palabra
yy → Yank línea (igual a y)
3yy → Yank 3 líneas
Cortar (Delete)
d → Delete línea
dw → Delete palabra
dd → Delete línea completa
3dd → Delete 3 líneas
x → Delete carácter bajo cursor
Pegar
p → Paste (pegar) después de posición actual
P → Paste antes de posición actual
Ejemplo completo:
BASH
# Abre archivo
vim /tmp/ejemplo.txt
# Posiciona en línea que quieres copiar
# Presiona yy (copia línea)
# Muévete a otra línea
# Presiona p (pega)
# Resultado: línea duplicadaConcepto 4: Buscar y Reemplazar
Búsqueda Simple
/patron → Busca "patron"
n → Próximo resultado
N → Anterior resultado
Reemplazar en Línea
:s/antiguo/nuevo → Reemplaza en línea actual
:s/antiguo/nuevo/g → Reemplaza todos en línea
Reemplazar en Archivo
:%s/antiguo/nuevo → Primera ocurrencia por línea
:%s/antiguo/nuevo/g → TODAS las ocurrencias
:%s/antiguo/nuevo/gc → Con confirmación (c=confirm)
Ejemplo práctico:
BASH
# Archivo con varios "localhost"
vim /etc/hosts
# Reemplazar todo
:% s/localhost/127.0.0.1/g
# Resultado: todos "localhost" → "127.0.0.1"Concepto 5: Deshacer y Rehacer
u → Undo (deshacer)
Ctrl+r → Redo (rehacer)
U → Undo toda línea (todas cambios en línea actual)
Práctica:
BASH
vim /tmp/test.txt
# Haz cambios varios
# Presiona u varias veces para ver cómo deshace
# Presiona Ctrl+r para rehacerConcepto 6: Guardar y Salir
Guardar
:w → Write (guardar)
:w nuevo.txt → Guardar como nuevo archivo
:w! → Guardar forzadamente (sobrescribe)
Salir
:q → Quit (salir) si no hay cambios
:q! → Quit sin guardar (! = force)
:wq → Write y Quit (guardar y salir)
:wq! → Guardar forzadamente y salir
ZZ → Equivalente a :wq
Combinaciones Útiles
:w | q → Guardar y salir (pipe)
:e archivo.txt → Abrir otro archivo (edit)
💡 Ejemplos Prácticos Reales
Ejemplo 1: Editar Archivo de Configuración Nginx
Escenario: Necesitas cambiar puerto 80 a 8080 en nginx.conf
BASH
# Abre archivo
vim /etc/nginx/nginx.conf
# Búsqueda
/listen 80
# Presiona n para siguiente resultado hasta encontrar el correcto
# Navega al número 80
# Presiona ci" (change inside quotes) o simplemente:
# Posiciona en el 80
# Presiona c2w (cambiar 2 palabras)
# Escribe: 8080
# Resultado: listen 8080;
# Guardar
:wqEjemplo 2: Agregar Línea de Comentario
Escenario: Comentar línea en configuración
BASH
vim /etc/ssh/sshd_config
# Buscar PermitRootLogin
/PermitRootLogin
# Presiona I (insert al inicio de línea)
# Escribe: #
# Presiona ESC
# Presiona :wq para guardar
# Resultado: #PermitRootLogin yesEjemplo 3: Duplicar Configuración
Escenario: Copiar servidor virtual en nginx
BASH
vim /etc/nginx/sites-available/default
# Buscar el bloque server completo
/server {
# Copiar bloque (suponiendo 20 líneas)
20yy
# Ir al final del archivo
G
# Pegar
p
# Editar el nuevo bloque (cambiar puerto, nombres, etc)
# Buscar y reemplazar dentro del bloque
# Guardar
:wq🔧 Configuración Básica de Vim
Archivo de Configuración
Vim lee configuración de ~/.vimrc:
BASH
vim ~/.vimrcConfiguración recomendada para Abacom:
VIM
" ============ APARIENCIA ============
set number " Mostrar números de línea
set relativenumber " Números relativos (mejor para movimiento)
set colorscheme desert " Tema de color
" ============ COMPORTAMIENTO ============
set tabstop=4 " Tab = 4 espacios
set shiftwidth=4 " Indentación = 4 espacios
set expandtab " Usar espacios en vez de tabs
set autoindent " Auto-indentar nuevas líneas
set smartcase " Búsqueda sensible a mayúsculas si las hay
" ============ BÚSQUEDA ============
set incsearch " Buscar mientras escribes
set hlsearch " Resaltar resultados de búsqueda
" ============ INTERFAZ ============
set ruler " Mostrar posición actual
set statusline=%F\ -\ FileType:\ %Y
set mouse=a " Soporte de mouse
Neovim: La Versión Moderna
Instalación
BASH
# Ubuntu/Debian
sudo apt install neovim
# CentOS/RHEL
sudo dnf install neovim
# Arch
sudo pacman -S neovimUso Básico
Nvim es 100% compatible con Vim:
BASH
nvim archivo.txt # Igual a vim
# Todos los comandos funcionan igualConfiguración de Nvim
En vez de /.vimrc, Nvim usa /.config/nvim/init.vim:
BASH
mkdir -p ~/.config/nvim
nvim ~/.config/nvim/init.vimContenido básico:
VIM
" Heredar configuración de vim
set number
set expandtab
set tabstop=4
Diferencias Nvim vs Vim
| Aspecto | Vim | Nvim |
|---|---|---|
| Velocidad | Buena | Excelente |
| Soporte LSP | Plugins | Nativo |
| Terminal integrada | Plugin | Nativa |
| Lua scripting | No | Sí |
| Disponibilidad | Estándar | Variable |
Vi Clásico: Compatibilidad Total
Si solo tienes Vi disponible (muy raro en 2024):
BASH
vi archivo.txt # Vi clásico (muy limitado)Diferencias Vi clásico vs Vim:
- Sin números de línea
- Sin colores
- Búsqueda más limitada
- Pero: Todos los comandos básicos funcionan igual
Recomendación: Usa Vim si está disponible. Vi es “last resort”.
⚠️ Errores Comunes
Error 1: “¿Cómo salgo de Vim?”
Pregunta legendaria en StackOverflow 😅
BASH
# SALIDA (en este orden)
ESC # Asegurate que estás en Modo Normal
:wq # Write Quit (guardar y salir)
Enter # Ejecutar comando
# Si no quieres guardar cambios:
:q! # Quit sin guardarError 2: Accidental Press ZZ
BASH
ZZ # Esto guarda y sale (sin querer)
# Solución: Undo
u # Deshacer
:e! # Recargar archivo sin cambiosError 3: Pegar Mal Indentado
BASH
# Al pegar desde clipboard, la indentación se daña
# Solución: Desactiva indentación automática
:set paste # Antes de pegar
:set nopaste # Después de pegar
# O mejor: Copia directamente en Vim (yy)Error 4: Búsqueda que No Funciona
BASH
/patron # Si no encuentra nada
# Presiona n para ir a siguiente resultado
N # O anterior resultado
# Si sigue sin encontrar:
:set ignorecase # Ignorar mayúsculas/minúsculas📊 Tabla de Referencia Rápida
| Acción | Comando | Notas |
|---|---|---|
| Insertar | i, a, o | Entra Modo Insert |
| Guardar | :w | Write |
| Salir | :q | Quit |
| Guardar y salir | :wq o ZZ | Most common |
| Copiar línea | yy | Yank |
| Pegar | p | Paste after |
| Deshacer | u | Undo |
| Buscar | /patron | Forward search |
| Reemplazar | :%s/viejo/nuevo/g | All occurrences |
| Ir a línea | 5G o :5 | Go to line 5 |
| Siguiente palabra | w | Word |
| Fin de línea | $ | Dollar sign |
🎓 Quiz: Verificar Comprensión
¿Cómo vuelves a Modo Normal desde cualquier modo?
a) Presiona Ctrl+C
b) Presiona ESC (Correcto ✓)
c) Presiona Enter
d) Presiona i
Explicación: ESC siempre vuelve a Modo Normal desde Insert o Command.
¿Cuál es la forma más rápida de guardar y salir?
a) :wq (correcto pero lento)
b) :q! (no guarda)
c) ZZ (Correcto ✓ - más rápido)
d) Ctrl+S (no funciona en Vim)
Explicación: ZZ es atajo de :wq que se teclea más rápido.
¿Cómo reemplazas TODAS las ocurrencias de “old” por “new” en un archivo?
a) :s/old/new/g (solo línea actual)
b) :%s/old/new/g (Correcto ✓ - archivo completo)
c) :s/old/new (solo primera en línea)
d) /old y luego r (no existe)
Explicación: % significa “todas las líneas”, /g significa “global” (todas en línea).
👨💻 Práctica: Editar Archivos Reales
Ejercicio 1: Crear y Editar Archivo
BASH
# Crear archivo
vim ~/.bashrc
# Ir al final (G)
# Pegar línea: alias ll='ls -la'
# Guardar (:wq)
# Verificar
grep "alias ll" ~/.bashrcEjercicio 2: Buscar y Reemplazar
BASH
# Crear archivo de prueba
echo -e "apache\nnode\napache" > /tmp/services.txt
# Abrirlo
vim /tmp/services.txt
# Reemplazar todos "apache" por "nginx"
:%s/apache/nginx/g
# Guardar
:wq
# Verificar
cat /tmp/services.txtEjercicio 3: Comentar Línea de Configuración
BASH
# Crear archivo
echo "enable_ssl = true" > /tmp/config.txt
# Abrirlo
vim /tmp/config.txt
# Ir al inicio de línea (0)
# Entrar Insert (I)
# Escribir: #
# ESC y guardar (:wq)
# Resultado: #enable_ssl = trueLazyVim: Nvim Configurado y Potente
¿Qué es LazyVim?
LazyVim es una distribución moderna de Neovim que viene preconfigurada con:
- ✅ Gestor de plugins (Lazy.nvim)
- ✅ LSP (Language Server Protocol) integrado
- ✅ Autocompletado de código
- ✅ Snippets y debugging
- ✅ Temas bonitos
- ✅ Configuración modular
Para Abacom: Ideal en tu máquina de desarrollo local. En servidores usa Vim clásico.
Instalación de LazyVim
Requisitos previos:
BASH
# Instalar Neovim (0.9+)
# Ubuntu/Debian
sudo apt install neovim
# CentOS/RHEL
sudo dnf install neovim
# Arch
sudo pacman -S neovimInstalar LazyVim:
BASH
# Backup tu configuración actual (si existe)
mv ~/.config/nvim ~/.config/nvim.bak
# Clonar LazyVim starter template
1git clone https://github.com/LazyVim/starter ~/.config/nvim
# Eliminar .git para personalizarla
rm -rf ~/.config/nvim/.git
# Abrir Neovim (LazyVim instalará plugins automáticamente)
nvim- 1
- git clone descarga la configuración de LazyVim preconfigurada
Cuando abras nvim por primera vez:
- LazyVim descargará plugins (~200 MB)
- Compilará componentes nativos
- Espera 1-2 minutos la primera vez
Estructura de LazyVim
~/.config/nvim/
├── init.lua ← Archivo principal
├── lua/
│ └── config/
│ ├── lazy.lua ← Configuración de plugins
│ ├── options.lua ← Opciones generales
│ └── keymaps.lua ← Atajos de teclado
└── lazy-lock.json ← Versiones de plugins
Instalar Plugins en LazyVim
Agregar nuevo plugin es muy simple:
Paso 1: Editar archivo de specs
BASH
nvim ~/.config/nvim/lua/plugins/example.luaPaso 2: Definir plugin con Lazy
LUA
-- ~/.config/nvim/lua/plugins/example.lua
return {
-- Plugin para emojis (ejemplo simple)
{
1 "nvim-treesitter/nvim-treesitter",
version = false,
2 build = ":TSUpdate",
event = { "BufReadPost", "BufNewFile" },
config = function()
require("nvim-treesitter.configs").setup({
3 ensure_installed = { "bash", "python", "lua" },
highlight = { enable = true },
})
end,
},
}- 1
- nvim-treesitter/nvim-treesitter es el identificador GitHub del plugin
- 2
- build ejecuta comando después de instalar
- 3
- ensure_installed lista lenguajes a soportar
Ejemplo: Instalar Plugin para Markdown
Escenario: Quieres mejor soporte para archivos Markdown
BASH
# Editar configuración
nvim ~/.config/nvim/lua/plugins/markdown.luaContenido:
LUA
- 1
- Plugin para preview de Markdown en navegador
- 2
- cmd = cargar solo cuando ejecutes :MarkdownPreview
- 3
- ft = cargar solo para archivos markdown
- 4
- build = instalar dependencias Node.js
Uso después:
BASH
nvim archivo.md
# Dentro de Nvim:
:MarkdownPreview # Abre preview en navegadorEjemplo: Instalar LSP para Python
LSP = Language Server Protocol proporciona autocompletado, definiciones, etc.
BASH
nvim ~/.config/nvim/lua/plugins/python.luaContenido:
LUA
return {
{
1 "neovim/nvim-lspconfig",
config = function()
local lspconfig = require('lspconfig')
-- Configurar Python LSP
2 lspconfig.pyright.setup({
on_attach = function(client, bufnr)
-- Atajos para navegar definiciones
local opts = { noremap=true, silent=true }
3 vim.keymap.set('n', 'gd', vim.lsp.buf.definition, opts)
vim.keymap.set('n', 'gr', vim.lsp.buf.references, opts)
end,
})
end,
},
}- 1
- nvim-lspconfig configura servidores de lenguaje
- 2
- pyright es el LSP de Python (autocompletado, type checking)
- 3
- gd = shortcut para “go to definition”
Primero, instala el servidor Python:
BASH
# Instalar Pyright (LSP de Python)
pip install pyright
# O con npm
npm install -g pyrightPersonalizar Atajos en LazyVim
Edita ~/.config/nvim/lua/config/keymaps.lua:
LUA
local keymap = vim.keymap.set
-- Atajos personalizados
1keymap("n", "<Leader>w", ":w<CR>", { noremap = true })
keymap("n", "<Leader>q", ":q<CR>", { noremap = true })
keymap("n", "<Leader>x", ":wq<CR>", { noremap = true })
-- Navegar entre ventanas con Ctrl+hjkl
keymap("n", "<C-h>", "<C-w>h", { noremap = true })
keymap("n", "<C-j>", "<C-w>j", { noremap = true })
keymap("n", "<C-k>", "<C-w>k", { noremap = true })
keymap("n", "<C-l>", "<C-w>l", { noremap = true })- 1
-
w = “Espacio + w” para guardar. Espacio es la tecla líder por defecto
Después, recarga Nvim:
BASH
:source ~/.config/nvim/lua/config/keymaps.luaTemas en LazyVim
LazyVim viene con varios temas. Cambiar en ~/.config/nvim/lua/config/options.lua:
LUA
-- Tema (colorscheme)
1vim.cmd.colorscheme "tokyonight"
-- Otros temas disponibles:
-- "tokyonight"
-- "everforest"
-- "gruvbox"
-- "catppuccin"
-- "nord"- 1
- tokyonight es tema por defecto. Otros están en lazy.nvim
Cambiar y recargar:
BASH
nvim
# Dentro:
:colorscheme gruvbox # Cambiar tema en vivoComparación: LazyVim vs Vim vs Nvim Vanilla
| Aspecto | Vim | Nvim Vanilla | LazyVim |
|---|---|---|---|
| Instalación | Preinstalado | 5 minutos | 10 minutos |
| Configuración | ~/.vimrc | ~/.config/nvim | ~/.config/nvim |
| Plugins | Plugins manuales | Lazy.nvim | Preconfigurado |
| LSP | Via plugins | Manual | Automático |
| Curva aprendizaje | Baja | Media | Baja (templated) |
| Producción | ✅ | ✅ | ❌ (mejor solo desarrollo) |
Para Abacom:
- Servidor SSH: Usa Vim
- Tu máquina: Usa LazyVim o Vim según preferencia
Trucos LazyVim
Ver todos los plugins:
BASH
# En Nvim:
:Lazy # Abre manager de pluginsActualizar plugins:
BASH
# En Nvim:
:Lazy update # Actualiza todos los pluginsVer configuración:
BASH
# Ver atajos actuales
:map
# Ver configuración cargada
:lua print(vim.inspect(vim.o))📚 Recursos Adicionales
- Vim Online Tutor: https://www.openvim.com/
- Vim Cheat Sheet: https://vim.rtorr.com/
- Neovim Docs: https://neovim.io/
- LazyVim: https://www.lazyvim.org/
- Lazy.nvim Plugin Manager: https://github.com/folke/lazy.nvim
- Interactive Vim Tutorial: https://github.com/vim/vim-tutor
Conclusión
Ahora sabes: ✓ Los 3 modos de Vim (Normal, Insert, Command) ✓ Navegar eficientemente ✓ Editar archivos rápidamente ✓ Buscar y reemplazar ✓ Guardar sin dramas
Próximo paso: Usa Vim para editar archivos de configuración en Abacom.
Consejo profesional: Practica 15 minutos diarios hasta que sea “muscle memory”. Después, Vim será tu editor favorito.