Saltar al contenido principal

LazyVim

La configuración de Neovim que te hace competitivo con VS Code pero manteniendo el control total. Si estás cansado de IDEs pesados y quieres velocidad real, LazyVim es tu camino.

¿Por Qué Abandonar VS Code?

El Problema con IDEs Modernos

VS Code y similares son comodidad con costo oculto:

  • 🔴 Performance decay: Cada extensión añade 5-20ms de latency
  • 🔴 Batería killer: 3-5x más consumo que terminal + Neovim
  • 🔴 Context switching: Mouse clicks para todo
  • 🔴 Vendor lock-in: Dependes de Microsoft/GitHub
  • 🔴 Resource heavy: 500MB+ RAM para proyectos medianos

Resultado: Desarrolladores pasan 15-30 minutos diarios esperando que el IDE responda.

Neovim + LazyVim: La Alternativa Realista

Ventajas concretas:

  • 🟢 < 100ms response time (siempre)
  • 🟢 < 50MB RAM típico uso
  • 🟢 Batería de 8+ horas en laptop
  • 🟢 Keyboard-first workflow (10x más rápido)
  • 🟢 Configuración como código (versionable, reproducible)
  • 🟢 Terminal integrado (no más switching)

Instalación: De VS Code a LazyVim

Prerrequisitos

# Instalar Neovim 0.9+
brew install neovim

# Verificar versión
nvim --version # Debe ser 0.9.x o superior

# Instalar herramientas necesarias
brew install ripgrep fd lazygit

# Instalar fuente con ligatures (opcional pero recomendado)
brew tap homebrew/cask-fonts
brew install --cask font-fira-code

Backup y Limpieza

# Backup VS Code settings (opcional)
cp ~/Library/Application\ Support/Code/User/settings.json ~/vscode-backup.json

# Desinstalar extensiones pesadas de VS Code (opcional)
code --uninstall-extension ms-vscode.vscode-typescript-next
code --uninstall-extension ms-vscode-remote.remote-containers

Instalar LazyVim

# Backup config existente (si tienes)
mv ~/.config/nvim ~/.config/nvim.backup

# Clonar LazyVim starter
git clone https://github.com/LazyVim/starter ~/.config/nvim

# Remover .git para tu propia configuración
rm -rf ~/.config/nvim/.git

# Entrar a Neovim (primera vez instala plugins)
nvim

Primera ejecución toma 5-10 minutos mientras instala plugins.

Verificación

# Abrir Neovim
nvim

# Verificar instalación
:Lazy # Debe mostrar interface de Lazy
:checkhealth # Debe pasar todos los checks

Arquitectura: Plugins Lazy-Loaded

¿Cómo Funciona Lazy Loading?

LazyVim carga plugins solo cuando los necesitas:

-- Ejemplo: Plugin se carga solo al abrir archivo TypeScript
{
"neovim/nvim-lspconfig",
event = "BufReadPre *.ts,*.tsx", -- Lazy load trigger
config = function()
-- Configuración aquí
end
}

Resultado: Startup time de 50-200ms en lugar de segundos.

Estructura Modular

~/.config/lua/
├── config/ # Configuración general
│ ├── autocmds.lua
│ ├── keymaps.lua
│ ├── lazy.lua
│ └── options.lua
├── plugins/ # Plugins organizados por categoría
│ ├── coding.lua # Autocomplete, snippets
│ ├── colorscheme.lua
│ ├── editor.lua # Telescope, treesitter
│ ├── lsp.lua # Language servers
│ ├── treesitter.lua
│ └── ui.lua # Statusline, tabs
└── plugins.lua # Punto de entrada

Keybindings Esenciales

Filosofía: Mnemonics

LazyVim usa sistema mnemónico:

  • <leader> = <space> (fácil de presionar)
  • <leader>f = find/files
  • <leader>s = search
  • <leader>g = git
  • <leader>l = lsp
  • <leader>c = code

Keybindings Críticos

-- Modo normal
<space>ff -- Find files (Telescope)
<space>fg -- Live grep (buscar en archivos)
<space>fb -- Buffers abiertos
<space>fh -- Help tags

<space>ss -- Search/replace con spectre
<space>sw -- Search word under cursor

<space>gg -- Git status (lazygit)
<space>gb -- Git branches
<space>gc -- Git commits

<space>la -- Code actions LSP
<space>ld -- Go to definition
<space>lr -- Rename symbol
<space>lf -- Format code

<space>ca -- Run code actions
<space>cf -- Format buffer

<space>xx -- Toggle trouble (diagnostics)
<space>xq -- Quickfix list

-- Windows/panes
<C-h/j/k/l> -- Navigate panes (vim-tmux-navigator)
<space>wv -- Split vertical
<space>ws -- Split horizontal
<space>wd -- Close window

-- Terminal
<space>ft -- Toggle terminal
<C-\> -- Open terminal

Customizar Keybindings

-- ~/.config/lua/config/keymaps.lua
local map = vim.keymap.set

-- Tu custom keybindings
map("n", "<leader>pv", "<cmd>Ex<CR>", { desc = "Project view" })
map("n", "<leader>pf", "<cmd>Telescope find_files<CR>", { desc = "Find files" })

-- Override existentes
map("n", "<C-s>", "<cmd>w<CR>", { desc = "Save file" })

LSP: Desarrollo con Superpoderes

Language Servers Configurados

