Saltar al contenido

El picker: navegar buscando, no clicando

El buscador difuso es la pieza que más cambia cómo te mueves por un proyecto. Qué es la coincidencia difusa, las fuentes, cómo se opera dentro del picker, y cómo mandar los resultados a la quickfix.

De todo lo que vas a instalar, esto es lo que más cambia tu día. No es «un buscador de archivos»: es la forma de llegar a cualquier sitio de cualquier proyecto sin recordar dónde está, y sustituye al árbol de archivos, al historial de pestañas y a la mitad de los atajos que traías de otro editor.

  • Qué es la coincidencia difusa y cómo se escribe una consulta que acierte.
  • Las fuentes: ficheros, texto, buffers, símbolos, diagnósticos, ayuda.
  • Cómo se opera dentro del picker: seleccionar, abrir en split, previsualizar.
  • Mandar los resultados a la quickfix y editarlos en masa.
  • Montarlo con snacks.nvim, y qué pasa con Telescope y fzf-lua.

Buscar en vez de navegar

En un editor con árbol de archivos, para abrir algo despliegas carpetas hasta encontrarlo. Necesitas saber dónde está. En un proyecto ajeno, o grande, o los lunes, no lo sabes.

Un picker invierte eso: escribes trozos del nombre y él encuentra el fichero. No necesitas la ruta, ni el nombre completo, ni el orden correcto de las letras.

Texto
escribes:  uspfencuentra: src/components/UserProfile.tsx           app/user/profile_form.rb           test/users/profile_spec.js

Eso es coincidencia difusa: no busca la cadena uspf, busca ficheros donde esas cuatro letras aparezcan en ese orden, aunque estén separadas. Y las ordena por cercanía: cuanto más juntas y más cerca del principio de una palabra, más arriba.

Por qué esto no es un accesorio

Cuando llegar a cualquier fichero cuesta menos de un segundo, dejas de organizar tu trabajo alrededor de lo que tienes abierto. Se acabó mantener quince pestañas por si acaso, o dejar el árbol ocupando una quinta parte de la pantalla para no perderte.

El árbol de archivos no desaparece porque sea malo: desaparece porque resuelve un problema que ya no tienes.

Escribir consultas que acierten

Tres hábitos que cambian mucho el resultado:

  • Iniciales de las palabras. UserProfile.tsx se encuentra con upt mejor que con userpro.
  • Trozos de la ruta. comp/user acota a un directorio sin escribirlo entero.
  • Empieza corto. Tres o cuatro letras suelen bastar; añade más solo si hay demasiados resultados.

Las fuentes

Un picker no busca solo ficheros. Es la misma ventana sobre listas distintas, y ahí está su valor: una sola interfaz para todo.

Ficheros

Los del proyecto, respetando .gitignore. El que más usarás.

Grep

Busca texto en todo el proyecto, no nombres. Es ripgrep por debajo.

Buffers

Lo que ya tienes abierto. Sustituye a las pestañas.

Recientes

Ficheros de sesiones anteriores. «Eso que tocaba ayer.»

Símbolos

Funciones y clases del fichero o del proyecto, vía LSP.

Diagnósticos

Todos los errores y avisos del proyecto en una lista.

La distinción entre ficheros y grep es la que más cuesta interiorizar y la más rentable: si sabes cómo se llama, ficheros; si recuerdas una línea de código pero no dónde estaba, grep. La segunda es la que sustituye a leerse el proyecto.

Operar dentro del picker

Un picker se abre en modo Insertar, porque lo primero que haces siempre es escribir. Lo que viene después es lo que casi nadie aprende:

Qué quieres Cómo
Bajar y subir por la lista Ctrl-n / Ctrl-p
Abrir Enter
Abrir en split vertical Ctrl-v
Abrir en split horizontal Ctrl-s
Desplazar la vista previa Ctrl-d / Ctrl-u
Marcar varios Tab
Mandar todo a la quickfix Ctrl-q
Cerrar Esc

Compruébalas en tu picker, no te fíes de una tabla

Cada picker trae sus propias teclas y son configurables. La forma de verlas es abrirlo y consultar su ayuda —en snacks, con ? dentro del picker—. Ese reflejo vale para cualquier plugin con interfaz propia: la lista de teclas está dentro, no en un tutorial.

La tecla que lo conecta con el resto del editor

De todas, la importante es mandar los resultados a la quickfix.

Un picker enseña coincidencias de una en una y se cierra al elegir. La quickfix es una lista persistente que puedes recorrer, y sobre la que puedes ejecutar un comando en cada entrada con :cdo.

