ฉันใช้นิพจน์ทั่วไปต่อไปนี้เพื่อจับคู่สตริงเอกสารภายใต้นิยามฟังก์ชัน Clojure:
\vdefn.*\n\s*\zs"([^"]|\n)*"
มีวิธีเรียกใช้gq
คำสั่งโหมดปกติ(บรรทัดรูปแบบ) ในทุกการแข่งขันของรูปแบบนี้ในไฟล์ที่กำหนดหรือไม่?
ฉันใช้นิพจน์ทั่วไปต่อไปนี้เพื่อจับคู่สตริงเอกสารภายใต้นิยามฟังก์ชัน Clojure:
\vdefn.*\n\s*\zs"([^"]|\n)*"
มีวิธีเรียกใช้gq
คำสั่งโหมดปกติ(บรรทัดรูปแบบ) ในทุกการแข่งขันของรูปแบบนี้ในไฟล์ที่กำหนดหรือไม่?
คำตอบ:
พลังของ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
//s<cr>
ทำให้ฉันอยู่ที่จุดเริ่มต้นของการแข่งขันในบรรทัดปัจจุบัน แต่//e<cr>
ปล่อยให้ฉันเมื่อสิ้นสุดการแข่งขันครั้งต่อไปไม่ใช่การแข่งขันปัจจุบัน
//s<cr>V
ปัญหาที่ดูเหมือนจะมี เมื่อฉันวิ่ง:normal V
ฉันจะเข้าสู่โหมดเส้นสายตาตามที่คาดไว้ เมื่อฉันเรียกใช้:normal //s<cr>
เคอร์เซอร์ของฉันในดินแดนแรก"
ของการแข่งขันตามที่คาดไว้ เมื่อฉันวิ่ง:normal //s<cr>V
ฉันไม่ได้รับการคัดเลือกด้วยสายตา
gn
ชิ้นคือการเลือกจากบรรทัดที่V
จะถูกเรียกไปต่อไป (ไม่ได้เป็นหนึ่งในสายเดียวกัน) การเกิดขึ้นของรูปแบบ เอกสารของ Vim ระบุว่าหากโหมดภาพทำงานอยู่การเลือกจะถูกขยายออกจากบรรทัดปัจจุบันไปจนถึงรูปแบบถัดไป สิ่งนี้ทำให้เกิดพฤติกรรมที่ไม่พึงประสงค์