Catatan: Saya berasumsi Anda menggunakan a
register untuk keseluruhan jawaban ini, tetapi Anda dapat menggunakan register apa pun
Note2: <1b>
adalah Esc; Anda dapat menyisipkan ini dengan Ctrl+vlalu Esc. Mungkin juga muncul sebagai ^[
(tergantung pada display
pengaturan).
Ini bukan pemetaan; jadi masuk akal kalau :map
itu tidak berhasil. Itu direkam dalam register, dan Anda dapat melihat & mengeditnya seperti register apa pun.
Yang perlu qdilakukan adalah "menghapus register ini, dan menambahkan penekanan tombol apa pun untuk itu" , dan semua yang @dilakukan adalah "mengevaluasi register sebagai perintah" .
Tidak ada yang "berbeda" tentang makro, Anda bisa memanggil register apa pun sebagai makro.
Untuk melihat gunakan saja:
:echo @a
Sama seperti register apa pun.
Anda juga dapat menggunakan :registers
untuk melihat semua register.
Untuk mengedit, Anda dapat melakukan beberapa hal:
Cara paling sederhana yang Anda pilih @a
, seperti:
:let @a='iasd<1b>'
Ini akan mulai memasukkan mode ( i
), menyisipkan asd
, dan Melarikan kembali ke mode normal.
Ini tidak terlalu berguna untuk pengeditan ekstensif; Anda bisa menggunakan fungsi (mis. substitute()
), atau mungkin menambahkan sesuatu ( :let @a=@a . 'more'
), tetapi mengubah sesuatu di tengah tidak mudah.
Saya telah menemukan bahwa cara terbaik untuk ini, adalah memulai buffer baru dengan :split
atau :tabnew
dan mengedit register dengan memasukkannya di sana, mengeditnya, dan kemudian menyalinnya kembali.
Anda dapat menggunakan "apteks yang akan dimasukkan ke dalam buffer (di mana a
Anda mendaftar):
iThis is A<1b>
Sekarang saya bisa mengubah baris ke mungkin:
iThis is an edited macro<1b>
Kemudian saya lakukan ^v$"ayuntuk menarik (menyalin) baris ini ke a
register:
- ^ untuk memulai jalur
- v untuk mode visual
- $ untuk akhir baris
- "ay tarik pilihan untuk mendaftar
a
Jika mau, Anda dapat melakukan ini tanpa menggunakan mode visual dengan ^"ay$.
Anda sekarang dapat menggunakan @a, seolah-olah ini adalah apa yang awalnya Anda rekam.
Anda juga bisa menggunakan yy, dan kemudian @", yang sedikit lebih cepat. Ini juga akan menyalin baris tambahan, dan dapat menyebabkan efek samping ... Cara lain untuk membuat ini lebih cepat adalah dengan menggunakan makro :-)
Enter
pada akhir rekaman Anda. Dalam banyak kasus ini mungkin jinak, tetapi dalam skenario di mana Anda dengan hati-hati membuat posisi kursor di akhir rekaman, ini dapat memengaruhi pengulangan.v
dan memilih seluruh baris (tanpa baris baru).v^$"ay
untuk menarik (menyalin) baris ini kea
register." Bukankah seharusnya itu^
datang sebelumv
, dan dengan$
apakah Anda masih menyalin baris baru? Saya pikir itu harus:0v$h"ay
(ya panjangnya menyakitkan!)$
pindah ke akhir baris, tetapi tidak termasuk baris baru. Perbedaan antara0y$
danyy
. Menempatkanh
setelah$
hanya akan berarti bahwa Anda akan kehilangan karakter terakhir.Untuk mendapatkan sesuatu untuk dikerjakan ...
Akan mulai merekam makro ke dalam
a
register.Anda dapat melihat banyak register Anda saat ini (digunakan untuk makro, menarik, menghapus, dll.) Dengan
:reg
perintah, atau Anda dapat menentukan register untuk ditampilkan dengan memberikan namanya. Misalnya, untuk menampilkan daftara
:hasil panen
Anda dapat menambahkan ke register bernama yang ada dengan menggunakan huruf kapital yang sesuai. Ini berfungsi tidak hanya untuk merekam makro, tetapi juga untuk menariknya. Sebagai contoh:
hasil panen
Jika Anda ingin menggunakan sintaks let untuk mengedit makro yang ada, Anda dapat melakukan:
yang akan diperluas ke
dan Anda kemudian dapat mengubah penekanan tombol individual.
Perhatikan bahwa Anda dapat menggunakan
<C-r>
(yaitu, kontrol + r) untuk menempelkan dari register apa pun ke mode baris perintah (atau dalam mode insert, dalam hal ini).Selain itu, ketika Anda berada dalam mode baris perintah, jika Anda mengetik
<C-f>
ini akan muncul jendela baris perintah, di mana Anda dapat melihat / mengedit perintah masa lalu yang dikeluarkan, dan Anda dapat mengedit perintah Anda saat ini sebelum memanggilnya. Tekan enter pada perintah yang ingin Anda kirim.Manfaatnya adalah Anda dapat menggunakan perintah pergerakan / substitusi normal di dalam buffer ini untuk mengedit makro Anda. Sebagai contoh:
akan memunculkan:
Jika Anda menggunakan perintah 120, Anda dapat melakukan:
hasil panen
Anda tentu saja dapat menempelkan isi register ke buffer Anda, dan mengubahnya di sana. Tetapi Anda dapat melakukan semua yang Anda butuhkan tanpa mencemari buffer kerja Anda.
sumber