¿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 |
Instalación
Instalar Vim
Ubuntu/Debian:
Fedora:
macOS:
Windows: Descargar desde: https://www.vim.org/download.php
Instalar Neovim
Ubuntu/Debian (PPA):
Fedora:
macOS:
Arch Linux:
Desde AppImage (cualquier Linux):
Windows:
Verificar Instalación
Configurar Alias
Para usar vim para lanzar Neovim:
Filosofía y Conceptos Básicos
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
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
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
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
Modos de Vim
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)
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
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
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
Modo Replace
Sobrescribir texto existente.
Entrar desde Normal:
R- Modo replace (sobrescribir)r- Reemplazar un solo carácter
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
Edición de Texto
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 |
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 |
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 |
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 |
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 |
Deshacer y Rehacer
| Comando | Acción |
|---|---|
u |
Deshacer (undo) |
Ctrl+r |
Rehacer (redo) |
U |
Deshacer todos los cambios en línea |
Repetir
| Comando | Acción |
|---|---|
. |
Repetir último cambio |
@: |
Repetir último comando Ex |
@@ |
Repetir último macro |
Unir Líneas
| Comando | Acción |
|---|---|
J |
Unir línea siguiente con actual |
gJ |
Unir sin añadir espacio |
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 |
Comandos de Búsqueda
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 |
Opciones de Búsqueda
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:
Modo Visual
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 |
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) |
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)
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:
Registros y Macros
Registros
Vim tiene múltiples “clipboards” llamados registros.
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 |
Usar Registros
Sintaxis: "{registro}{comando}
Ver Registros
Macros
Grabar y repetir secuencias de comandos.
Grabar Macro
Ejecutar Macro
Ejemplo - Formatear lista:
Editar Macros
Ventanas y Pestañas
Ventanas (Splits)
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 |
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 |
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 |
Cerrar Ventanas
| Comando | Acción |
|---|---|
:q o Ctrl+w q |
Cerrar ventana actual |
:only o Ctrl+w o |
Cerrar todas menos actual |
Pestañas (Tabs)
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 |
Buffers
¿Qué son los Buffers?
Un buffer es un archivo cargado en memoria. Puedes tener múltiples buffers abiertos.
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 |
Búsqueda y Reemplazo
Comando Substitute
Sintaxis:
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 |
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 |
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$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:
Plegado (Folding)
¿Qué es Folding?
Folding permite ocultar secciones de texto para enfocarse en otras partes.
Métodos de Plegado
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 |
Nivel de Plegado
Marcas y Saltos
Marcas (Marks)
Guardar posiciones en el archivo.
Establecer Marcas
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 |
Ver Marcas
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 |
Lista de Cambios (Change List)
| Comando | Acción |
|---|---|
g; |
Ir a cambio anterior |
g, |
Ir a siguiente cambio |
:changes |
Ver lista de cambios |
Comandos Ex
Comandos de Archivo
Comandos de Shell
Ejemplos:
Comandos de Ayuda
Configuración (.vimrc/init.vim)
Ubicaciones
Vim:
- Linux/Mac:
~/.vimrc - Windows:
~/_vimrc
Neovim:
- Linux/Mac:
~/.config/nvim/init.vimo~/.config/nvim/init.lua - Windows:
~/AppData/Local/nvim/init.vim
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>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 verticalPlugins
Gestores de Plugins
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:
Packer (Neovim + Lua)
Plugins Esenciales
2. Edición
vim-surround:
vim-commentary:
vim-repeat:
3. Git
vim-fugitive:
gitsigns (Neovim):
4. Temas
5. Statusline
vim-airline:
lualine (Neovim):
Neovim - Características Especiales
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
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,
})Tree-sitter
Parser incremental para mejor resaltado de sintaxis.
Telescope (Fuzzy Finder)
LSP y Autocompletado
LSP en Neovim
Instalar nvim-lspconfig:
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)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' },
}
})Vimscript y Lua
Vimscript Básico
Variables:
Condicionales:
Loops:
Funciones:
Lua Básico
Variables:
Condicionales:
Loops:
Funciones:
Trucos Avanzados
1. Edición de Múltiples Archivos
Argumentos:
Buffers:
Quickfix:
2. Edición Avanzada con Expresiones
Incrementar números:
Evaluar expresiones:
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)
4. Formatear Código
Formatear párrafo:
External formatter:
5. Diff Files
6. Sesiones
Guardar sesión:
Cargar sesión:
7. Spell Checking
8. Abrir URL
9. Ejecutar Línea como Comando
10. Formateo de Tabla
Solución de Problemas
Problemas Comunes
1. Vim/Neovim Lento
Soluciones:
2. Clipboard No Funciona
Verificar soporte:
Solución Ubuntu:
3. Colores Incorrectos
4. LSP No Funciona (Neovim)
Verificar:
5. Plugins No Se Instalan
Debugging
Modo verbose:
Ver opciones:
Ver mapeos:
Referencia Rápida
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
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,:.,:'<,'>
Conclusión
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
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
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
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
- Usando Apk En Windown 11
- 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
Esperamos que encuentres estas publicaciones igualmente interesantes y útiles. ¡Disfruta de la lectura!