18

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

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

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

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

2 ответа2

21

В последнем плагине 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 для поиска строк в текущем буфере:

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

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

1

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .