Як змусити 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:

> 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
Схоже, що ctrlp може прийняти функцію власної відповідності. Саме в документації під '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використовує ваш вхід як неочищений Regex, тобто ви знайдете в ньому лише відповідність people. Ctrl-Dвідповідає лише імені файлу, ігноруючи шлях.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.