wandres.dev
DIOS · Terminal · IA · Automatización

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.

⏱ 18 min

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.

🎯 Al terminar esta lección sabrás
  • 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.

folke/snacks.nvim
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.

🍿
snacks.nvimfolke/snacks.nvim

Suite de calidad de vida: picker con decenas de fuentes, explorador, terminal, dashboard, notificaciones e indent guides. Reemplaza media docena de plugins.

core
💡
Los tres atajos que más usarás

<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 proyecto entero a un par de teclas

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.

⚔️ Afina el entorno
  1. Instala starship y las CLI modernas; añade los alias a tu shell.
  2. Prueba z (zoxide) para saltar a un proyecto reciente.
  3. Añade snacks.nvim y prueba <leader>ff y <leader>fg.
  4. Abre la terminal integrada con <leader>tt, sal a modo Normal con Ctrl-\Ctrl-n y vuelve a esconderla con <leader>tt.