¿Cómo puedo hacer que ctrlp haga una mejor coincidencia de nombre de archivo?

10

Mi proyecto tiene estos archivos:

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

Cuando me cansé de escribir :e app/assets/stylesheets/admin/sections/people.css.sass, pensé que ctrlp podría ser una buena manera de guardar algo de escritura. Sin embargo, no puedo hacer que coincida con los archivos en lo que considero una forma sensata.

Primero, uso <C-p>y escribo peop, y eso me da estos resultados (la "primera" coincidencia está en la parte inferior):

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

Estos resultados son horribles. Tampoco hay archivos con peopellos. Incluso cuando lo expando a 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_

No enumera ninguno de ellos (!)

Revisé :help ctrlp-optionsy encontré una única opción que mejora un poco las cosas:

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.

Después de configurar esto, obtengo los siguientes resultados en 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_

Bien, así que esto es un poco mejor, obtengo al menos uno de los archivos esperados en el primer resultado, y el otro como el noveno. Todavía considera hulptabellen-object-unit-soort.pdfque es una mejor combinación que people.css.sassaunque (!)

Escribir peoplefinalmente me da los 2 archivos esperados como los primeros 2:

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

¿Cómo puedo mejorar este emparejamiento? No me importa "coincidencia aproximada", pero no debería ser tan difusa que coincide con todo y todos ... En este caso, yo esperaría a escribir <c-P>peoppara tener app/assets/stylesheets/admin/sections/people.css.sassya sea la primera o segunda partido.

Martin Tournoij
fuente
2
Parece que ctrlp puede aceptar una función de coincidencia personalizada. Está en la documentación bajo 'g:ctrlp_match_func Un buen ejemplo de esto en uso es este complemento: vim.org/scripts/script.php?script_id=4884
EvergreenTree

Respuestas:

7

Una pregunta similar acaba de hacerse en el Vim reddit aquí . Comencé a usar ctrlp-cmatcher yo mismo hace un tiempo, lo que me parece mucho más inteligente para que coincida con el archivo correcto. Tenga en cuenta que requiere un componente compilado. De lo contrario, deberá probar algunos de los enfoques del artículo .

Collin Peters
fuente
4

CtrlP tiene algunos modos diferentes, Ctrl-Ry Ctrl-D. Ctrl-Rusa tu entrada como Regex sin procesar, lo que significa que solo encontrarás coincidencias peopleexplícitamente en ella. Ctrl-Dsolo coincide con el nombre del archivo, ignorando la ruta.

Creo que la funcionalidad predeterminada CtrlP se está uniendo .*a cada carácter como un carácter sin formato , por lo que un punto se trata como un punto. Si sabía de antemano que el archivo tenía al menos 2 directorios de profundidad, podría hacerlo //people.

TankorSmash
fuente