Bagaimana saya bisa membuat ctrlp melakukan pencocokan nama file yang lebih baik?

10

Proyek saya memiliki file-file ini:

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

Ketika saya bosan mengetik :e app/assets/stylesheets/admin/sections/people.css.sass, saya pikir ctrlp mungkin cara yang baik untuk menyimpan beberapa pengetikan. Namun, saya tidak bisa mendapatkannya untuk mencocokkan file dengan apa yang saya anggap sebagai cara yang waras.

Pertama, saya menggunakan <C-p>dan mengetik peop, dan itu memberi saya hasil ini (kecocokan "pertama" ada di bagian bawah):

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

Hasil ini mengerikan. Tidak ada file peopdi dalamnya. Bahkan ketika saya mengembangkannya ke 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_

Itu tidak mencantumkan salah satu dari mereka (!)

Saya melewati :help ctrlp-options, dan menemukan satu opsi yang agak memperbaiki keadaan:

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.

Setelah mengatur ini, saya mendapatkan hasil sebagai berikut 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_

Oke, jadi ini sedikit lebih baik, saya mendapatkan setidaknya satu file yang diharapkan pada hasil pertama, dan yang lainnya sebagai yang ke-9. Ini masih dianggap hulptabellen-object-unit-soort.pdfsebagai pertandingan yang lebih baik daripada people.css.sass(!)

Mengetik peopleakhirnya memberi saya 2 file yang diharapkan sebagai 2 yang pertama:

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

Bagaimana saya bisa menjadikan pencocokan ini lebih baik? Saya tidak keberatan "fuzzy matching", tetapi seharusnya tidak begitu fuzzy cocok dengan semua dan semua orang ... Dalam hal ini, saya berharap mengetik <c-P>peopmemiliki app/assets/stylesheets/admin/sections/people.css.sasssebagai pertandingan 1 atau 2.

Martin Tournoij
sumber
2
Tampaknya ctrlp dapat menerima fungsi pencocokan khusus. Ada dalam dokumentasi di bawah 'g:ctrlp_match_func . Contoh yang baik dari ini yang digunakan adalah plugin ini: vim.org/scripts/script.php?script_id=4884
EvergreenTree

Jawaban:

7

Pertanyaan serupa baru saja ditanyakan pada reddit Vim di sini . Saya mulai menggunakan ctrlp-cmatcher sendiri beberapa waktu lalu yang saya temukan jauh lebih pintar dalam mencocokkan file yang tepat. Perhatikan bahwa itu memang membutuhkan komponen yang dikompilasi. Kalau tidak, Anda harus mencoba beberapa pendekatan dalam artikel .

Collin Peters
sumber
4

CtrlP memiliki beberapa mode berbeda, Ctrl-Rdan Ctrl-D. Ctrl-Rmenggunakan input Anda sebagai Regex mentah, artinya Anda hanya akan menemukan kecocokan peopledengannya secara eksplisit. Ctrl-Dhanya cocok dengan nama file, mengabaikan jalur.

Saya percaya fungsionalitas CtrlP default hanya bergabung .*ke setiap karakter sebagai karakter mentah, jadi periode diperlakukan sebagai titik. Jika Anda tahu sebelumnya file itu setidaknya memiliki 2 direktori, Anda bisa melakukannya //people.

TankorSmash
sumber