ฉันจะรับปลั๊กอิน Vim Ctrlp เพื่อข้ามโฟลเดอร์เฉพาะในโครงการเดียวได้ไหม


17

ปลั๊กอินเป็นกลุ่ม Ctrlpมีวิธีที่จะไม่สนใจทั่วโลกชื่อโฟลเดอร์บางอย่าง เช่น:

let g:ctrlp_custom_ignore = '\v[\/]\.(git|hg|svn)$'

อย่างไรก็ตามฉันมีกฎการเพิกเฉยที่เฉพาะเจาะจงสำหรับโครงการหนึ่ง ฉันต้องการ.gitignoreไฟล์มากกว่านี้

มีวิธีเพิกเฉยโฟลเดอร์เฉพาะในโครงการเฉพาะโดยไม่แก้ไขการกำหนดค่าทั่วโลกของฉันหรือไม่?


คุณลองใช้ตัวติดตามปัญหาของปลั๊กอินหรือไม่
romainl

คำตอบ:


20

ใช้คำสั่งรายการที่กำหนดเอง

Ctrlp ช่วยให้คุณบอกได้ว่าคำสั่งใดที่จะใช้เพื่อรับรายการไฟล์ในโฟลเดอร์ ดังนั้นหากคุณต้องการยกเว้นสิ่งที่มีชื่อbeets.txtคุณสามารถทำได้:

let g:ctrlp_user_command = 'find %s -type f | grep -v "beets.txt"'

นั่นคือทั่วโลก แต่เริ่มชี้ไปที่คำตอบ: ระบุคำสั่งเชลล์ของคุณเอง

ยิ่งไปกว่านั้น Ctrlp ยังช่วยให้คุณสามารถระบุคำสั่งเชลล์ได้หลายคำด้วยเครื่องหมาย "ถ้าคุณเห็นเครื่องหมายนี้ในไดเรกทอรีรากให้ใช้คำสั่งนี้"

ฉันพบสิ่งนี้ใน:help ctrlpและแก้ไขเล็กน้อยตามความคิดเห็นของผู้เขียนเกี่ยวกับปัญหา

let g:ctrlp_user_command = {
  \ 'types': {
    \ 1: ['.git', 'cd %s && git ls-files --cached --exclude-standard --others'],
    \ 2: ['.hg', 'hg --cwd %s locate -I .'],
    \ },
  \ 'fallback': 'find %s -type f'
  \ }

ซึ่งหมายความว่า: "หากคุณเห็น.gitในโฟลเดอร์ให้ใช้git ls-files...มิฉะนั้นถ้าคุณเห็น.hgใช้hg --cwd...หรือใช้งานปกติfind"

ดังนั้นจะไม่สนใจโฟลเดอร์เฉพาะในโครงการหนึ่งประดิษฐ์คำสั่งที่จะไม่สนใจโฟลเดอร์นั้นแล้ววางเครื่องหมายที่ไม่ซ้ำกันในโครงการที่จะปล่อยให้ Ctrlp ที่คุณต้องการที่จะใช้คำสั่งพิเศษของคุณที่นี่

(ในกรณีของฉันฉันต้องการเพิกเฉยต่อไฟล์ที่อยู่ใน.gitignoreนั้นดังนั้นgit ls-filesคำสั่งด้านบนจึงเหมาะกับฉัน)


เยี่ยมมากขอบคุณมากสำหรับคำตอบนี้
เดนิส

git -C% s ไฟล์ - แคช - ยกเว้นมาตรฐาน - ผู้อื่นควรทำงานกับคอมไพล์
Arunprasad Rajkumar

11

หากคุณใช้แบ็กเอนด์ Silver Searcher สำหรับ CtrlP (ซึ่งเร็วกว่า) เพียงเพิ่ม.agignoreไฟล์ไปยังไดเรกทอรีโครงการของคุณในรูปแบบเดียวกับ.gitignore:

.git/
.hg/
.svn/