Por defecto incluye:

  • TypeScript/JavaScript
  • Python
  • Go
  • Rust
  • Lua
  • JSON/YAML
  • Markdown

Añadir Nuevo LSP

-- ~/.config/lua/plugins/lsp.lua
return {
{
"neovim/nvim-lspconfig",
opts = {
servers = {
-- Añadir nuevo servidor
eslint = {},
rust_analyzer = {
settings = {
["rust-analyzer"] = {
checkOnSave = {
command = "clippy"
}
}
}
}
}
}
}
}

Formateo Automático

-- Formateo al guardar
vim.api.nvim_create_autocmd("BufWritePre", {
pattern = { "*.ts", "*.tsx", "*.js", "*.jsx" },
command = "lua vim.lsp.buf.format()"
})

Plugins Recomendados

Para Desarrollo Web

-- ~/.config/lua/plugins/coding.lua
return {
-- Autocomplete mejorado
{
"hrsh7th/nvim-cmp",
dependencies = {
"hrsh7th/cmp-nvim-lsp",
"hrsh7th/cmp-buffer",
"hrsh7th/cmp-path",
"saadparwaiz1/cmp_luasnip"
}
},

-- Snippets
{
"L3MON4D3/LuaSnip",
config = function()
require("luasnip.loaders.from_vscode").lazy_load()
end
},

-- Pairs inteligentes
{
"windwp/nvim-autopairs",
event = "InsertEnter",
config = true
},

-- Comentarios inteligentes
{
"numToStr/Comment.nvim",
config = true
}
}

Para Git

-- ~/.config/lua/plugins/git.lua
return {
-- LazyGit integrado
{
"kdheepak/lazygit.nvim",
cmd = "LazyGit",
keys = {
{ "<leader>gg", "<cmd>LazyGit<CR>", desc = "LazyGit" }
}
},

-- Git blame inline
{
"f-person/git-blame.nvim",
event = "BufReadPre"
}
}

Para Productividad

-- ~/.config/lua/plugins/productivity.lua
return {
-- Búsqueda/reemplazo visual
{
"nvim-pack/nvim-spectre",
keys = {
{ "<leader>sr", "<cmd>Spectre<CR>", desc = "Search and replace" }
}
},

-- Multi-cursor
{
"mg979/vim-visual-multi",
event = "BufReadPre"
},

-- Surround operations
{
"kylechui/nvim-surround",
config = true
}
}

Performance Tuning

Optimizar Startup Time

-- ~/.config/lua/config/lazy.lua
return {
performance = {
rtp = {
disabled_plugins = {
"gzip",
"matchit",
"matchparen",
"netrwPlugin",
"tarPlugin",
"tohtml",
"tutor",
"zipPlugin",
},
},
},
}

Lazy Loading Estratégico

-- Solo cargar cuando necesites
{
"nvim-telescope/telescope.nvim",
cmd = "Telescope", -- Cargar en comando
keys = { -- O en keybinding
{ "<leader>ff", "<cmd>Telescope find_files<CR>" }
}
}

Troubleshooting Común

Plugin No Carga

:Lazy sync    # Sincronizar plugins
:Lazy clean # Limpiar plugins no usados
:Lazy update # Actualizar todos

LSP No Funciona

:LspInfo      # Ver estado del LSP
:LspRestart # Reiniciar LSP

Keybinding No Funciona

:verbose map <leader>ff  # Ver qué comando está asignado

Lentitud

:profile start profile.log
:profile func *
:profile file *
" Ejecutar acciones lentas
:profile stop
:e profile.log # Ver qué consume tiempo

Migración Gradual desde VS Code

Semana 1: Básicos

# Instalar LazyVim
# Aprender navegación básica: h,j,k,l
# Usar para editar archivos simples

Semana 2: LSP y Búsqueda

# Configurar LSP para tu lenguaje principal
# Aprender Telescope: <space>ff, <space>fg
# Reemplazar "Find in Files" de VS Code

Semana 3: Git y Terminal

# Configurar lazygit: <space>gg
# Terminal integrado: <space>ft
# Reemplazar terminal externo

Semana 4: Plugins y Customización

# Añadir plugins específicos de tu stack
# Customizar keybindings
# Crear autocmds para workflows

Comparativa Real: LazyVim vs VS Code

Tarea: Refactorizar Componente React

MétricaVS CodeLazyVim
Startup3-5s0.2s
RAM uso600MB80MB
Buscar archivoCmd+P (0.5s)<space>ff (0.1s)
Buscar en códigoCmd+Shift+F (2s)<space>fg (0.3s)
Rename symbolF2 (1s)<space>lr (instant)
Format codeAlt+Shift+F (1s)<space>cf (instant)
Terminal toggleCtrl+` (0.5s)<space>ft (instant)

Resultado: 3x más rápido en workflow típico

Conclusión

LazyVim no es para todo el mundo. Es para desarrolladores que:

  • ✅ Quieren velocidad máxima
  • ✅ Valoran control total de su entorno
  • ✅ Están dispuestos a invertir tiempo inicial por productividad lifetime
  • ✅ Prefieren terminal-first workflows

Si eres de los que pasan más tiempo esperando que el IDE responda que programando, LazyVim te cambiará la vida.

Pregunta final: ¿Cuántos minutos pierdes diariamente esperando VS Code?

"VS Code te hace sentir productivo. LazyVim te hace ser productivo."

Próximos: Tmux para gestión de terminales, y Zellij como alternativa moderna. 🖥️