¿Qué es Vim?
Vim (Vi IMproved) es un editor de texto modal altamente configurable, creado por Bram Moolenaar como una versión mejorada del editor Unix vi. Es conocido por:
- Eficiencia: Una vez dominado, permite editar texto extremadamente rápido
- Ubicuidad: Disponible en prácticamente todos los sistemas Unix/Linux
- Potencia: Capacidades avanzadas de edición y automatización
- Extensibilidad: Sistema robusto de plugins y configuración
¿Qué es Neovim?
Neovim es una refactorización moderna de Vim que mantiene compatibilidad mientras añade:
- Arquitectura moderna: Cliente-servidor, API asíncrona
- LSP integrado: Language Server Protocol nativo
- Lua: Lenguaje de configuración más rápido que Vimscript
- UI remota: Soporte para interfaces gráficas externas
- Rendimiento: Más rápido y eficiente
- Desarrollo activo: Comunidad muy activa
Diferencias Principales
| Característica | Vim | Neovim |
|---|---|---|
| Lenguaje config | Vimscript | Vimscript + Lua |
| LSP | Plugin | Integrado |
| Async | Plugin | Nativo |
| Tree-sitter | No | Sí |
| UI externa | Limitada | Completa |
| Desarrollo | Conservador | Agresivo |
1 Instalación
1.1 Instalar Vim
Ubuntu/Debian:
Fedora:
macOS:
Windows: Descargar desde: https://www.vim.org/download.php
1.2 Instalar Neovim
Ubuntu/Debian (PPA):
Fedora:
macOS:
Arch Linux:
Desde AppImage (cualquier Linux):
Windows:
1.3 Verificar Instalación
1.4 Configurar Alias
Para usar vim para lanzar Neovim:
2 Filosofía y Conceptos Básicos
2.1 Filosofía Modal
Vim usa modos diferentes para distintas tareas:
- Normal: Navegar y ejecutar comandos (modo por defecto)
- Insert: Insertar texto
- Visual: Seleccionar texto
- Command: Ejecutar comandos Ex
Esta separación permite:
- Eficiencia: Cada tecla hace algo útil en modo Normal
- Composición: Combinar operadores con movimientos
- Repetición: El comando
.repite la última acción
2.2 Composición de Comandos
Vim usa una gramática:
[operador][movimiento]
[operador][número][movimiento]
Ejemplos:
d2w= Eliminar (delete) 2 palabras (words)c$= Cambiar (change) hasta fin de líneay3j= Copiar (yank) 3 líneas hacia abajo
2.3 Filosofía “Modal”
- Separación de tareas: No mezclar edición y navegación
- Comando vs texto: Modo Normal para comandos, Insert para texto
- Eficiencia sobre simplicidad: Curva de aprendizaje pero altamente eficiente
2.4 El Camino del Vim
- Semana 1-2: Básicos (hjkl, i, a, o, Esc, :wq)
- Mes 1: Movimientos (w, b, f, t, /, n)
- Meses 2-3: Operadores (d, c, y con movimientos)
- Meses 4-6: Visual, macros, registros
- Después: Plugins, configuración avanzada, Vimscript/Lua
3 Modos de Vim
3.1 Modo Normal (Default)
El modo por defecto. Todas las teclas son comandos. Para activar el modo comando en Vim, debes presionar la tecla “Esc”. Esto te llevará al modo comando desde cualquier otro modo en el que te encuentres, como el modo insertar o el modo de reemplazo. Una vez que estés en el modo comando, puedes utilizar una variedad de comandos y combinaciones de teclas para navegar, editar y guardar tus archivos. Para salir de Vim, puedes ingresar el comando “:q” seguido de Enter. Si has realizado cambios y deseas guardarlos antes de salir, utiliza el comando “:wq” para escribir y guardar los cambios y salir de Vim.
Entrar:
Escdesde cualquier modoCtrl+[(alternativa a Esc)Ctrl+c(similar a Esc)
3.2 Modo Insert
Para insertar texto.
Entrar desde Normal:
i- Insertar antes del cursorI- Insertar al inicio de la líneaa- Insertar después del cursor (append)A- Insertar al final de la líneao- Abrir línea nueva abajoO- Abrir línea nueva arribas- Sustituir carácter (eliminar + insert)S- Sustituir línea completaC- Cambiar hasta fin de línea (c$)
Salir:
EscoCtrl+[- Volver a Normal
3.3 Modo Visual
Para seleccionar texto.
Entrar desde Normal:
v- Visual por carácterV- Visual por líneaCtrl+v- Visual en bloque
Operaciones:
Una vez seleccionado:
d- Eliminarc- Cambiary- Copiar>- Indentar<- Desindentar~- Cambiar mayúsculas/minúsculas
3.4 Modo Command (Command-line)
Para ejecutar comandos Ex.
Entrar desde Normal:
:- Comando Ex/- Búsqueda hacia adelante?- Búsqueda hacia atrás
Comandos comunes:
:w- Guardar (write):q- Salir (quit):wqo:x- Guardar y salir:q!- Salir sin guardar:e archivo- Abrir archivo (edit):help tema- Ayuda
3.5 Modo Replace
Sobrescribir texto existente.
Entrar desde Normal:
R- Modo replace (sobrescribir)r- Reemplazar un solo carácter
3.6 Modo Select
Similar a selección en editores normales.
Entrar:
gh- Select mode por caráctergH- Select mode por líneag Ctrl+h- Select mode en bloque
5 Edición de Texto
5.1 Insertar
| Comando | Acción |
|---|---|
i |
Insertar antes del cursor |
I |
Insertar al inicio de línea |
a |
Insertar después del cursor (append) |
A |
Insertar al final de línea |
o |
Abrir línea nueva abajo |
O |
Abrir línea nueva arriba |
gi |
Insertar en última posición de inserción |
5.2 Eliminar
| Comando | Acción |
|---|---|
x |
Eliminar carácter bajo cursor |
X |
Eliminar carácter antes del cursor |
dd |
Eliminar línea |
D |
Eliminar hasta fin de línea d$ |
d{movimiento} |
Eliminar hasta movimiento |
dw |
Eliminar palabra |
db |
Eliminar palabra hacia atrás |
d$ o D |
Eliminar hasta fin de línea |
d0 |
Eliminar hasta inicio de línea |
dG |
Eliminar hasta fin de archivo |
dgg |
Eliminar hasta inicio de archivo |
5.3 Cambiar (Change)
Igual que eliminar pero entra en modo Insert.
| Comando | Acción |
|---|---|
c{movimiento} |
Cambiar texto |
cc o S |
Cambiar línea completa |
C |
Cambiar hasta fin de línea |
cw |
Cambiar palabra |
ciw |
Cambiar palabra interna (inner word) |
ci" |
Cambiar dentro de comillas |
ci( |
Cambiar dentro de paréntesis |
cit |
Cambiar dentro de tag HTML |
5.4 Copiar y Pegar (Yank/Put)
| Comando | Acción |
|---|---|
y{movimiento} |
Copiar (yank) |
yy o Y |
Copiar línea |
yw |
Copiar palabra |
y$ |
Copiar hasta fin de línea |
p |
Pegar después del cursor |
P |
Pegar antes del cursor |
gp |
Pegar y mover cursor después |
gP |
Pegar antes y mover cursor |
5.5 Reemplazar
| Comando | Acción |
|---|---|
r{char} |
Reemplazar carácter bajo cursor |
R |
Entrar en modo Replace |
~ |
Cambiar mayúscula/minúscula |
g~{movimiento} |
Cambiar caso |
gu{movimiento} |
A minúsculas |
gU{movimiento} |
A MAYÚSCULAS |
5.6 Deshacer y Rehacer
| Comando | Acción |
|---|---|
u |
Deshacer (undo) |
Ctrl+r |
Rehacer (redo) |
U |
Deshacer todos los cambios en línea |
5.7 Repetir
| Comando | Acción |
|---|---|
. |
Repetir último cambio |
@: |
Repetir último comando Ex |
@@ |
Repetir último macro |
5.8 Unir Líneas
| Comando | Acción |
|---|---|
J |
Unir línea siguiente con actual |
gJ |
Unir sin añadir espacio |
5.9 Indentación
| Comando | Acción |
|---|---|
>> |
Indentar línea |
<< |
Desindentar línea |
== |
Auto-indentar línea |
>% |
Indentar bloque (con cursor en paréntesis) |
gg=G |
Auto-indentar archivo completo |
6 Comandos de Búsqueda
6.1 Búsqueda Básica
| Comando | Acción |
|---|---|
/patrón |
Buscar hacia adelante |
?patrón |
Buscar hacia atrás |
n |
Siguiente ocurrencia |
N |
Ocurrencia anterior |
* |
Buscar palabra bajo cursor (adelante) |
# |
Buscar palabra bajo cursor (atrás) |
g* |
Buscar parcial hacia adelante |
g# |
Buscar parcial hacia atrás |
6.2 Opciones de Búsqueda
6.3 Expresiones Regulares
Metacaracteres básicos:
.- Cualquier carácter*- 0 o más del anterior^- Inicio de línea$- Fin de línea[]- Conjunto de caracteres\<- Inicio de palabra\>- Fin de palabra
Ejemplos:
7 Modo Visual
7.1 Tipos de Selección Visual
| Comando | Tipo |
|---|---|
v |
Visual por carácter |
V |
Visual por línea |
Ctrl+v |
Visual en bloque (columnar) |
gv |
Reseleccionar última selección |
7.2 Operaciones en Visual
Una vez en modo visual:
| Comando | Acción |
|---|---|
d |
Eliminar selección |
c |
Cambiar selección |
y |
Copiar selección |
> |
Indentar |
< |
Desindentar |
= |
Auto-indentar |
~ |
Cambiar mayúsculas/minúsculas |
u |
A minúsculas |
U |
A MAYÚSCULAS |
o |
Ir al otro extremo de selección |
O |
Ir a otra esquina (bloque) |
7.3 Visual Block (Columnar)
Casos de uso:
- Insertar en múltiples líneas
- Eliminar columnas
- Cambiar bloques
Ejemplo - Insertar en múltiples líneas:
1. Ctrl+v (visual block)
2. Seleccionar líneas (j/k)
3. I (Insert al inicio)
4. Escribir texto
5. Esc (se aplica a todas las líneas)
7.4 Objetos de Texto
Operan sobre “objetos” como palabras, párrafos, etc.
Sintaxis: {operador}{a/i}{objeto}
| Objeto | Descripción |
|---|---|
w |
Palabra (word) |
W |
PALABRA |
s |
Sentencia |
p |
Párrafo |
[ o ] |
Bloque [] |
( o ) |
Bloque () |
{ o } |
Bloque {} |
< o > |
Bloque <> |
t |
Tag HTML |
" |
Comillas dobles |
' |
Comillas simples |
` |
Backticks |
Modificadores:
a- “a” (around) - incluye delimitadoresi- “inner” - solo contenido
Ejemplos:
8 Registros y Macros
8.1 Registros
Vim tiene múltiples “clipboards” llamados registros.
8.2 Tipos de Registros
| Registro | Descripción |
|---|---|
"" |
Sin nombre (defecto) |
"0 |
Último yank |
"1-"9 |
Historial de deletes |
"a-"z |
Nombrados (minúsculas) |
"A-"Z |
Nombrados (append) |
"_ |
Agujero negro (no guarda) |
"+ |
Clipboard del sistema |
"* |
Clipboard de selección (X11) |
"% |
Nombre del archivo actual |
"# |
Nombre del archivo alterno |
"/ |
Último patrón de búsqueda |
": |
Último comando Ex |
8.3 Usar Registros
Sintaxis: "{registro}{comando}
8.4 Ver Registros
8.5 Macros
Grabar y repetir secuencias de comandos.
8.6 Grabar Macro
8.7 Ejecutar Macro
Ejemplo - Formatear lista:
8.8 Editar Macros
9 Ventanas y Pestañas
9.1 Ventanas (Splits)
9.2 Crear Ventanas
| Comando | Acción |
|---|---|
:split o :sp |
Dividir horizontalmente |
:vsplit o :vsp |
Dividir verticalmente |
:new |
Nueva ventana horizontal |
:vnew |
Nueva ventana vertical |
Ctrl+w s |
Split horizontal |
Ctrl+w v |
Split vertical |
:sp archivo |
Abrir archivo en split |
9.4 Mover Ventanas
| Comando | Acción |
|---|---|
Ctrl+w H |
Mover ventana a la izquierda |
Ctrl+w J |
Mover ventana abajo |
Ctrl+w K |
Mover ventana arriba |
Ctrl+w L |
Mover ventana a la derecha |
Ctrl+w r |
Rotar ventanas |
Ctrl+w x |
Intercambiar con siguiente |
9.5 Redimensionar Ventanas
| Comando | Acción |
|---|---|
Ctrl+w = |
Igualar tamaños |
Ctrl+w + |
Aumentar altura |
Ctrl+w - |
Disminuir altura |
Ctrl+w > |
Aumentar ancho |
Ctrl+w < |
Disminuir ancho |
Ctrl+w _ |
Maximizar altura |
Ctrl+w | |
Maximizar ancho |
:resize {n} |
Establecer altura |
:vertical resize {n} |
Establecer ancho |
9.6 Cerrar Ventanas
| Comando | Acción |
|---|---|
:q o Ctrl+w q |
Cerrar ventana actual |
:only o Ctrl+w o |
Cerrar todas menos actual |
9.7 Pestañas (Tabs)
9.8 Gestión de Pestañas
| Comando | Acción |
|---|---|
:tabnew |
Nueva pestaña |
:tabe archivo |
Abrir archivo en pestaña |
:tabc |
Cerrar pestaña actual |
:tabo |
Cerrar todas las pestañas menos actual |
gt |
Siguiente pestaña |
gT |
Pestaña anterior |
{n}gt |
Ir a pestaña n |
:tabs |
Listar pestañas |
10 Buffers
10.1 ¿Qué son los Buffers?
Un buffer es un archivo cargado en memoria. Puedes tener múltiples buffers abiertos.
10.2 Comandos de Buffer
| Comando | Acción |
|---|---|
:ls o :buffers |
Listar buffers |
:b {n} |
Ir a buffer n |
:b {nombre} |
Ir a buffer por nombre (Tab complete) |
:bn o :bnext |
Siguiente buffer |
:bp o :bprevious |
Buffer anterior |
:bf |
Primer buffer |
:bl |
Último buffer |
:bd |
Eliminar buffer (cerrar archivo) |
:e archivo |
Editar archivo (crear buffer) |
:badd archivo |
Añadir archivo a buffer list |
11 Búsqueda y Reemplazo
11.1 Comando Substitute
Sintaxis:
11.2 Rangos
| Rango | Descripción |
|---|---|
% |
Todo el archivo |
. |
Línea actual |
$ |
Última línea |
'<,'> |
Selección visual |
{n},{m} |
Líneas n a m |
.,+5 |
Línea actual + 5 líneas |
g/patrón/ |
Líneas que coinciden con patrón |
11.3 Flags
| Flag | Descripción |
|---|---|
g |
Global (todas las ocurrencias en línea) |
c |
Confirmar cada reemplazo |
i |
Case-insensitive |
I |
Case-sensitive |
n |
Reportar número de coincidencias |
11.4 Ejemplos Prácticos
# Reemplazar en todo el archivo
:%s/foo/bar/g
# Reemplazar en líneas 10-20
:10,20s/old/new/g
# Reemplazar con confirmación
:%s/foo/bar/gc
# Reemplazar solo palabras completas
:%s/\<foo\>/bar/g
# Eliminar espacios al final de línea
:%s/\s\+$//g
# Añadir ; al final de líneas con texto
:%s/\(.\+\)/\1;/g
# Reemplazar en selección visual
:'<,'>s/old/new/g
# Case-insensitive
:%s/error/ERROR/gi
# Eliminar líneas vacías
:g/^$/d
# Eliminar líneas que contengan patrón
:g/DEBUG/d
# Mantener solo líneas que coincidan
:v/KEEP/d
# Duplicar líneas que contengan patrón
:g/TODO/t.
# Mover líneas que contengan patrón
:g/ERROR/m$11.5 Caracteres Especiales en Reemplazo
| Carácter | Significado |
|---|---|
& |
Texto coincidente completo |
\0 |
Texto coincidente completo |
\1-\9 |
Grupo capturado 1-9 |
\L |
Siguiente en minúsculas |
\U |
Siguiente en mayúsculas |
\l |
Siguiente carácter en minúscula |
\u |
Siguiente carácter en mayúscula |
\e |
Fin de \U o \L |
Ejemplos:
12 Plegado (Folding)
12.1 ¿Qué es Folding?
Folding permite ocultar secciones de texto para enfocarse en otras partes.
12.2 Métodos de Plegado
12.3 Comandos de Plegado
| Comando | Acción |
|---|---|
zf{movimiento} |
Crear fold (manual) |
zf3j |
Fold 3 líneas abajo |
zfap |
Fold párrafo |
za |
Toggle fold |
zA |
Toggle fold recursivamente |
zo |
Abrir fold |
zO |
Abrir fold recursivamente |
zc |
Cerrar fold |
zC |
Cerrar fold recursivamente |
zd |
Eliminar fold |
zD |
Eliminar folds recursivamente |
zR |
Abrir todos los folds |
zM |
Cerrar todos los folds |
zj |
Mover al siguiente fold |
zk |
Mover al fold anterior |
12.4 Nivel de Plegado
13 Marcas y Saltos
13.1 Marcas (Marks)
Guardar posiciones en el archivo.
13.2 Establecer Marcas
13.3 Ir a Marcas
| Comando | Acción |
|---|---|
'{marca} |
Ir a línea de marca |
`{marca} |
Ir a posición exacta |
'' |
Ir a posición antes del último salto |
`` |
Ir a posición exacta antes del salto |
'. |
Ir a última modificación |
`. |
Ir a posición exacta de última modificación |
'^ |
Ir a posición donde se salió de Insert |
13.4 Ver Marcas
13.5 Lista de Saltos (Jump List)
Vim mantiene historial de saltos.
| Comando | Acción |
|---|---|
Ctrl+o |
Salto atrás |
Ctrl+i o Tab |
Salto adelante |
:jumps |
Ver lista de saltos |
13.6 Lista de Cambios (Change List)
| Comando | Acción |
|---|---|
g; |
Ir a cambio anterior |
g, |
Ir a siguiente cambio |
:changes |
Ver lista de cambios |
14 Comandos Ex
14.1 Comandos de Archivo
14.2 Comandos de Shell
Ejemplos:
14.3 Comandos de Ayuda
15 Configuración (.vimrc/init.vim)
15.1 Ubicaciones
Vim:
- Linux/Mac:
~/.vimrc - Windows:
~/_vimrc
Neovim:
- Linux/Mac:
~/.config/nvim/init.vimo~/.config/nvim/init.lua - Windows:
~/AppData/Local/nvim/init.vim
15.2 Configuración Básica
" ============================================
" CONFIGURACIÓN BÁSICA
" ============================================
" Deshabilitar compatibilidad con vi
set nocompatible
" Habilitar tipo de archivo y plugins
filetype plugin indent on
" Habilitar sintaxis
syntax enable
" Codificación
set encoding=utf-8
set fileencoding=utf-8
" ============================================
" INTERFAZ
" ============================================
" Números de línea
set number " Mostrar números
set relativenumber " Números relativos
" Cursor
set cursorline " Resaltar línea actual
set scrolloff=8 " Mantener 8 líneas visibles arriba/abajo
" Búsqueda
set incsearch " Búsqueda incremental
set hlsearch " Resaltar búsquedas
set ignorecase " Ignorar mayúsculas en búsqueda
set smartcase " Case-sensitive si hay mayúsculas
" Interfaz
set showcmd " Mostrar comando en progreso
set showmode " Mostrar modo actual
set wildmenu " Autocompletado de comandos mejorado
set laststatus=2 " Siempre mostrar statusline
set ruler " Mostrar posición del cursor
" Split behavior
set splitbelow " Split horizontal abajo
set splitright " Split vertical a la derecha
" ============================================
" EDICIÓN
" ============================================
" Indentación
set tabstop=4 " Ancho de tab
set shiftwidth=4 " Ancho de indentación
set expandtab " Usar espacios en lugar de tabs
set smartindent " Indentación inteligente
set autoindent " Mantener indentación
" Wrap
set wrap " Ajustar líneas largas
set linebreak " Romper en palabras completas
" Clipboard
set clipboard=unnamedplus " Usar clipboard del sistema
" Backup y swap
set nobackup " No crear backups
set noswapfile " No crear swap files
" O guardarlos en directorio específico:
" set backupdir=~/.vim/backup
" set directory=~/.vim/swap
" Undo persistente
set undofile
set undodir=~/.vim/undo
" Mouse
set mouse=a " Habilitar mouse
" Tiempo de espera
set timeoutlen=500 " Tiempo para secuencias de teclas
" ============================================
" MAPEOS
" ============================================
" Líder key
let mapleader = " " " Usar espacio como líder
let maplocalleader = "," " Líder local
" Guardar con Ctrl+S
nnoremap <C-s> :w<CR>
inoremap <C-s> <Esc>:w<CR>
" Salir de Insert con jj
inoremap jj <Esc>
" Navegar entre ventanas más fácil
nnoremap <C-h> <C-w>h
nnoremap <C-j> <C-w>j
nnoremap <C-k> <C-w>k
nnoremap <C-l> <C-w>l
" Mover líneas
nnoremap <A-j> :m .+1<CR>==
nnoremap <A-k> :m .-2<CR>==
vnoremap <A-j> :m '>+1<CR>gv=gv
vnoremap <A-k> :m '<-2<CR>gv=gv
" Mantener selección al indentar
vnoremap < <gv
vnoremap > >gv
" Quitar highlight de búsqueda
nnoremap <leader><space> :nohlsearch<CR>
" Split rápido
nnoremap <leader>v :vsplit<CR>
nnoremap <leader>h :split<CR>
" Buffer navigation
nnoremap <leader>bn :bnext<CR>
nnoremap <leader>bp :bprevious<CR>
nnoremap <leader>bd :bdelete<CR>
" ============================================
" COLORES
" ============================================
" Tema (requiere instalación)
colorscheme desert " Tema por defecto
" True color
if has('termguicolors')
set termguicolors
endif
" ============================================
" AUTOCOMANDOS
" ============================================
augroup vimrc
autocmd!
" Volver a última posición al abrir archivo
autocmd BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
" Eliminar espacios al final al guardar
autocmd BufWritePre * :%s/\s\+$//e
" Resaltar yank
autocmd TextYankPost * silent! lua vim.highlight.on_yank()
augroup END
" ============================================
" FUNCIONES PERSONALIZADAS
" ============================================
" Toggle números relativos
function! NumberToggle()
if(&relativenumber == 1)
set norelativenumber
else
set relativenumber
endif
endfunction
nnoremap <leader>n :call NumberToggle()<CR>15.3 Opciones Útiles
" Persistencia
set hidden " Permitir buffers ocultos con cambios
" Rendimiento
set lazyredraw " No redibujar durante macros
set updatetime=300 " Tiempo de espera para swap/CursorHold
" Signos
set signcolumn=yes " Siempre mostrar columna de signos
" Formato
set textwidth=80 " Ancho de texto
set colorcolumn=80 " Línea visual en columna 80
" Completion
set completeopt=menuone,noselect,noinsert
" Diff
set diffopt+=vertical " Diff vertical16 Plugins
16.1 Gestores de Plugins
16.2 vim-plug (Recomendado)
Instalación:
# Vim
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
# Neovim
sh -c 'curl -fLo "${XDG_DATA_HOME:-$HOME/.local/share}"/nvim/site/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'Uso en .vimrc:
Comandos:
16.3 Packer (Neovim + Lua)
16.4 Plugins Esenciales
16.6 2. Edición
vim-surround:
vim-commentary:
vim-repeat:
16.7 3. Git
vim-fugitive:
gitsigns (Neovim):
16.8 4. Temas
16.9 5. Statusline
vim-airline:
lualine (Neovim):
17 Neovim - Características Especiales
17.1 Diferencias con Vim
Arquitectura:
- API asíncrona
- Cliente-servidor
- Soporte para UIs remotas
- Jobs y canales nativos
Características:
- LSP integrado
- Tree-sitter (parsing AST)
- Lua como lenguaje de primera clase
- Mejor rendimiento
- API moderna
17.2 Configuración en Lua
init.lua:
-- ~/.config/nvim/init.lua
-- Opciones básicas
vim.opt.number = true
vim.opt.relativenumber = true
vim.opt.expandtab = true
vim.opt.tabstop = 4
vim.opt.shiftwidth = 4
vim.opt.smartindent = true
vim.opt.wrap = false
vim.opt.swapfile = false
vim.opt.backup = false
vim.opt.undofile = true
vim.opt.hlsearch = false
vim.opt.incsearch = true
vim.opt.termguicolors = true
vim.opt.scrolloff = 8
vim.opt.signcolumn = "yes"
vim.opt.updatetime = 50
vim.opt.colorcolumn = "80"
-- Leader key
vim.g.mapleader = " "
vim.g.maplocalleader = ","
-- Mapeos
vim.keymap.set("n", "<leader>pv", vim.cmd.Ex)
vim.keymap.set("n", "<C-s>", ":w<CR>")
vim.keymap.set("i", "jj", "<Esc>")
-- Mover líneas
vim.keymap.set("v", "J", ":m '>+1<CR>gv=gv")
vim.keymap.set("v", "K", ":m '<-2<CR>gv=gv")
-- Mantener cursor centrado
vim.keymap.set("n", "<C-d>", "<C-d>zz")
vim.keymap.set("n", "<C-u>", "<C-u>zz")
vim.keymap.set("n", "n", "nzzzv")
vim.keymap.set("n", "N", "Nzzzv")
-- Navegar ventanas
vim.keymap.set("n", "<C-h>", "<C-w>h")
vim.keymap.set("n", "<C-j>", "<C-w>j")
vim.keymap.set("n", "<C-k>", "<C-w>k")
vim.keymap.set("n", "<C-l>", "<C-w>l")
-- Resaltar yank
vim.api.nvim_create_autocmd("TextYankPost", {
group = vim.api.nvim_create_augroup("highlight_yank", { clear = true }),
callback = function()
vim.highlight.on_yank()
end,
})17.3 Tree-sitter
Parser incremental para mejor resaltado de sintaxis.
17.4 Telescope (Fuzzy Finder)
18 LSP y Autocompletado
18.1 LSP en Neovim
Instalar nvim-lspconfig:
18.2 Mapeos LSP
-- Después de attach LSP
local opts = { noremap=true, silent=true }
vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, opts)
vim.keymap.set('n', 'gd', vim.lsp.buf.definition, opts)
vim.keymap.set('n', 'K', vim.lsp.buf.hover, opts)
vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, opts)
vim.keymap.set('n', '<C-k>', vim.lsp.buf.signature_help, opts)
vim.keymap.set('n', '<leader>rn', vim.lsp.buf.rename, opts)
vim.keymap.set('n', '<leader>ca', vim.lsp.buf.code_action, opts)
vim.keymap.set('n', 'gr', vim.lsp.buf.references, opts)18.3 nvim-cmp (Autocompletado)
use 'hrsh7th/nvim-cmp'
use 'hrsh7th/cmp-nvim-lsp'
use 'hrsh7th/cmp-buffer'
use 'hrsh7th/cmp-path'
use 'L3MON4D3/LuaSnip'
local cmp = require'cmp'
cmp.setup({
snippet = {
expand = function(args)
require('luasnip').lsp_expand(args.body)
end,
},
mapping = {
['<C-p>'] = cmp.mapping.select_prev_item(),
['<C-n>'] = cmp.mapping.select_next_item(),
['<C-d>'] = cmp.mapping.scroll_docs(-4),
['<C-f>'] = cmp.mapping.scroll_docs(4),
['<C-Space>'] = cmp.mapping.complete(),
['<C-e>'] = cmp.mapping.close(),
['<CR>'] = cmp.mapping.confirm({ select = true }),
},
sources = {
{ name = 'nvim_lsp' },
{ name = 'buffer' },
{ name = 'path' },
}
})19 Vimscript y Lua
19.1 Vimscript Básico
Variables:
Condicionales:
Loops:
Funciones:
19.2 Lua Básico
Variables:
Condicionales:
Loops:
Funciones:
20 Trucos Avanzados
20.1 1. Edición de Múltiples Archivos
Argumentos:
Buffers:
Quickfix:
20.2 2. Edición Avanzada con Expresiones
Incrementar números:
Evaluar expresiones:
20.3 3. Cambiar en Múltiples Líneas
Visual Block:
1. Ctrl+v (visual block)
2. Seleccionar líneas
3. I (insertar al inicio) o A (al final)
4. Escribir
5. Esc (se aplica a todas)
20.4 4. Formatear Código
Formatear párrafo:
External formatter:
20.5 5. Diff Files
20.6 6. Sesiones
Guardar sesión:
Cargar sesión:
20.7 7. Spell Checking
20.8 8. Abrir URL
20.9 9. Ejecutar Línea como Comando
20.10 10. Formateo de Tabla
21 Solución de Problemas
21.1 Problemas Comunes
21.2 1. Vim/Neovim Lento
Soluciones:
21.3 2. Clipboard No Funciona
Verificar soporte:
Solución Ubuntu:
21.4 3. Colores Incorrectos
21.5 4. LSP No Funciona (Neovim)
Verificar:
21.6 5. Plugins No Se Instalan
21.7 Debugging
Modo verbose:
Ver opciones:
Ver mapeos:
22 Referencia Rápida
22.1 Atajos Esenciales
Navegación:
hjkl Básico
w/b Palabra adelante/atrás
0/$ Inicio/fin de línea
gg/G Inicio/fin de archivo
Ctrl+d/u Media página
f/F{char} Find carácter
Edición:
i/a Insert/append
o/O Nueva línea abajo/arriba
x/dd Eliminar carácter/línea
yy/p Copiar/pegar
u/Ctrl+r Undo/redo
. Repetir
Visual:
v/V/Ctrl+v Visual char/line/block
y/d/c Copiar/eliminar/cambiar
>/< Indentar/desindentar
Búsqueda:
/texto Buscar
n/N Siguiente/anterior
*/# Buscar palabra bajo cursor
:%s/old/new/g Reemplazar
Archivos:
:w Guardar
:q Salir
:e archivo Abrir
:bn/:bp Buffer siguiente/anterior
Ventanas:
:sp/:vsp Split
Ctrl+w hjkl Navegar
Ctrl+w = Igualar tamaños
22.2 Comandos por Modo
Normal Mode:
- Navegación:
hjkl,w,b,0,$,gg,G - Edición:
i,a,o,x,dd,yy,p - Visual:
v,V,Ctrl+v - Búsqueda:
/,?,*,#,n,N - Comandos:
:
Insert Mode:
- Salir:
Esc,Ctrl+[ - Autocompletado:
Ctrl+n/p,Ctrl+x Ctrl+o - Insertar:
Ctrl+r{registro}
Visual Mode:
- Operadores:
y,d,c,>,<,= - Cambiar modo:
v,V,Ctrl+v - Objetos:
aw,iw,ap,i(,a"
Command Mode:
- Archivo:
:w,:q,:e,:wq - Búsqueda:
/,? - Rango:
:%s,:.,:'<,'>
23 Conclusión
23.1 El Viaje de Aprendizaje
Nivel 1 - Básicos (Semana 1):
- Modos (Normal, Insert)
- Navegación básica (hjkl)
- Guardar y salir (:wq)
- Insert/append (i, a, o)
Nivel 2 - Movimientos (Mes 1):
- Movimientos de palabra (w, b, e)
- Línea (0, $, ^)
- Búsqueda (/, ?, *, #)
- Objetos de texto (iw, aw)
Nivel 3 - Operadores (Meses 2-3):
- Eliminar/cambiar/copiar (d, c, y)
- Composición (dw, ciw, yap)
- Visual mode (v, V, Ctrl+v)
- Registros básicos
Nivel 4 - Avanzado (Meses 4-6):
- Macros (q, @)
- Múltiples buffers/ventanas
- Búsqueda y reemplazo avanzado
- Configuración personalizada
Nivel 5 - Maestro (6+ meses):
- Plugins y ecosistema
- Vimscript/Lua
- LSP y autocompletado
- Workflow completamente personalizado
23.2 Recursos
Tutoriales:
vimtutor(incluido con Vim)- Vim Adventures (juego)
- Openvim.com
- vim.fandom.com
Documentación:
:help(ayuda integrada)- vimhelp.org
- neovim.io/doc
Comunidad:
- r/vim, r/neovim (Reddit)
- vi.stackexchange.com
- GitHub Discussions
23.3 Tips Finales
- Practica diariamente: 15-30 minutos al día
- Aprende incrementalmente: No trates de aprender todo a la vez
- Usa vimtutor: El tutorial interactivo es excelente
- Evita plugins al inicio: Aprende Vim vanilla primero
- Configura gradualmente: Añade opciones según las necesites
- Usa el help:
:help {tema}es tu mejor amigo - Sé paciente: La curva de aprendizaje vale la pena
24 Publicaciones Similares
Si te interesó este artículo, te recomendamos que explores otros blogs y recursos relacionados que pueden ampliar tus conocimientos. Aquí te dejo algunas sugerencias:
- Comandos De Informacion Windows
- Adb
- Limpieza Y Optimizacion De Pc
- Scrcpy
- Gestionar Versiones De Jdk En Kubuntu
- Instalar Tor Browser
- Crear Enlaces Duros O Hard Link En Linux
- Comandos Vim
- Guia De Git Y Github
- 00 Primeros Pasos En Linux
- 01 Introduccion Linux
- 02 Distribuciones Linux
- 03 Instalacion Linux
- 04 Administracion Particiones Volumenes
- Atajos De Teclado Y Comandos Para Usar Vim
- Instalando Specitify
- Gestiona Tus Dotfiles Con Gnu Stow
- Guia De Ranger
- Guia De Kitty Terminal
- Guia De Positron Ide
- Guia De Rsync
Esperamos que encuentres estas publicaciones igualmente interesantes y útiles. ¡Disfruta de la lectura!