หรือเก็บ~/.agignoreไฟล์โกลบอล

เพิ่ม Silver Searcher เป็นแบ็กเอนด์ด้วยสิ่งนี้ในของคุณ .vimrc

let g:ctrlp_user_command = 'ag %s -l --nocolor --hidden -g ""'

1
ขอขอบคุณที่โพสต์สิ่งนี้ ในการเพิ่มจุดข้อมูลอื่น: if executable("ag") let g:ctrlp_user_command = 'ag %s -l --nocolor --depth 8 -g ""' endif ผมดัดแปลงมานี้ ขีดจำกัดความลึกมีประโยชน์สำหรับถ้าฉันกด ctrl-p โดยไม่ได้ตั้งใจขณะแก้ไขไฟล์ในโฟลเดอร์บ้านของฉัน ฉันพบว่าการตั้งค่าสถานะที่ซ่อนอยู่จะรวมไฟล์ใน. git /
Eric Hu

6

ระบุไฟล์ที่ไม่ได้ติดตามอย่างตั้งใจในไฟล์

เพื่อแก้ปัญหานี้ด้วยไฟล์เช่น.gitignore(ตามในโซลูชัน grep ของนาธาน) ฉันสร้างไฟล์ชื่อ.ctrlpignoreและวางรูปแบบที่ควรละเว้นโดยคั่นด้วยบรรทัด:

node_modules/
\.log$
...

และการกำหนดค่า ctrlp ของฉัน:

let g:ctrlp_user_command = 'find %s -type f | grep -v "`cat .ctrlpignore`"'

บางที.gitignoreตัวเองสามารถใช้เพื่อละเว้นไฟล์ใน ctrlp โดยไม่จำเป็นต้องสร้างไฟล์ใหม่เพื่อทำสิ่งเดียวกัน


ฉันเพิ่มส่วนย่อยนี้ แต่แบ่งลักษณะการทำงาน ctrlp ส่วนเกินถ้าฉันพิมพ์ orderscontroller พบไฟล์ _spec เท่านั้นไม่มีไฟล์ orders_controller.rb จริง
jedi

1

ดังที่Wagner Andradeกล่าวว่าการใช้งานแยก.ctrlpignoreเป็นความคิดที่ดี

การตั้งค่าเสียงเรียกเข้าที่แข็งแกร่งและสะดวกยิ่งขึ้นเป็นดังนี้:

let g:ctrlp_user_command = 'cd %s;
  \ commonfilter="\.(jpg|bmp|png|jar|7z|zip|tar|gz|tgz|bz)$";
  \ if [ ! -r ".ctrlpignore" ]; then
  \   find . -type f | grep -Evi "$commonfilter";
  \ else
  \   find . -type f | grep -vF "$(cat .ctrlpignore)" | grep -Evi "$commonfilter";
  \ fi'

.ctrlpignoreสามารถใส่ใน dir ใด ๆ ที่จะได้รับการยอมรับว่าเป็น root dir โดย ctrlp นี่คือตัวอย่างทุกบรรทัดเริ่มต้นด้วย./

vim ~/.ctrlpignore

./Desktop
./R
./.vim
./.local/lib
.....

บันทึก:

  1. grep -Fจะตีความรูปแบบเช่น './.tmp' เป็นสตริงคงที่หากคุณไม่ต้องการกรอง './ptmp' ของคุณ ยังมีข้อบกพร่องเล็กน้อยอยู่บ้าง: './.tmp' จะกรอง './.tmp2' ด้วย ลืมฉันไม่ชอบ\.

  2. g:ctrlp_custom_ignoreจะถูกละเว้นหากg:ctrlp_user_commandตั้งไว้ สิ่งเหล่านั้นสามารถทำได้ในรูปแบบที่ซับซ้อนมากขึ้นg:ctrlp_user_command

  3. white-list แทน black-list ก็เป็นไปได้เช่นกัน สะดวกยิ่งขึ้นหากติดตั้งในสคริปต์แบบแยกต่างหาก

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