ในกลุ่มบางครั้งผมมีโอกาสที่จะเปลี่ยนที่เกิดขึ้นไม่กี่แรกของการแข่งขันบนเส้น แต่ไม่เหมือนทุกg
หากว่า เช่น:
a a a a a
ถึง
b b b a a
ฉันรู้ว่าฉันสามารถใช้งาน:s/a/b/[enter]:[up][enter]:[up][enter]
ได้ แต่มันน่าเบื่อพอสำหรับการทำซ้ำสามครั้งฉันมีบรรทัดที่มีการแทนที่มากกว่า 10 รายการ
ฉันพยายามแล้ว:
:s/a/b/3g
: เป็นกลุ่มบ่นของตัวอักษรต่อท้าย:s/a/b/3
: เปลี่ยนการเกิดขึ้นครั้งแรกในสิ่งนี้และสองบรรทัดต่อไปนี้3:s/a/b
: เหมือนก่อนหน้านี้:s/a/b/g3
: เปลี่ยนสิ่งที่เกิดขึ้นทั้งหมดนี้และสองบรรทัดถัดไป:3s/a/b
: เปลี่ยนการเกิดขึ้นครั้งแรกในบรรทัดที่ 3:/a/,3/a/s/a/b
: การเปลี่ยนแปลงที่เกิดขึ้นครั้งแรกในแต่ละบรรทัดระหว่างบรรทัดถัดไปa
และบรรทัดที่สามที่มีa
อยู่ในไฟล์ (พร้อมท์ให้ย้อนกลับหากจำเป็น):/a/,/\([^a]*a\)\{3\}/s/a/b/
: เปลี่ยนเหตุการณ์ที่เกิดขึ้นครั้งแรกในแต่ละบรรทัดระหว่างสิ่งนี้และสิ่งต่อไปด้วย 3a
วินาทีบนสิ่งนั้น
และรูปแบบการกำหนดแอดเดรสอื่น ๆ ที่หลากหลายซึ่งไม่ได้ผล ฉันต้องบอกว่าฉันได้เรียนรู้จำนวนพอสมควรเกี่ยวกับ:s
คำสั่งที่พยายามค้นหาคำตอบสำหรับปัญหานี้ แต่ฉันยังไม่ได้แก้ไข
ใครรู้วิธีการทำเช่นนี้?
(คะแนนโบนัสสำหรับช่วงที่เฉพาะเจาะจงเช่นที่สองถึงเหตุการณ์ที่สี่)
n
และ.
ถึงแม้ว่าฉันไม่ได้คิดที่จะใช้พวกเขาที่นี่ การปรับปรุงแน่นอนขอบคุณ
s/a/=something/
ควรทำเคล็ดลับ ( :help sub-replace-=
) ฉันไม่คล่องพอที่ Vim จะเขียนsomething
ออกมาทันที
:[up][enter]
สามารถแทนที่ด้วย&
ซึ่งยังไม่เหมาะ แต่อย่างน้อยก็เจ็บปวดน้อยกว่า