Unscharfer Fund in Datei in Vim

21

Ich liebe es, das Command-T-Plugin in Vim zu verwenden, um nach Dateinamen zu suchen. Ich mag es so sehr, dass ich anfing, die gleichen Fuzzy-Suchen nach beliebigen Zeichenfolgen in einem offenen Puffer durchzuführen.

Wenn ich zum Beispiel eine CSS-Datei bearbeite, die einen Selektor wie enthält #support-main .question .answer-rating, kann ich momentan eingeben /support-main .question, um diese Zeile zu finden.

Ich möchte in der Lage sein, einen Fuzzy-Finder aufzurufen und einfach etwas einzugeben supmaique, um (unter anderem) dieselbe Zeile zu finden. Ich weiß, dass ich /sup.*mai.*quefür den gleichen Effekt tippen kann, aber wenn ich das .*s tippe, wird meine Konzentration unterbrochen.

Gibt es eine Möglichkeit, dies zu tun?

adamesque
quelle

Antworten:

23

Das neueste Ctrl-P-Plugin für vim ( ctrlp ) enthält eine "Zeilen" -Erweiterung, mit der Fuzzy-Zeilen gesucht werden können. Sie müssen die Erweiterung manuell aktivieren. Hier ist meine Konfiguration in .vimrc:

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

Danach drücken Sie Ctrl-p, um das Menü aufzurufen, und dann Ctrl-fmehrmals, bis der Leitungsmodus aktiviert ist. Geben Sie jetzt Ihren Fuzzy-String ein:

Bildbeschreibung hier eingeben

UPDATE 27. Februar 2014

Eine alternative Lösung, die ich derzeit selbst verwende, wäre die Verwendung von unite . Um eine Fuzzy-Liniensuche durchzuführen, müssen Sie unite leicht abstimmen:

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>

Drücken Sie nun Ctrl-kund geben Sie Folgendes ein:

Bildbeschreibung hier eingeben

Unite kann übrigens auch nach Namen suchen.

UPDATE 03.08.2016

Eine andere Möglichkeit, eine Liniensuche durchzuführen, besteht darin, fzf zusammen mit dem zugehörigen vim-Plugin zu verwenden . Anweisungen zur Installation finden Sie hier: https://github.com/junegunn/fzf.vim#installation

Nachdem Sie sowohl fzf als auch fzf.vim installiert haben, können Sie :BLinesZeilen im aktuellen Puffer durchsuchen:

Beispielausgabe

Vielleicht ist Ihnen aufgefallen, dass die Suche nicht genau verschwommen ist und ich Leerzeichen verwenden muss. Dies funktioniert möglicherweise nicht bei Ihnen.

Baltazar
quelle
Als alternative Lösung wurde unite hinzugefügt.
Baltazar
Fzf als alternative Lösung hinzugefügt.
Baltazar
1

Nicht genau das, was Sie wollen, aber mit set incsearchIhrem Muster wird abgestimmt, wie Sie eingeben. Es ist nicht wirklich Fuzzy Matching, aber das Gefühl ist ähnlich.

romainl
quelle
Ah ja. incsearchist toll, aber nicht das, wonach ich suche.
Adamesque