La terminal como IDE: shell, tools y picker
Convierte tu terminal en el entorno perfecto: shell moderno, starship, las CLI que reemplazan a las clásicas, y el buscador difuso (snacks/Telescope) dentro de Neovim.
Neovim no vive aislado: vive en tu terminal. Un usuario de nivel dios afina todo el entorno — el shell, el prompt, las herramientas de línea de comandos y el buscador difuso — hasta que moverse por cualquier proyecto es instantáneo.
- Un shell moderno con prompt informativo (starship).
- Las CLI modernas que reemplazan a
ls,cd,cat,grep. - El buscador difuso dentro de Neovim con snacks.nvim.
- Terminal integrada sin salir del editor.
Shell y prompt
Usa zsh (por defecto en macOS) o fish, y ponles starship: un prompt rapidísimo que muestra rama de Git, versión de lenguaje, estado del comando anterior y más.
brew install starship
# zsh: añade al final de ~/.zshrc
echo 'eval "$(starship init zsh)"' >> ~/.zshrc
Las CLI modernas (reemplazos directos)
Estas herramientas son más rápidas y bonitas que las clásicas. Muchas ya las instalaste; complétalas:
brew install eza zoxide bat fd ripgrep fzf git-delta
eza → ls
Listados con iconos, colores y Git. Alias: alias ls='eza --icons --git'.
zoxide → cd
Salta a carpetas por frecuencia: z proj te lleva a tu proyecto sin la ruta completa.
bat → cat
Muestra archivos con resaltado de sintaxis y números de línea.
ripgrep → grep
Búsqueda de texto ultrarrápida, respeta .gitignore. Motor del grep de Neovim.
fd → find
Búsqueda de archivos simple y veloz.
fzf
Selector difuso universal para el shell: Ctrl-r (historial), Ctrl-t (archivos).
eval "$(zoxide init zsh)"
alias ls='eza --icons --git'
alias cat='bat'
alias cd='z'
export FZF_DEFAULT_COMMAND='fd --type f --hidden --exclude .git'
El buscador difuso dentro de Neovim
Aquí está una de las piezas más importantes de todo el setup: el picker, cómo abres archivos y buscas texto en el proyecto sin árboles ni ratón. Neovim 0.12 se ha traído al core el autocompletado y la configuración de LSP, pero el buscador difuso sigue viniendo de un plugin, y hay tres grandes: Telescope (el clásico), fzf-lua (velocísimo) y snacks.nvim (la suite de folke, con picker + explorador + terminal + dashboard). Usaremos snacks: moderno, integradísimo y una sola dependencia.
return {
"folke/snacks.nvim",
priority = 1000,
lazy = false,
opts = {
picker = { enabled = true },
explorer = { enabled = true },
dashboard = { enabled = true },
indent = { enabled = true },
notifier = { enabled = true },
quickfile = { enabled = true },
},
keys = {
{ "<leader>ff", function() Snacks.picker.files() end, desc = "Buscar archivos" },
{ "<leader>fg", function() Snacks.picker.grep() end, desc = "Grep en el proyecto" },
{ "<leader>fb", function() Snacks.picker.buffers() end, desc = "Buffers abiertos" },
{ "<leader>fr", function() Snacks.picker.recent() end, desc = "Archivos recientes" },
{ "<leader>fs", function() Snacks.picker.lsp_symbols() end, desc = "Símbolos del archivo" },
{ "<leader>fd", function() Snacks.picker.diagnostics() end, desc = "Diagnósticos" },
{ "<leader>e", function() Snacks.explorer() end, desc = "Explorador de archivos" },
{ "<leader>tt", function() Snacks.terminal.toggle() end, desc = "Terminal integrada" },
},
}vim.pack.add({ { src = "https://github.com/folke/snacks.nvim" } })
require("snacks").setup({
picker = { enabled = true },
explorer = { enabled = true },
dashboard = { enabled = true },
indent = { enabled = true },
notifier = { enabled = true },
quickfile = { enabled = true },
})
local map = vim.keymap.set
map("n", "<leader>ff", function() Snacks.picker.files() end, { desc = "Buscar archivos" })
map("n", "<leader>fg", function() Snacks.picker.grep() end, { desc = "Grep en el proyecto" })
map("n", "<leader>fb", function() Snacks.picker.buffers() end, { desc = "Buffers abiertos" })
map("n", "<leader>fr", function() Snacks.picker.recent() end, { desc = "Archivos recientes" })
map("n", "<leader>fs", function() Snacks.picker.lsp_symbols() end, { desc = "Símbolos del archivo" })
map("n", "<leader>fd", function() Snacks.picker.diagnostics() end, { desc = "Diagnósticos" })
map("n", "<leader>e", function() Snacks.explorer() end, { desc = "Explorador de archivos" })
map("n", "<leader>tt", function() Snacks.terminal.toggle() end, { desc = "Terminal integrada" })snacks tiene que estar cargado desde el arranque (dashboard, notifier, quickfile), así que aquí vim.pack encaja perfecto: sin spec, sin evento y sin prioridad que ajustar. Ojo, cada módulo se activa explícitamente: lo que no aparece en el setup, no existe.
Suite de calidad de vida: picker con decenas de fuentes, explorador, terminal, dashboard, notificaciones e indent guides. Reemplaza media docena de plugins.
<leader>ff (archivos), <leader>fg (grep en todo el proyecto) y <leader>fb (buffers). Interiorízalos primero: son la forma más rápida de saltar a cualquier sitio en cualquier proyecto. El árbol de archivos (<leader>e) es secundario — los pros navegan buscando, no clicando.
Terminal integrada
Neovim trae una terminal nativa (:terminal). snacks la envuelve en algo manejable con <leader>tt: si no le pasas ningún comando abre un split inferior con tu shell y la misma tecla lo esconde; si le pasas un comando concreto, lo abre en una ventana flotante. Recuerda: para salir del modo Terminal a Normal, pulsa Ctrl-\Ctrl-n (o mapea algo más cómodo).
El objetivo: abres el terminal en cualquier carpeta, z proyecto te lleva, nvim arranca, <leader>ff encuentra el archivo, <leader>fg busca esa función que recuerdas a medias. Desde teclear hasta editar la línea correcta pasan menos de tres segundos. Cuando ese flujo es automático, la fricción entre tu intención y el código desaparece.
- Instala starship y las CLI modernas; añade los alias a tu shell.
- Prueba
z(zoxide) para saltar a un proyecto reciente. - Añade snacks.nvim y prueba
<leader>ffy<leader>fg. - Abre la terminal integrada con
<leader>tt, sal a modo Normal con Ctrl-\Ctrl-n y vuelve a esconderla con<leader>tt.