หมายเหตุ: ฉันสมมติว่าคุณกำลังใช้การa
ลงทะเบียนทั้งหมดของคำตอบนี้ แต่คุณสามารถใช้การลงทะเบียนใด ๆ
Note2: <1b>
คือEsc; คุณสามารถแทรกนี้กับแล้วCtrl+v Escมันอาจปรากฏขึ้นเป็น^[
(ขึ้นอยู่กับการdisplay
ตั้งค่า)
มันไม่ใช่แผนที่ จึงทำให้รู้สึกว่า:map
ไม่ทำงาน มันถูกบันทึกไว้ในการลงทะเบียนและคุณสามารถดูและแก้ไขเหมือนการลงทะเบียนใด ๆ
ทุกสิ่งที่qทำก็คือ"ล้างลงทะเบียนนี้และผนวกการกดแป้นพิมพ์ใด ๆ กับมัน"และสิ่งที่@จะเป็น"ประเมินผลการลงทะเบียนเป็นคำสั่ง"
ไม่มีอะไรที่ "แตกต่าง" เกี่ยวกับแมโครคุณสามารถเรียกใช้การลงทะเบียนใด ๆ เป็นแมโครได้
หากต้องการดูเพียงใช้:
:echo @a
เช่นเดียวกับการลงทะเบียนใด ๆ
คุณยังสามารถใช้:registers
เพื่อดูการลงทะเบียนทั้งหมด
หากต้องการแก้ไขคุณสามารถทำได้หลายสิ่ง:
วิธีที่ง่ายที่สุดที่คุณจะกำหนดให้เป็น@a
เช่น:
:let @a='iasd<1b>'
การดำเนินการนี้จะเริ่มโหมดแทรก ( i
) แทรกasd
และหลบหนีกลับสู่โหมดปกติ
สิ่งนี้ไม่เป็นประโยชน์สำหรับการแก้ไขอย่างกว้างขวาง คุณสามารถใช้ฟังก์ชั่น (เช่น. substitute()
) หรืออาจจะต่อท้ายบางสิ่ง ( :let @a=@a . 'more'
) แต่การเปลี่ยนบางอย่างที่อยู่ตรงกลางนั้นไม่ใช่เรื่องง่าย
ฉันพบว่าวิธีที่ดีที่สุดสำหรับสิ่งนี้คือการเริ่มบัฟเฟอร์ใหม่ด้วย:split
หรือ:tabnew
และแก้ไขการลงทะเบียนโดยการใส่ลงไปที่นั่นแก้ไขจากนั้นคัดลอกกลับ
คุณสามารถใช้"apซึ่งจะแทรกข้อความในบัฟเฟอร์ (ที่a
ลงทะเบียนของคุณ):
iThis is A<1b>
ตอนนี้ฉันสามารถเปลี่ยนบรรทัดเป็นบางที:
iThis is an edited macro<1b>
จากนั้นฉัน^v$"ayจะดึง (คัดลอก) บรรทัดนี้ไปยังการa
ลงทะเบียน:
- ^ สำหรับการเริ่มต้นของบรรทัด
- v สำหรับโหมดภาพ
- $ สำหรับจุดสิ้นสุดของบรรทัด
- "ay ดึงส่วนที่เลือกเพื่อลงทะเบียน
a
^"ay$หากคุณต้องการคุณสามารถทำเช่นนี้ได้โดยไม่ต้องใช้โหมดภาพกับ
ตอนนี้คุณสามารถใช้@aราวกับว่านี่คือสิ่งที่คุณบันทึกไว้ในตอนแรก
คุณยังสามารถใช้yyและจากนั้น@"ซึ่งเร็วขึ้นเล็กน้อย สิ่งนี้จะคัดลอกบรรทัดใหม่ที่ต่อท้ายแม้ว่าและอาจทำให้เกิดผลข้างเคียง ... อีกวิธีหนึ่งในการทำให้สิ่งนี้เร็วขึ้นคือการใช้แมโคร :-)
Enter
เมื่อสิ้นสุดการบันทึกของคุณ ในหลายกรณีสิ่งนี้อาจไม่เป็นอันตราย แต่ในสถานการณ์ที่คุณสร้างตำแหน่งเคอร์เซอร์อย่างระมัดระวังในตอนท้ายของการบันทึกอาจส่งผลกระทบต่อความสามารถในการทำซ้ำ