Нечеткая находка в файле в Vim


21

Мне нравится использовать плагин Command-T в Vim для нечеткого поиска имен файлов. Мне это так нравится, что я начал делать те же самые нечеткие поиски произвольных строк в открытом буфере.

Например, если я редактирую файл CSS, который содержит селектор типа #support-main .question .answer-rating, я могу в настоящее время набрать, /support-main .questionчтобы найти эту строку.

Я хотел бы иметь возможность вызвать нечеткий искатель и просто напечатать что-то вроде, supmaiqueчтобы найти ту же строку (среди других). Я знаю, что могу печатать /sup.*mai.*queдля того же эффекта, но печатание на клавиатуре .*нарушает мою концентрацию.

Есть ли способ сделать это?

Ответы:


23

В последнем плагине Ctrl-P для vim ( ctrlp ) есть расширение "line", которое может выполнять поиск нечетких строк. Вам необходимо включить расширение вручную. Вот мой конфиг в .vimrc:

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

После этого вы нажимаете Ctrl-pдля вызова меню, затем нажимаете Ctrl-fнесколько раз, пока не включится линейный режим. Введите нечеткую строку сейчас:

введите описание изображения здесь

ОБНОВЛЕНИЕ 27 февраля 2014

Альтернативное решение, которое я сейчас использую сам, - это использовать 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>

Теперь нажмите Ctrl-kи введите:

введите описание изображения здесь

Кстати, unite также может выполнять нечеткий поиск файлов по имени.

ОБНОВЛЕНИЕ 03 августа 2016

Другой способ поиска строки - использовать fzf вместе с сопровождающим плагином vim . Смотрите инструкции по установке здесь: https://github.com/junegunn/fzf.vim#installation

После того, как вы установили fzf и fzf.vim, вы можете использовать :BLinesдля поиска строк в текущем буфере:

Образец вывода

Вы, возможно, заметили, что это не совсем нечеткий поиск, означающий, что мне нужно использовать пробелы. Это может не сработать у вас.


Добавлено объединение в качестве альтернативного решения.
Baltazar

Добавлен fzf в качестве альтернативного решения.
Baltazar

1

Не совсем то, что вы хотите, но с set incsearchвашим шаблоном сопоставляется по мере ввода. Это не совсем нечеткое совпадение, но чувство похоже на подобное.


О да. incsearchотлично, но не то, что я ищу.
adamesque
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.