ฉันจะทำให้ 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 มันยังคงเป็น conciders hulptabellen-object-unit-soort.pdfที่จะจับคู่ที่ดีกว่าpeople.css.sass(!)

peopleในที่สุดการพิมพ์ให้ฉันกับไฟล์ที่คาดหวัง 2 ไฟล์เป็น 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

คำถามที่คล้ายกันก็แค่ถามเกี่ยวกับการ Reddit เป็นกลุ่มที่นี่ ฉันเริ่มใช้ctrlp-cmatcher ตัวเองค่อนข้างนานมาแล้วซึ่งฉันคิดว่ามันฉลาดกว่าที่จะจับคู่ไฟล์ที่เหมาะสม โปรดทราบว่ามันไม่จำเป็นต้องมีองค์ประกอบที่รวบรวม มิฉะนั้นคุณจะต้องลองบางส่วนของวิธีการในบทความ


4

CtrlP มีโหมดที่แตกต่างกันไม่กี่และCtrl-R ใช้ข้อมูลที่คุณป้อนเป็นข้อมูลดิบ Regex ซึ่งหมายความว่าคุณจะพบเฉพาะข้อมูลที่ตรงกันเท่านั้น จับคู่เฉพาะชื่อไฟล์โดยไม่สนใจเส้นทางCtrl-DCtrl-RpeopleCtrl-D

ฉันเชื่อว่าฟังก์ชั่นเริ่มต้นของ CtrlP เป็นเพียงการเข้าร่วม.*กับตัวละครทุกตัวในฐานะตัวละครดิบดังนั้นช่วงเวลาจึงถือเป็นช่วงเวลา ถ้าคุณรู้ล่วงหน้าไฟล์ได้อย่างน้อย 2 //peopleไดเรกทอรีลึกที่คุณสามารถทำได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.