Wie kann ich ctrlp dazu bringen, den Dateinamen besser abzugleichen?

10

Mein Projekt hat folgende Dateien:

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

Als ich es leid :e app/assets/stylesheets/admin/sections/people.css.sasswar zu tippen , dachte ich, dass Strg ein guter Weg sein könnte, um etwas Tippen zu sparen. Ich kann es jedoch nicht dazu bringen, Dateien auf eine meiner Meinung nach vernünftige Weise abzugleichen.

Zuerst benutze <C-p>und peoptippe ich und das gibt mir diese Ergebnisse ("erste" Übereinstimmung ist unten):

> 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_

Diese Ergebnisse sind schrecklich. Weder Dateien mit peopdarin sind da. Auch wenn ich es erweitere auf 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_

Keiner von ihnen wird aufgelistet (!)

Ich ging durch :help ctrlp-optionsund fand eine einzige Option, die die Dinge etwas verbessert:

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.

Nachdem ich dies eingestellt habe, erhalte ich die folgenden Ergebnisse 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_

Okay, das ist etwas besser, ich bekomme mindestens eine der erwarteten Dateien beim ersten Ergebnis und die andere als 9 .. Es ist immer hulptabellen-object-unit-soort.pdfnoch eine bessere Übereinstimmung als people.css.sasswenn (!)

Wenn peopleich tippe, bekomme ich endlich die 2 erwarteten Dateien als die ersten 2:

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

Wie kann ich dieses Matching verbessern? Ich weiß nicht „Fuzzy Matching“ nichts, aber es sollte nicht so unscharf, es passt alles und jeden ... In diesem Fall würde ich erwarten , Typisierung <c-P>peopzu haben app/assets/stylesheets/admin/sections/people.css.sassals entweder der 1. oder 2. Spiel.

Martin Tournoij
quelle
2
Es scheint, dass ctrlp eine benutzerdefinierte Übereinstimmungsfunktion akzeptieren kann. Es ist in der Dokumentation unter 'g:ctrlp_match_func Ein gutes Beispiel dafür ist dieses Plugin: vim.org/scripts/script.php?script_id=4884
EvergreenTree

Antworten:

4

CtrlP hat einige verschiedene Modi Ctrl-Rund Ctrl-D. Ctrl-Rverwendet Ihre Eingabe als rohen Regex, was bedeutet, dass Sie darin nur peopleexplizit Übereinstimmungen finden . Ctrl-Dstimmt nur mit dem Dateinamen überein und ignoriert den Pfad.

Ich glaube, die Standard-CtrlP-Funktionalität verbindet sich nur .*mit jedem Zeichen als Rohzeichen , daher wird ein Punkt als Punkt behandelt. Wenn Sie im Voraus wussten, dass die Datei mindestens 2 Verzeichnisse tief ist, können Sie dies tun //people.

TankorSmash
quelle