บันทึกการกระทำล่าสุด (.) ในแมโคร


9

ใช้ Case

ฉันอยู่ในโหมดปกติ ฉันไม่ได้คิดอย่างชัดเจนเกี่ยวกับการบันทึกแมโคร แต่ฉันเปลี่ยนคำสั่งเดียว ตอนนี้ฉันสามารถทำซ้ำการกระทำนี้โดยใช้จุด

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

สิ่งหลังคือสิ่งที่ฉันต้องการทำ แต่วิธีที่ง่ายที่สุดที่ฉันสามารถทำได้ไม่ใช่เรื่องง่าย - เลิกทำการเปลี่ยนแปลงเริ่มบันทึกแมโครและพิมพ์คำสั่งอีกครั้งเพื่อทำการเปลี่ยนแปลงที่ต้องการและหยุดการบันทึกแมโคร

สิ่งที่ฉันได้พยายามมาแล้ว:

การบันทึกจุดในมาโครไม่ทำงานเนื่องจากบันทึกจุดและไม่ใช่การเปลี่ยนแปลงจุดที่ดำเนินการ (ตัวอย่างเช่นสมมติว่าคำสั่งที่เก็บไว้ในจุดคือd5wถ้าคุณเริ่มบันทึกแมโครและดำเนินการผ่านคาดว่ามันจะลบ 5 คำทุกครั้งที่คุณเรียกใช้แมโครจากนั้นจะไม่เกิดขึ้นในครั้งถัดไปที่คุณเรียกใช้ แมโครมันจะทำจุดและไม่ใช่คำสั่งd5wซึ่งหมายความว่าถ้าคุณทำการเปลี่ยนแปลงอื่น ๆ หลังจากบันทึกแมโคร - พูดว่าลบคำ 3 คำที่ใช้d3wและเป็นการเปลี่ยนแปลงครั้งสุดท้ายที่คุณทำแล้วเมื่อคุณเรียกใช้แมโครมันจะลบ 3 คำศัพท์และไม่ใช่ 5 เพราะมันกำลังทำงานอยู่.)


ฉันกำลังพยายามเข้าใจทั้งสิ่งที่คุณต้องการทำและทำไมคุณไม่ทำอะไรก็ตามที่มีมาโคร

1
@DrEval OP รู้ตัวหลังจากดำเนินการคำสั่งโหมดปกติที่ควรบันทึกไว้ในแมโครและไม่ต้องการพิมพ์อีกครั้งในขณะที่บันทึกแมโคร
Rich

คำตอบ:


2

เสียงเรียกเข้าไม่ได้เก็บประวัติคำสั่งโหมดปกติของคุณ หากคุณต้องการเก็บประวัติประวัติโหมดปกติของคุณคุณสามารถใช้สิ่งต่อไปนี้เพื่อบันทึกไฟล์ลงในไฟล์: https://vi.stackexchange.com/a/587/13848

คำสั่งโหมดปกติมักจะสั้นดังนั้นผู้คนเพียงพิมพ์มันในโหมดปกติและไม่พยายามสร้างมาโคร อย่างไรก็ตามหากคุณต้องการสร้างแมโครจากคำสั่งโหมดปกติคุณสามารถแปลงเป็นExคำสั่งโหมดแล้วบันทึกลงในแมโครตามที่ @wmmso ชี้ไป คุณสามารถทำได้โดยใช้normคำสั่ง ดังนั้นหากคุณต้องการที่จะลบ 2 คำเริ่มต้นที่ตำแหน่งเคอร์เซอร์ปัจจุบันและใช้คำสั่งโหมดปกติในการใช้งานโหมดEx :norm d2w(Ref: http://vimdoc.sourceforge.net/htmldoc/various.html#:norm , ดำเนินการคำสั่งปกติในช่วง )

การใช้Exคำสั่งโหมดดีกว่าถ้ามันเป็นคำสั่งที่ซับซ้อนเนื่องจากมันช่วยให้คุณพิมพ์คำสั่งแบบเต็มในบัฟเฟอร์ตรวจสอบให้แน่ใจว่าถูกต้องจริงและยังบันทึกไว้ในประวัติบรรทัดคำสั่ง

ตอนนี้คุณมีคำสั่งโหมดปกติของคุณในโหมด ex คุณสามารถเรียกดูคำสั่งของคุณเช่นการใช้ประวัติq:แล้วคัดลอกลงใน register โดยใช้"ay$ในบรรทัดที่มีบรรทัดคำสั่งที่คุณต้องการบันทึกลงในแมโคร จากนั้นเมื่อคุณต้องการเรียกใช้แมโครคุณสามารถดำเนินการได้โดยใช้@a


คุณจะเขียนคำสั่งโหมดปกติในบรรทัดคำสั่งได้อย่างไร เช่นd2w?
Peeyush Kushwaha

เพิ่มคำอธิบายบางอย่างในคำตอบ .. มันช่วยได้ไหม?
alpha_989

0

คัดลอกเนื้อหาของการลงทะเบียน ":" (สิ่งที่คุณเพิ่งทำ) ลงในการลงทะเบียนอีกครั้งเช่นการลงทะเบียน:

:let @a = @:

คุณสามารถรันมันอีกครั้งโดยใช้

@a

สิ่งนี้ไม่ได้ผลสำหรับฉันในกลุ่ม 7.4 ดูเหมือนว่าการลงทะเบียนจะ:มีคำสั่งที่ดำเนินการครั้งสุดท้ายผ่านทาง:command-name-goes-hereแทนคำสั่งโหมดปกติเช่นd2w
Peeyush Kushwaha

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