Comment puis-je faire ctrlp faire une meilleure correspondance des noms de fichiers?

10

Mon projet a ces fichiers:

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

Comme j'en avais assez de taper :e app/assets/stylesheets/admin/sections/people.css.sass, je pensais que ctrlp pourrait être un bon moyen d'économiser de la frappe. Cependant, je n'arrive pas à faire correspondre les fichiers de ce que je considère être une manière saine.

Tout d'abord, j'utilise <C-p>et tape peop, et cela me donne ces résultats (la "première" correspondance est en bas):

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

Ces résultats sont horribles. Aucun des fichiers avec peopen eux n'est là. Même lorsque je l'étends 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_

Il ne répertorie aucun d'eux (!)

J'ai parcouru :help ctrlp-optionset trouvé une seule option qui améliore quelque peu les choses:

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.

Après avoir défini cela, j'obtiens les résultats suivants 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_

D'accord, c'est donc un peu mieux, j'obtiens au moins un des fichiers attendus au premier résultat, et l'autre comme le 9ème. Il considère toujours hulptabellen-object-unit-soort.pdfêtre un meilleur match que people.css.sasssi (!)

Taper peopleme donne enfin les 2 fichiers attendus comme les 2 premiers:

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

Comment puis-je améliorer cette correspondance? Cela ne me dérange pas de "correspondance floue", mais cela ne devrait pas être si flou qu'il correspond à tout et à tout le monde ... Dans ce cas, je m'attendrais à ce que la frappe <c-P>peopait app/assets/stylesheets/admin/sections/people.css.sasscomme première ou deuxième correspondance.

Martin Tournoij
la source
2
Il semble que ctrlp puisse accepter une fonction de correspondance personnalisée. C'est dans la documentation sous 'g:ctrlp_match_func Un bon exemple de ceci en cours d'utilisation est ce plugin: vim.org/scripts/script.php?script_id=4884
EvergreenTree

Réponses:

7

Une question similaire vient d'être posée sur le redim Vim ici . J'ai commencé à utiliser ctrlp-cmatcher moi - même il y a un certain temps, ce que je trouve beaucoup plus intelligent pour faire correspondre le bon fichier. Notez qu'il nécessite un composant compilé. Sinon, vous devrez essayer certaines des approches de l' article .

Collin Peters
la source
4

CtrlP a quelques modes différents, Ctrl-Ret Ctrl-D. Ctrl-Rutilise votre entrée comme Regex brut, ce qui signifie que vous ne trouverez peopleexplicitement que des correspondances avec . Ctrl-Dne correspond qu'au nom de fichier, en ignorant le chemin.

Je crois que la fonctionnalité CtrlP par défaut se joint .*à chaque caractère en tant que caractère brut, donc un point est traité comme un point. Si vous saviez à l'avance que le fichier avait au moins 2 répertoires, vous pourriez le faire //people.

TankorSmash
la source