ฉันจะบันทึกแมโครที่ซ้อนกันได้อย่างไร


11

ฉันต้องการบันทึกแมโครภายในมาโครเช่น:

qa
    [ first macro ... ]
    qb
        [ second macro ... ]
    q
    [ some more stuff, involving @b ... ]
q

อย่างไรก็ตามที่สองqถูกตีความเป็นการร้องขอให้หยุดแมโครแรกและที่เหลือถูกตีความว่าเป็นคำสั่ง

มีวิธีใดบ้างในการเริ่มบันทึกแมโครที่สองภายในแมโคร

ถ้าไม่มีมีวิธีอื่นอีกไหมที่จะได้รับผลตามที่ต้องการในการกดแป้นซ้ำตามลำดับในขณะที่อยู่ในแมโครอยู่แล้ว?


1
คุณไม่สามารถบันทึกแมโครbก่อนแล้วจึงบันทึกการaเรียกมาโครได้@bหรือไม่
statox

@statox ปัญหาคือว่าbมีผลกระทบการทำลายล้างดังนั้นฉันไม่สามารถบันทึกก่อน (เว้นแต่ฉันต้องการบันทึกกดuหลายครั้งแล้วเริ่มบันทึกa)
Doorknob

1
ฉันคิดว่ามันเป็นทางออกที่ดีที่สุดของคุณ โปรดทราบว่าคุณยังสามารถบันทึกภาพไว้ในบัฟเฟอร์อื่น ( enewบันทึกbd) หรือโดยตรงแก้ไขbการลงทะเบียนโดยการเขียนในไฟล์ของคุณเนื้อหาของแมโครของคุณแล้ว "บันทึก" "byมันโดยการวางตัวละครในการลงทะเบียนกับ
statox

คำตอบ:


10

AFAIK คุณไม่สามารถบันทึกสองมาโครได้qx...qในนัดเดียว สำหรับความต้องการของคุณคุณต้องสร้างแมโครbโดยแล้วqb....qqa...@bq

หากคุณไม่ต้องการที่จะ "บันทึก" bคุณสามารถทำได้let @b='whatever'แล้ว@bจะเล่นซ้ำแมโคร เช่นlet @b='ggdG'กำหนดแมโครbเพื่อลบเนื้อหาทั้งหมดของบัฟเฟอร์ปัจจุบันของคุณโดยไม่มี "การบันทึก"

มีเคล็ดลับการกำหนดแมโครซึ่งอาจไม่เกี่ยวข้องกับคำถามของคุณ เป็นแมโครแบบเรียกซ้ำไม่ใช่มาโครซ้อนกัน นั่นคือคุณสามารถทำได้:

qa..whatever..@aq

สิ่งนี้จะเล่นซ้ำแมโครaซ้ำ บางครั้งมันมีประโยชน์เมื่อเราไม่รู้จำนวนครั้งที่เราต้องการเล่นแมโครซ้ำ เนื่องจากเมื่อเกิดข้อผิดพลาดการเล่นซ้ำแมโครจะหยุดโดยอัตโนมัติ มันช่วยประหยัด999@aตัวอย่างเช่น


1

การกดแป้นการบันทึกไปยังมาโคร @a นั้นเหมือนกับการ yanking ข้อความที่สอดคล้องกับการกดแป้นเหล่านั้นเพื่อลงทะเบียน a เมื่อบางสิ่งถูกเก็บไว้ในการลงทะเบียนคุณสามารถใส่มันหรือเล่นมันเป็นมาโคร / การกดแป้น เพื่อให้คุณสามารถเริ่มต้นการบันทึกแมโครเพื่อ @a ผ่านแล้วในขณะที่แมโครจะถูกบันทึกงัดข้อความบางส่วนที่จะลงทะเบียนขบางทีอาจจะใช้สิ่งที่ต้องการqa "byeสิ่งที่ทำคือการดึงข้อความลงในการลงทะเบียนที่แตกต่างจากที่คุณต้องการหากคุณไม่ได้ระบุการลงทะเบียนข ตอนนี้ที่ลงทะเบียนขมีข้อความบางอย่างในนั้นคุณสามารถเล่นกลับข้อความที่เป็น keystokes @bโดยการกด คุณสามารถทำได้แม้ในขณะที่แมโคร @ a ยังคงถูกบันทึกอยู่ มันเป็น metamacrolicious!

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

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