ด้วยผลลัพธ์ของ grep -n ฉันจะเปิด vim ในบรรทัดนั้นได้อย่างไร (ใช้คีย์บอร์ดเท่านั้น)


9

เมื่อฉันเรียกใช้grep "keyword" -nและรับรายการผลลัพธ์ต่อไปนี้:

a/b/c:10:    keyword
a/b/c:70:    keyword
a/b/d:50:    keyword

ฉันจะเปิดไฟล์ใดไฟล์หนึ่ง (พูดถึงลำดับที่ 2 ในรายการ) ในบรรทัดที่พบได้อย่างไร

ตอนนี้ฉันเพิ่งคัดลอกผลลัพธ์โดยใช้เมาส์แล้วคัดลอกหลังจากvimนั้นเพิ่ม+ด้วยหมายเลขบรรทัดที่ฉันคัดลอก (หมายถึงฉันเขียนvim a/b/c +70โดยใช้เมาส์คัดลอกเพื่อรับชื่อไฟล์และอีกหนึ่งสำเนาเมาส์เพื่อรับหมายเลขบรรทัด [หรือฉันเพิ่งคัดลอกด้วยมือเมื่อสั้นพอ])

มีวิธีการทำด้วยแป้นพิมพ์ลัดหรือไม่?


echo a/b/c:70: keyword | awk '{print $1}' | sed 's,:$,,' | sed 's,:, +,' | xargs vim && resetคุณสามารถลองสิ่งที่ต้องการ:
Arkadiusz Drabczyk

2
นอกจากนี้หากคุณสนใจที่จะใช้ Vim ให้มีประสิทธิภาพมากขึ้นลองเข้าไปดูไซต์Vi และ Vim Stack Exchange เฉพาะ
muru

คำตอบ:


14

สองสิ่ง:

  1. grepเป็นกลุ่มมีการสนับสนุนบางอย่างสำหรับ

    หากคุณเปิด Vim และ do :grep keyword ...Vim จะเติมรายการ quickfixพร้อมกับผลลัพธ์และข้ามไปที่ไฟล์แรก จากนั้นคุณสามารถข้ามไปยังรายการ quickfix nด้วย:cc n(และคำสั่งอื่น ๆ )

  2. คุณสามารถเติมรายการ quickfix ดังกล่าวโดยใช้ grep output:

    vim -q <(grep -n keyword ...)
    

    จากนั้นใช้คำสั่งการนำทางอย่างรวดเร็วตามที่กล่าวไว้ข้างต้น

อาจจะง่ายกว่าการเล่นด้วย grep ของเอาต์พุตด้วยตนเอง

เป็นทางเลือกแทน (2) คุณสามารถบันทึกเอาต์พุตของ grep ลงในไฟล์และใช้ไฟล์นั้นแทนหากคุณคิดว่าคุณไม่จำเป็นต้องเปิด Vim หลังจาก:

grep ... | tee log
vim -q log

พยายามใช้วิธีการเดียวกันกับสถานะ git เพื่อประโยชน์ :( - vim -q <(สถานะ git | grep modified)
CIsForCookies

3
@CIsForCookies ที่จะไม่อยู่ในรูปแบบเดียวกับgrep -n( <filename>:<line>: ...) ฉันใช้ปลั๊กอินผู้ลี้ภัยสำหรับ Git แล้วมันเป็นเรื่องของ:Gstatusย้ายไปยังไฟล์ที่ต้องการและกด Enter
muru

BTW ฉันแก้ไข~ / .bashrc ของฉันgrep aliasเพื่อใช้สีเสมอและด้วยเหตุผลบางอย่างทำให้-q >()ตัวเลือกพัง...
CIsForCookies

2

คุณสามารถทำเช่นนั้นได้หากไม่มีการสนับสนุน grep อยู่แล้วตามที่ @muru ตอบ:

:cexpr system("grep -n keyword")

มันสามารถใช้กับคำสั่งอื่นgit grepตัวอย่างเช่น

นอกจากนี้คุณสามารถเปิดเอาต์พุตในบัฟเฟอร์และใช้ "cbuffer" กับมัน

ดูส่วนquickfixจากคู่มือเกี่ยวกับมัน

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