Как я могу заставить ctrlp лучше сопоставлять имена файлов?

10

Мой проект имеет эти файлы:

$ find . -type f -and -name 'peop*'
./app/assets/stylesheets/admin/sections/people.css.sass
./app/controllers/admin/people_controller.rb

Когда я устал набирать текст :e app/assets/stylesheets/admin/sections/people.css.sass, я подумал, что ctrlp может быть хорошим способом сэкономить при печати. Тем не менее, я не могу заставить его соответствовать файлам, что я считаю нормальным способом.

Сначала я использую <C-p>и печатаю peop, и это дает мне следующие результаты («первое» совпадение внизу):

> app/models/attribute_group.rb
> app/models/contract_template.rb
> app/policies/contract_policy.rb
> app/uploaders/photo_uploader.rb
> app/policies/invoice_policy.rb
> app/views/layouts/pdf.pdf.haml
> app/uploaders/logo_uploader.rb
> app/models/property_object.rb
> app/policies/person_policy.rb
> app/policies/photo_policy.rb    
>>> peop_

Эти результаты ужасны. Никаких файлов с peopними нет. Даже когда я расширяю его до people:

> app/policies/contract_template_policy.rb
> app/models/concerns/exportable.rb
> app/models/contract_template.rb
> app/uploaders/photo_uploader.rb
> app/uploaders/logo_uploader.rb
> app/views/admin/people/_show.html.haml
> app/views/admin/people/_form.html.haml
> app/views/admin/people/show.html.haml
> app/views/admin/people/edit.html.haml
> app/views/admin/people/new.html.haml 
>>> people_

Это не перечисляет ни одного из них (!)

Я прошел :help ctrlp-optionsи нашел один вариант, который несколько улучшает ситуацию:

Set this to 1 to set searching by filename (as opposed to full path) as the
default:
  let g:ctrlp_by_filename = 0

Can be toggled on/off by pressing <c-d> inside the prompt.

После установки этого я получаю следующие результаты peop:

> app/controllers/admin/organisation_people_controller.rb
> app/assets/stylesheets/admin/sections/people.css.sass
> doc/formulieren/opdrachtverlening-woningbeheer.pdf
> doc/formulieren/hulptabellen-object-unit-soort.pdf
> doc/formulieren/brandpreventievoorjongeren.pdf
> app/policies/organisation_person_policy.rb
> doc/prototype-admin/prototype/inspectiemodule_apparaten.html
> app/policies/property_object_policy.rb
> app/policies/person_policy.rb
> app/controllers/admin/people_controller.rb
>d> peop_

Итак, это немного лучше, я получаю по крайней мере один из ожидаемых файлов при первом результате, а другой как 9-й. Это все еще hulptabellen-object-unit-soort.pdfлучше, чем people.css.sassкогда-либо (!)

peopleНаконец, набор текста дает мне 2 ожидаемых файла как первые 2:

> app/controllers/admin/organisation_people_controller.rb
> app/assets/stylesheets/admin/sections/people.css.sass
> app/controllers/admin/people_controller.rb
>>> people_

Как я могу сделать это соответствие лучше? Я не возражаю против "нечеткого соответствия", но оно не должно быть настолько нечетким, чтобы соответствовать всему и всем ... В этом случае я ожидал бы, что при наборе <c-P>peopбудет app/assets/stylesheets/admin/sections/people.css.sassлибо 1-е, либо 2-е совпадение.

Мартин Турной
источник
2
Похоже, что Ctrl может принять пользовательские функции сопоставления. Он находится в документации под 'g:ctrlp_match_func Хорошим примером использования этого плагина: vim.org/scripts/script.php?script_id=4884
EvergreenTree

Ответы:

7

Подобный вопрос был только что задан на Vim Reddit здесь . Я начал использовать ctrlp-cmatcher довольно давно, и я считаю, что он гораздо умнее подбирает нужный файл. Обратите внимание, что для этого требуется скомпилированный компонент. В противном случае вам придется попробовать некоторые из подходов в статье .

Коллин Питерс
источник
4

CtrlP имеет несколько разных режимов, Ctrl-Rи Ctrl-D. Ctrl-Rиспользует ваши входные данные как необработанные регулярные выражения, то есть вы peopleявно найдете совпадения только с ними. Ctrl-Dсоответствует только имени файла, игнорируя путь.

Я считаю, что стандартная функциональность CtrlP просто объединяет .*каждый символ как необработанный символ, поэтому точка рассматривается как точка. Если вы знали заранее, что файл имеет как минимум 2 каталога, вы можете это сделать //people.

TankorSmash
источник