Rozmyte wyszukiwanie w pliku w Vimie


21

Uwielbiam używać wtyczki Command-T w Vimie, aby wyszukiwać nazwy plików. Podoba mi się tak bardzo, że zacząłem chcieć wykonywać te same rozmyte wyszukiwania dowolnych ciągów w otwartym buforze.

Na przykład, jeśli edytuję plik CSS zawierający selektor podobny do #support-main .question .answer-rating, mogę obecnie pisać, /support-main .questionaby znaleźć ten wiersz.

Chciałbym móc wywołać rozmytą wyszukiwarkę i po prostu wpisać coś takiego jak supmaiqueznaleźć tę samą linię (między innymi). Wiem, że mogę pisać /sup.*mai.*quez tym samym efektem, ale wpisywanie tych znaków .*przerywa moją koncentrację.

Czy jest na to sposób?

Odpowiedzi:


23

W najnowszej wtyczce Ctrl-P dla vima ( ctrlp ) istnieje rozszerzenie „linii”, które może wykonywać wyszukiwanie linii rozmytych. Musisz włączyć rozszerzenie ręcznie. Oto moja konfiguracja w .vimrc:

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

Następnie naciśnij, Ctrl-paby wyświetlić menu, a następnie naciśnij Ctrl-fkilkakrotnie, aż zostanie włączony tryb linii. Wpisz teraz swój rozmyty ciąg:

wprowadź opis zdjęcia tutaj

AKTUALIZACJA 27 lutego 2014 r

Alternatywnym rozwiązaniem, z którego obecnie korzystam, byłoby skorzystanie z unite . Aby przeprowadzić wyszukiwanie linii rozmytych, należy delikatnie dostroić unite:

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>

Teraz naciśnij Ctrl-ki wpisz:

wprowadź opis zdjęcia tutaj

Nawiasem mówiąc, Unite może również wyszukiwać rozmyte pliki według nazwy.

AKTUALIZACJA 03 sierpnia 2016

Innym sposobem wyszukiwania linii jest użycie fzf wraz z dołączoną wtyczką vim . Zobacz instrukcje instalacji tutaj: https://github.com/junegunn/fzf.vim#installation

Po zainstalowaniu zarówno fzf, jak i fzf.vim, możesz użyć :BLinesdo wyszukiwania linii w bieżącym buforze:

Próbka wyjściowa

Być może zauważyłeś, że nie jest to dokładnie rozmyte wyszukiwanie, co oznacza, że ​​muszę używać spacji. To może nie działać.


Dodano unite jako alternatywne rozwiązanie.
baltazar

Dodano FZF jako alternatywne rozwiązanie.
baltazar

1

Nie do końca to, czego chcesz, ale set incsearchTwój wzór jest dopasowywany podczas pisania. To nie jest tak naprawdę rozmyte dopasowanie, ale uczucie jest podobne.


O tak. incsearchjest świetne, ale nie to, czego szukam.
adamesque
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.