Búsqueda difusa dentro del archivo en Vim

21

Me encanta usar el complemento Command-T en Vim para hacer búsquedas difusas de nombres de archivos. Me gusta tanto que empecé a querer hacer las mismas búsquedas difusas de cadenas arbitrarias dentro de un búfer abierto.

Por ejemplo, si estoy editando un archivo CSS que contiene un selector como #support-main .question .answer-rating, actualmente puedo escribir /support-main .questionpara encontrar esa línea.

Me gustaría poder invocar un buscador difuso y simplemente escribir algo como supmaiqueencontrar esa misma línea (entre otras). Sé que puedo escribir /sup.*mai.*quecon el mismo efecto, pero escribir el .*'s rompe mi concentración.

¿Hay alguna forma de hacer esto?

adamesco
fuente

Respuestas:

23

Hay una extensión de "línea" en el último complemento Ctrl-P para vim ( ctrlp ) que puede hacer una búsqueda de línea difusa. Debe habilitar la extensión manualmente. Aquí está mi configuración en .vimrc:

let g:ctrlp_map = '<c-p>'
let g:ctrlp_cmd = 'CtrlPLastMode'
let g:ctrlp_extensions = ['buffertag', 'tag', 'line', 'dir']

Después de eso, presiona Ctrl-ppara abrir el menú, luego presiona Ctrl-fvarias veces hasta que el modo de línea esté activado. Escriba su cadena difusa ahora:

ingrese la descripción de la imagen aquí

ACTUALIZACIÓN 27 feb 2014

Una solución alternativa que estoy usando actualmente sería usar unite . Para realizar una búsqueda de línea difusa, debe ajustar ligeramente la unidad:

call unite#filters#matcher_default#use(['matcher_fuzzy'])
call unite#filters#sorter_default#use(['sorter_rank'])
call unite#custom#source('file,file/new,buffer,file_rec,line', 'matchers', 'matcher_fuzzy')
nnoremap <C-k> :<C-u>Unite -buffer-name=search -start-insert line<cr>

Ahora presiona Ctrl-ky escribe:

ingrese la descripción de la imagen aquí

Por cierto, unite también puede hacer búsquedas de archivos difusos por nombre.

ACTUALIZACIÓN 03 Ago 2016

Otra forma de hacer una búsqueda de línea es usar fzf junto con el complemento vim que lo acompaña . Consulte las instrucciones de instalación aquí: https://github.com/junegunn/fzf.vim#installation

Después de haber instalado fzf y fzf.vim, puede usar :BLinespara buscar líneas en el búfer actual:

Salida de muestra

Es posible que haya notado que no es exactamente una búsqueda difusa, lo que significa que necesito usar espacios. Puede que esto no te funcione.

Baltazar
fuente
Agregado unir como una solución alternativa.
baltazar
Se agregó fzf como una solución alternativa.
baltazar
1

No es exactamente lo que desea, pero con set incsearchsu patrón coincide a medida que escribe. No es realmente una coincidencia difusa, pero la sensación es similar.

romainl
fuente
Ah, sí. incsearches genial, pero no es lo que estoy buscando.
adamesque