ใช้คำสั่งโหมดปกติเพื่อจับคู่ regex


10

ฉันใช้นิพจน์ทั่วไปต่อไปนี้เพื่อจับคู่สตริงเอกสารภายใต้นิยามฟังก์ชัน Clojure:

\vdefn.*\n\s*\zs"([^"]|\n)*"

มีวิธีเรียกใช้gqคำสั่งโหมดปกติ(บรรทัดรูปแบบ) ในทุกการแข่งขันของรูปแบบนี้ในไฟล์ที่กำหนดหรือไม่?

คำตอบ:


10

พลังของg:

:g/\vdefn.*\n\s*\zs"([^"]|\n)*"/normal gngq

ส่วนระหว่าง/s ค่อนข้างอธิบายได้ด้วยตนเองเนื่องจากเป็น regex จากคำถามเดิมของคุณ

normal gngqในตอนท้ายค่อนข้างน่าสนใจ gnจะเลือกคู่ถัดไปของนิพจน์ทั่วไปและgqแน่นอนจัดรูปแบบตัวเลือกนี้ (ตามที่คุณพูดถึงในคำถามของคุณ)

:gเป็นส่วนที่ดีจริงๆ นี่คือความเห็นของฉันหนึ่งในคุณสมบัติที่มีประโยชน์มากที่สุดของ Vim gคำสั่งอดีตใช้ regex และคำสั่ง Ex และมันรันคำสั่งในทุกบรรทัดตรง regex หากคุณยังไม่ได้เรียนรู้เกี่ยวกับเรื่อง:gนี้ฉันขอแนะนำให้ทำเช่นนั้นเพราะจะเป็นการเพิ่มประสิทธิภาพของคุณอย่างมากมาย ทรัพยากรบางอย่างเป็นของ Vim :help :gหรือPower of gใน Vim wiki


gnชิ้นคือการเลือกจากบรรทัดที่Vจะถูกเรียกไปต่อไป (ไม่ได้เป็นหนึ่งในสายเดียวกัน) การเกิดขึ้นของรูปแบบ เอกสารของ Vim ระบุว่าหากโหมดภาพทำงานอยู่การเลือกจะถูกขยายออกจากบรรทัดปัจจุบันไปจนถึงรูปแบบถัดไป สิ่งนี้ทำให้เกิดพฤติกรรมที่ไม่พึงประสงค์

@merb อ๊ะไม่ทราบว่า แก้ไข
Doorknob

การเลือกจะยังคงอยู่จากบรรทัดของการแข่งขันไปยังการแข่งขันถัดไป การก้าวผ่านคำสั่งโหมดปกติด้วยตนเองแสดงให้เห็นว่า//s<cr>ทำให้ฉันอยู่ที่จุดเริ่มต้นของการแข่งขันในบรรทัดปัจจุบัน แต่//e<cr>ปล่อยให้ฉันเมื่อสิ้นสุดการแข่งขันครั้งต่อไปไม่ใช่การแข่งขันปัจจุบัน

1
//s<cr>Vปัญหาที่ดูเหมือนจะมี เมื่อฉันวิ่ง:normal Vฉันจะเข้าสู่โหมดเส้นสายตาตามที่คาดไว้ เมื่อฉันเรียกใช้:normal //s<cr>เคอร์เซอร์ของฉันในดินแดนแรก"ของการแข่งขันตามที่คาดไว้ เมื่อฉันวิ่ง:normal //s<cr>Vฉันไม่ได้รับการคัดเลือกด้วยสายตา

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