เมื่อใช้ grep จาก VIM จะข้ามไปยังผลลัพธ์ได้อย่างไร


32

เมื่อใช้ grep plugin เป็น VIM ฉันสามารถค้นหาไดเรกทอรีปัจจุบันเพื่อค้นหาสตริงทั้งหมดภายในชุดของไฟล์เช่นนี้

:grep Ryan *.txt

สิ่งนี้แสดงผลดังนี้:

file1.txt:3:Ryan was here
file2.txt:10:Ryan likes VIM
file3.txt:5:superuser.com is a fav of Ryan
(1 of 3): Ryan was here
Press ENTER or type command to continue

ถ้าฉันกด Enter มันจะพาฉันกลับไปที่เครื่องมือแก้ไขของฉัน สิ่งที่ฉันต้องการทำจริงๆคือสามารถเปิดไฟล์เหล่านั้นหนึ่งไฟล์แล้วข้ามไปยังตำแหน่งที่พบสตริง มีวิธีทำเช่นนี้หรือไม่? 1 of 3ส่วนหนึ่งทำให้ฉันคิดว่ามีวิธีที่จะผ่านแท็บผล แต่ผมไม่ทราบว่าคำสั่งที่มีให้ฉัน ใครสามารถทำให้กระจ่างในเรื่องนี้?

คำตอบ:


34

เมื่อคุณกด ENTER คุณควรดูบรรทัดที่ 3 ของ file1.txt เพื่อข้ามไปยังการแข่งขันต่อไปดำเนินการ:cn; :cpเพื่อข้ามไปยังการแข่งขันที่ผ่านมาดำเนินการ การดำเนินการ:copenจะเปิดหน้าต่างที่มีรายการการแข่งขัน เลื่อนเคอร์เซอร์ไปที่การแข่งขันที่ต้องการแล้วกด ENTER เพื่อข้ามไปที่การแข่งขันนั้น

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการใช้:grepให้ดู

:help grep
:help quickfix.txt

การพิมพ์:cnและ:cpการเลื่อนไปข้างหน้าและข้างหลังในรายการ quickfix อาจไม่สะดวกดังนั้นฉันจึงใช้การแมปเหล่านี้:

nmap <silent> <C-N> :cn<CR>zv
nmap <silent> <C-P> :cp<CR>zv

นอกจากนี้:grepคำสั่งไม่ใช่ปลั๊กอิน มันเป็นส่วนหนึ่งของกลุ่ม


คำตอบที่ดีขอบคุณ! BTW คุณสามารถทำการค้นหาแบบเรียกซ้ำผ่านโฟลเดอร์ที่มี grep vim ได้หรือไม่?
Marplesoft

ตราบใดที่คุณกำลังทำงานบนระบบ Unix คุณสามารถเพิ่มอาร์กิวเมนต์ใด ๆ ให้กับ Vim :grepที่คุณต้องการเพิ่มไปยังgrepคำสั่งที่เรียกใช้จากเชลล์ ดังนั้นคุณสามารถทำการค้นหา recursive ผ่าน txt :grep -R --include=*.txt Ryan .ไฟล์ทั้งหมดในและด้านล่างไดเรกทอรีปัจจุบันด้วย นอกจากนี้คุณยังสามารถดำเนินการค้นหา recursive ใช้เป็นกลุ่มของ:vimgrepคำสั่ง :grepแต่ข้อโต้แย้งที่แตกต่างกันและผมไม่ค่อยใช้เพราะมันจะช้ากว่า
garyjohn
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.