Texto
grep "getUserData"   →   47 coincidencias en el pickerCtrl-q               →   las 47 en la quickfix:cdo s/getUserData/fetchUser/g | update

Buscas con el picker, revisas, y renombras en 47 ficheros con una línea. El picker encuentra; la quickfix opera — todo lo que aprendiste en la lección 1.6 se enchufa aquí, y esta tecla es el puente.

Montarlo

Usaremos snacks.nvim: además del picker trae explorador, terminal, dashboard y notificaciones, así que sustituye a media docena de plugins con una sola dependencia.

Suite de calidad de vida: picker con decenas de fuentes, explorador, terminal, dashboard, notificaciones e indent guides. Cada módulo se activa por separado.

Todo cuelga de <leader>f —de find— y por eso which-key te lo agrupa solo. Es el presupuesto de teclas de la lección 1.1 aplicado: un prefijo, una familia.

Los tres que vas a usar el 90% del tiempo

<leader>ff para ficheros, <leader>fg para texto y <leader>fb para buffers. Interiorízalos antes de tocar los demás.

Y <leader>fh, la ayuda, es el que convierte la lección 0.6 en un reflejo: buscar en la documentación con el mismo gesto con el que buscas un fichero.

El explorador es secundario

<leader>e abre el árbol, y merece la pena tenerlo: para ver la forma de un proyecto que no conoces, para crear y renombrar ficheros, para arrastrar cosas de sitio.

Lo que no merece la pena es dejarlo abierto. Ocupa pantalla permanentemente para resolver algo que el picker resuelve en un segundo. Ábrelo cuando lo necesites y ciérralo.

Dos piezas de interfaz que esperaban aquí

El Nivel 1 te enseñó a hacer estas dos cosas con el editor desnudo y te prometió la versión con interfaz. Esta es.

Reemplazar en el proyecto, viendo lo que haces. En la lección 1.3 el reemplazo masivo era :cfdo s/.../../g | update sobre una quickfix, a ciegas hasta el final. grug-far pone delante un buffer interactivo: escribes búsqueda y reemplazo, ves cada coincidencia con su contexto antes de tocar nada, excluyes las que no quieres y aplicas. Por debajo es ripgrep, como el grep del picker.

Buscar y reemplazar en el proyecto con vista previa en vivo. Ábrelo con :GrugFar (o mapea <leader>sr). No sustituye a :cdo — para reemplazos con lógica sigue mandando la quickfix —, sustituye al miedo de los reemplazos grandes.

La barra de buffers, si la echas de menos. La lección 1.1 te enseñó a vivir sin pestañas: <leader>fb lista los buffers más rápido de lo que ningún ojo recorre una barra. Pero si vienes de otro editor y la fila de pestañas visible te da paz mental, el plugin honesto para eso es bufferline:

Dibuja los buffers como pestañas arriba, con iconos y diagnósticos. Es 100% cosmético — no cambia qué es un buffer — y compite por tu atención con una lista que el picker te da bajo demanda. Pruébalo, y si en una semana sigues usando <leader>fb para moverte, desinstálalo sin pena: LazyVim lo trae por defecto y media comunidad lo apaga.

Telescope y fzf-lua

Son las otras dos opciones serias, y no se mencionan aquí de pasada para que quede constancia.

Telescope fue el estándar durante años y tiene el ecosistema de extensiones más grande. fzf-lua delega la coincidencia difusa al binario fzf, y en repositorios enormes se nota. snacks es el más nuevo y el que menos dependencias arrastra si ya lo usas para lo demás.

Los tres hacen lo mismo desde tu punto de vista: escribir, filtrar, elegir. Lo que aprendes en esta lección no es snacks, es el picker, y se transfiere entero si algún día cambias. Elegimos uno porque un curso no puede montar tres, no porque los otros dos estén mal.

Iniciales de las palabras. No hace falta la ruta ni el nombre completo.

Grep busca texto, no nombres de fichero. Es el que sustituye a leerse el proyecto.

El picker encuentra, la quickfix opera. Esa es la conexión entre las dos herramientas.

Deja de abrir el árbol

Durante un día entero, prohíbete el explorador. Todo con el picker:

  1. Abre cinco ficheros que no recuerdes dónde están, solo con <leader>ff.
  2. Busca una cadena de texto por todo el proyecto con <leader>fg y salta a tres coincidencias distintas.
  3. Vuelve a un fichero de ayer con <leader>fr.
  4. Manda un grep entero a la quickfix con Ctrl-q y recórrelo con :cnext.
  5. Abre la ayuda de 'signcolumn' con <leader>fh en vez de escribir :h.

Al final del día habrás dejado de pensar en dónde están las cosas, que es exactamente el objetivo.