Saya ingin merekam makro dalam makro, seperti:
qa
[ first macro ... ]
qb
[ second macro ... ]
q
[ some more stuff, involving @b ... ]
q
Namun, yang kedua q
ditafsirkan sebagai permintaan untuk menghentikan makro pertama, dan sisanya ditafsirkan sebagai perintah.
Apakah ada cara untuk mulai merekam makro kedua di dalam makro?
Jika tidak, apakah ada cara lain untuk mencapai efek yang diinginkan dari mengulangi urutan penekanan tombol tertentu, sementara sudah di dalam makro?
b
dan kemudian merekama
panggilan makro@b
?b
efek yang merusak, jadi saya tidak dapat merekamnya terlebih dahulu (kecuali jika saya ingin merekamnya, tekanu
beberapa kali, lalu mulai merekama
).enew
, merekam,bd
) atau secara langsung mengeditb
register dengan menulis dalam file Anda konten makro Anda dan kemudian "merekam" dengan menempatkan karakter dalam register"by
.Jawaban:
AFAIK, Anda tidak dapat merekam dua makro dengan
qx...q
satu tembakan. Untuk kebutuhan Anda, Anda harus membuat makrob
denganqb....q
, laluqa...@bq
.Jika Anda tidak ingin "merekam"
b
yang dapat Anda lakukanlet @b='whatever'
maka@b
akan memutar ulang makro. Misalnya,let @b='ggdG'
tentukan makrob
untuk menghapus semua konten buffer Anda saat ini tanpa "merekam".Ada trik definisi makro, yang mungkin tidak relevan dengan pertanyaan Anda. Ini adalah makro rekursif, bukan makro bersarang. Artinya, Anda bisa melakukan:
qa..whatever..@aq
ini secara rekursif akan memutar ulang makro
a
. Terkadang berguna, ketika kita tidak tahu berapa kali kita ingin memutar ulang makro. Karena ketika kesalahan terjadi, replay makro akan otomatis berhenti. Menghemat999@a
misalnya.sumber
Merekam penekanan tombol ke makro @a adalah hal yang sama seperti menarik teks yang sesuai dengan penekanan tombol untuk mendaftar a. Setelah sesuatu disimpan dalam register, Anda bisa meletakkannya atau memainkannya sebagai makro / penekanan tombol. Jadi Anda bisa mulai merekam makro ke @a melalui
qa
, lalu saat makro merekam, tarik beberapa teks untuk mendaftar b, mungkin menggunakan sesuatu seperti"bye
. Yang perlu dilakukan hanyalah teks tarik ke register yang berbeda dari yang akan Anda lakukan jika Anda tidak menentukan register b. Sekarang register b memiliki beberapa teks di dalamnya, Anda dapat memutar teks itu sebagai keystoke dengan menekan@b
. Anda bahkan dapat melakukannya saat makro @a masih direkam. Ini metamacrolicious!Kerugian utama dari ini adalah mungkin akan lebih mudah untuk menulis beberapa fungsi vimscript yang melakukan apa yang Anda inginkan, dan kemudian mungkin menyebutnya selama perekaman makro. Keindahan makro adalah bahwa Anda dapat melihat efek dari apa yang Anda rekam saat Anda merekamnya, tetapi teknik perekaman makro meta ini agak menghilangkannya.
sumber