Recherche floue dans un fichier dans Vim

21

J'adore utiliser le plugin Command-T dans Vim pour effectuer des recherches floues sur les noms de fichiers. Je l'aime tellement que j'ai commencé à vouloir faire les mêmes recherches floues pour les chaînes arbitraires dans un tampon ouvert.

Par exemple, si je modifie un fichier CSS qui contient un sélecteur comme #support-main .question .answer-rating, je peux actuellement taper /support-main .questionpour trouver cette ligne.

Je voudrais pouvoir invoquer un chercheur flou et simplement taper quelque chose comme supmaiquepour trouver cette même ligne (entre autres). Je sais que je peux taper /sup.*mai.*quepour le même effet, mais taper le .*s coupe ma concentration.

Y a-t-il un moyen de faire cela?

adamesque
la source

Réponses:

23

Il y a une extension "ligne" dans le dernier plugin Ctrl-P pour vim ( ctrlp ) qui peut faire une recherche de ligne floue. Vous devez activer l'extension manuellement. Voici ma config en .vimrc:

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

Après cela, vous appuyez sur Ctrl-ppour afficher le menu, puis appuyez Ctrl-fplusieurs fois jusqu'à ce que le mode ligne soit activé. Tapez votre chaîne floue maintenant:

entrez la description de l'image ici

MISE À JOUR 27 février 2014

Une autre solution que j'utilise actuellement serait d'utiliser unite . Pour effectuer une recherche de ligne floue, vous devez régler légèrement unir:

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>

Maintenant, appuyez sur Ctrl-ket tapez:

entrez la description de l'image ici

Soit dit en passant, unite peut également effectuer une recherche de fichiers flous par nom.

MISE À JOUR 03 août 2016

Une autre façon de faire une recherche en ligne est d'utiliser fzf avec le plugin vim qui l' accompagne . Voir les instructions d'installation ici: https://github.com/junegunn/fzf.vim#installation

Après avoir installé fzf et fzf.vim, vous pouvez utiliser :BLinespour rechercher des lignes dans le tampon actuel:

Exemple de sortie

Vous avez peut-être remarqué que ce n'est pas exactement une recherche floue, ce qui signifie que je dois utiliser des espaces. Cela peut ne pas vous fonctionner.

baltazar
la source
Ajouté unite comme solution alternative.
baltazar
Ajout de fzf comme solution alternative.
baltazar
1

Pas exactement ce que vous voulez, mais set incsearchvotre motif correspond à votre frappe. Ce n'est pas vraiment une correspondance floue, mais le sentiment est un peu similaire.

romainl
la source
Ah oui. incsearchest super, mais pas ce que je recherche.
adamesque