Apakah ada cara untuk 'pipa' teks dari register ke register lain atau set register? Misalnya, pindah "q
ke register "1
melalui "5
.
Saya sering ingin membuat versi yang sedikit berbeda dari makro yang sama, jadi berguna untuk dapat menyalin makro 'templat' ke beberapa register dan kemudian memodifikasi masing-masing di tempat.
Untuk memberikan contoh praktis, inilah masalah yang mendorong pertanyaan ini untuk saya.
Saya perlu mengubah baris berikut dari bahasa deskripsi perangkat keras menjadi banyak blok berulang,
RAM64(in=in, load=load0, address=address[0..5], out=out1);
untuk
RAM64(in=in, load=load1, address=address[0..5], out=out2);
RAM64(in=in, load=load2, address=address[0..5], out=out3);
RAM64(in=in, load=load3, address=address[0..5], out=out4);
RAM64(in=in, load=load4, address=address[0..5], out=out5);
Saya memiliki makro yang melakukan ini, menggunakan fungsi kenaikan, yypW^At)^A
yang saya simpan di register "a
.
Terkadang, saya perlu pola kenaikan menjadi sedikit berbeda, seperti
RAM512(in=in, load=load1, address=address[0..8], out=out2);
RAM512(in=in, load=load2, address=address[0..8], out=out4);
RAM512(in=in, load=load3, address=address[0..8], out=out6);
RAM512(in=in, load=load4, address=address[0..8], out=out8);
di mana makro dalam register "b
akan berada yypW^At)^A^A
.
Saya ingin register melakukan ini, tetapi untuk setiap kenaikan dari 1-5. Register "a
dapat (entah bagaimana) disalin ke register b hingga e. Kemudian saya akan menempelkan setiap register ke buffer, membuat modifikasi yang diperlukan (menambahkan lebih banyak istilah, mengubah karakter yang mengikuti t
gerakan, dll) dan menarik kembali ekspresi yang dimodifikasi kembali ke register. Idealnya langkah terakhir ini bahkan dapat dimasukkan dalam perintah untuk menyalin register
Ini menyelamatkan saya dari pengulangan semua karakter di makro yang TIDAK perlu diubah. Sebagai contoh saya ini mungkin sepele, tetapi saya dapat melihat saat-saat ketika mungkin akan sangat membantu untuk melakukan apa yang saya minta.
Jawaban:
Makro hanyalah teks.
Buka buffer kosong baru dan letakkan makro Anda di sana. Anda dapat menduplikasi baris, mengubah satu hal di sini dan sesuatu yang lain di tempat lain, lalu menarik garis dan langsung menggunakannya
@"
.Tidak perlu mencemari register Anda, terutama register nomor yang melayani tujuan yang sama sekali berbeda.
- edit -
Pertanyaan Anda lebih mudah dipahami sekarang setelah Anda menambahkan beberapa penjelasan.
Ternyata, Anda hanya perlu mengubah rekaman awal Anda untuk mencapai tujuan Anda, tanpa bermain dengan register seolah-olah mereka adalah variabel:
Untuk membuat 5 salinan dari baris saat ini dengan angka terakhir ditambah 2:
atau 12 salinan, dengan angka terakhir bertambah 23:
sumber
abcde
dalam@q
, maka saya ingin@x="bcdea"
,@y="abcde"
dan@z="eabcd"
. Saya mungkin mulai dengan membiarkan@x
,,@y
dan@z
semuanya sama@q
dan kemudian memodifikasi mereka sesuai kebutuhan. Jelas, saya baru saja mengada-ada, tetapi sepertinya ada beberapa kasus di mana sesuatu yang serupa mungkin berguna.Menggunakan
getreg
dansetreg
Untuk menyalin dari
q
ke register1
-5
:Untuk menyalin ke daftar yang lebih umum:
Menggunakan
execute
Untuk menyalin dari
q
ke register1
-5
:Untuk menyalin ke daftar yang lebih umum:
Penjelasan. Perintah
let
ini dapat digunakan sebagailet @x=@y
, yang menyalin mendaftary
untuk mendaftarx
. Pada dasarnya, kami hanya membangun perintah-perintah ini dalam satu lingkaran (mengubah nilaix
dalam bentuk di atas) danexecute
memasukkannya.sumber
:exe
sini. Thegetreg()
dansetreg()
fungsi akan menjadi lebih bersih.Untuk langsung menjawab pertanyaan, jika Anda ingin dengan cepat dan mudah menyalin konten dari satu register ke yang lain, Anda dapat memasukkan yang berikut ini di .vimrc Anda. Anda kemudian dapat mengeksekusi
<leader>rcab
untuk menyalin isi registera
untuk mendaftarb
. Sebagai contoh saya memilih<leader>rc
untuk berdiri untuk 'daftar salinan'sumber
getreg(sourceReg, 1)
.