วนซ้ำ grep ในไดเรกทอรีด้วย helm และ / หรือ projectile?


11

grep แบบเรียกซ้ำในไดเรกทอรีควรเป็นสิ่งที่ง่ายที่สุด แต่ฉันยังไม่พบสูตรเพื่อให้มันใช้งานได้ ฉันเล่นปาหี่ระหว่างคำสั่งต่อไปนี้และไม่แน่ใจว่ามีฟังก์ชันใดที่ฝังอยู่ภายใน:

  • helm-find-files: ปัญหาคือสิ่งนี้แย่มากในการค้นหาไดเรกทอรีซ้ำ
  • projectile-find-dir: นี่มันยอดเยี่ยมมากในการค้นหา dir! อย่างไรก็ตามแม้จะใช้ helm complete คุณก็ไม่ได้อยู่ในโหมด helm ดังนั้นC-u C-sคำสั่งจะไม่ทำงานที่นี่
  • helm-find: เรียกซ้ำได้อย่างถูกต้อง แต่กำหนดเป้าหมายไฟล์ไม่ใช่ไดเรกทอรี
  • helm-projectile-find-dirดูเหมือนจะเป็นสิ่งที่ฉันต้องการ

1
ฉันรัก AG และ ag โหมดสำหรับที่เต้นเงินค้นหา grep ด้วยมือข้างหนึ่งผูกติดอยู่กับด้านหลังของ :-) ไม่ทราบวิธีการที่จะทำให้มันกระสุนปืนตระหนักถึงแม้ว่า
ทอมเรกเนอร์

Mx projectile-ag อาจจะ? (« projectile-prefix » A หรือ« projectile-prefix » a - ขึ้นอยู่กับรุ่น)
Mekk

2
โปสเตอร์ต้นฉบับ: ฉันไม่เข้าใจว่าคุณมีจุดประสงค์อะไร projectile-ack และ projectile-ag เป็นทั้ง greps แบบเรียกซ้ำภายในโปรเจค projectile (ทั้งหมด) พวกเขาไม่ใช่สิ่งที่คุณต้องการ?
Mekk

คำตอบ:


10

คุณมีสองวิธี:

  • ใช้helm-projectile-grep/ack/ag: คุณสามารถค้นหาทุกสิ่งที่เริ่มต้นจากรูทโปรเจ็กต์ ในภายหลังหากคุณต้องการบันทึกผลลัพธ์การค้นหาให้กดF3หรือกดTABเพื่อสลับไปยังเมนูการกระทำและเลือกการกระทำที่ 3 ในการนำทางhgrepบัฟเฟอร์:

    • C-<down>: ไปที่นัดต่อไปและเปิดการแข่งขัน
    • C-<up>: ไปที่การแข่งขันก่อนหน้าและเปิดการแข่งขัน
    • M-<down>: ไปที่นัดต่อไปโดยไม่ต้องเปิดการแข่งขัน
    • M-<up>: ไปที่นัดต่อไปโดยไม่ต้องเปิดการแข่งขัน
    • C-o: เปิดการแข่งขันปัจจุบันในหน้าต่างอื่น
    • RET: เปิดการแข่งขันปัจจุบันในหน้าต่างปัจจุบัน
  • ใช้helm-projectile-find-dir(จดhelmคำนำหน้าคุณต้องใช้คำสั่ง Helm ที่เหมาะสมจากhelm-projectileแพ็คเกจโดยทั่วไป): แคบลงไปยังไดเรกทอรีที่ต้องการแล้วกดC-u C-sเพื่อค้นหาซ้ำในไดเรกทอรีนั้นซ้ำ หากคุณไม่กดC-uมันก็แค่ค้นหาในไดเรกทอรีนั้นโดยไม่ต้องไปลึก

หวังว่าจะช่วย


1
คุณเพิ่งเปิดใช้งานฉันเพื่อปลดล็อกกำไรจำนวนมากโดยแจ้งให้ฉันทราบถึงการกระทำ "TAB" นี้ภายในผลการค้นหาแบบโปรเจคไทล์ ขอบคุณ. ขอบคุณครับ
เผยแพร่

5

grep แบบเรียกซ้ำในไดเรกทอรีควรเป็นสิ่งที่ง่ายที่สุด

สำหรับ grep recursive ง่ายภายในไดเรกทอรีปัจจุบันเพียง: M-x grepแล้วภายใน minibuffer Run grep (like this): grep -nHr "pattern"นี้: (สังเกตเห็นแฟล็ก -r)

คุณอาจจะสนใจโดยrgrep:

rgrep เป็นฟังก์ชั่น Lisp ที่คอมไพล์โดยอัตโนมัติใน
`grep.el '

(rgrep REGEXP และยืนยัน DIR ไฟล์เสริม)

grep ซ้ำแล้วซ้ำอีกสำหรับ REGEXP ในไฟล์ในไดเรกทอรีต้นไม้รากที่ DIR การค้นหาถูก จำกัด เฉพาะชื่อไฟล์ที่ตรงกับรูปแบบของเชลล์ FILES ไฟล์อาจใช้ตัวย่อที่กำหนดไว้ในgrep-files-aliases', e.g. enteringch 'เทียบเท่ากับ `*. [ch]'


ที่ไม่ได้เชื่อมโยงกับกระสุนปืนซึ่งมันควรจะอยู่ในบริบท
RichieHH

2

นอกเหนือจากเครื่องมือที่กล่าวถึงในคำตอบอื่น ๆ แล้วฟังก์ชั่นเยี่ยมอีกอย่างคือการfind-grep-diredสร้างdiredบัฟเฟอร์ที่มีไฟล์ทั้งหมดที่ตรงกับรูปแบบ grep ซ้ำ

มันทำงานfind . \( -type f -exec grep -q -e my-regular-expression \{\} \; \) -lsและแสดงผลลัพธ์ในdiredบัฟเฟอร์


1

helm-do-grepคุณอาจจะลอง เรียกมันว่าด้วยการหาเรื่องคำนำหน้าจะช่วยให้คุณ grep recursive ตามที่อธิบายไว้ในHelm วิกิพีเดีย

หากคุณต้องการเรียกใช้ helm-do-grep แบบเรียกซ้ำโดยไม่เริ่ม helm-find-files ให้ทำ:

Cu helm-command-prefix-key Mg s

หมายเหตุ: หากคุณลืมกด Cu ก่อน Mg คุณสามารถทำได้หลังจากเลือกไฟล์

คุณจะได้รับแจ้งให้เลือกประเภทไฟล์ที่จะค้นหา: ใช้ไวยากรณ์ wilcard เช่น * .el (ค้นหาในไฟล์. el เท่านั้น)

โดยค่าเริ่มต้นนามสกุลของไฟล์ที่จุดจะใช้เมื่อเคอร์เซอร์อยู่ในชื่อไฟล์ หากเคอร์เซอร์อยู่ที่รูทของไดเรกทอรีนามสกุลไฟล์ทั้งหมดที่พบในไดเรกทอรีและไม่จับคู่ไฟล์ grep-find-ละเว้น - จะถูกแทรกลงในพรอมต์

ลองทำเช่นนั้น:

C-u helm-command-prefix-key M-g s


0

helm-projectile-find-dirน่าจะเป็นฟังก์ชั่นที่เหมาะสม คุณสามารถ

  1. ค้นหาไดเรกทอรีเช่น projectile-find-dir
  2. แต่จากนั้นคุณเสร็จสิ้นในโหมด Helm ซึ่งคุณสามารถเรียกใช้C-u C-sการค้นหาแบบเรียกซ้ำตามต้องการ

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