Saya hanya tahu satu contoh menggunakan register adalah melalui CtrlR*mana saya menempelkan teks dari clipboard.
Apa kegunaan lain dari register? Bagaimana cara menggunakannya?
Segala sesuatu yang Anda ketahui tentang register VI (mari fokus pada vi 7.2) - bagikan dengan kami.
Jawaban:
Register di Vim memungkinkan Anda menjalankan tindakan atau perintah pada teks yang tersimpan di dalamnya. Untuk mengakses register, Anda mengetik di
"a
depan perintah, di manaa
nama register. Jika Anda ingin menyalin baris saat ini ke registerk
, Anda bisa mengetikAtau Anda dapat menambahkan ke register dengan menggunakan huruf kapital
Anda kemudian dapat menelusuri dokumen dan menempelkannya di tempat lain menggunakan
Untuk menempel dari clipboard sistem di Linux
Untuk menempel dari clipboard sistem pada Windows (atau dari clipboard "highlight mouse" di Linux)
Untuk mengakses semua jenis register yang didefinisikan saat ini
sumber
"+
merupakan register khusus yang mengacu pada sistem clipboard."*
; jadi perintah untuk menyalin sampai akhir file menjadi"*yG
.*
adalah clipboard "highlight mouse", dan clipboard+
Ctrl-XCV.+
)?Saya senang ketika saya menemukan
0
register. Jika Anda menarik teks tanpa menugaskannya ke register tertentu, maka teks itu akan ditugaskan ke0
register, serta disimpan dalam"
register default . Perbedaan antara0
dan"
register adalah yang0
hanya diisi dengan teks yang ditarik, sedangkan register default juga diisi dengan teks yang dihapus menggunakan perintahd
/D
/x
/X
/c
/C
/s
/S
.Saya menemukan ini berguna ketika saya ingin menyalin beberapa teks, menghapus sesuatu dan menggantinya dengan teks yang disalin. Langkah-langkah berikut menggambarkan contoh:
y[motion]
- teks ini disimpan"
dan0
didaftarkand[motion]
- teks ini disimpan dalam"
register"0p
di mana
"
perintah untuk menggunakan register untuk perintah selanjutnya.Pada langkah terakhir, jika Anda menempel dari register default (dengan
p
), itu akan menggunakan teks yang baru saja Anda hapus (mungkin bukan yang Anda maksudkan).Catat itu
p
atauP
tempel dari register default. Setara lama akan""p
(atau""P
) dan"0
memegang yank terakhir,"1
memegang penghapusan atau perubahan terakhir.Untuk info lebih lanjut, lihat
:help registers
.sumber
p
atauP
pasta dari register default. Setara lama akan""p
(atau""P
)."
adalah perintah untuk menggunakan register untuk perintah selanjutnya. Jadi""p
akan menggunakan"
register untuk perintah tempel dan"0p
akan menggunakan0
register.0p
berarti pergi ke karakter pertama dari baris saat ini dan rekatkan dari isi register default ("
)."p
akan menjadi perintah yang tidak lengkap karena Anda perlu menentukan perintah apa untuk menggunakan registerp
.Salah satu bagian favorit saya tentang register adalah menggunakannya sebagai makro!
Katakanlah Anda berurusan dengan file nilai yang dibatasi-tab seperti itu:
Sekarang Anda memutuskan bahwa Anda perlu menambahkan tanda persentase di akhir bidang% Dev (mulai dari baris ke-2). Kami akan membuat makro sederhana dalam
m
register (dipilih secara sewenang-wenang) sebagai berikut:Tekan::
qm
Untuk mulai merekam makro dalamm
register.EE
: Pergi ke akhir kolom ke-3.a
: Sisipkan mode untuk menambahkan ke akhir kolom ini.%
: Ketikkan tanda persen yang ingin kita tambahkan.<ESC>
: Kembali ke mode perintah.j0
: Pergi ke awal baris berikutnya.q
: Hentikan merekam makroKita sekarang bisa mengetik
@m
untuk menjalankan makro ini di baris saat ini. Selanjutnya, kita dapat mengetik@@
untuk mengulang, atau100@m
melakukan ini 100 kali! Hidup terlihat cukup bagus.Pada titik ini Anda harus berkata, " TAPI TUNGGU, APA YANG HARUS DILAKUKAN DENGAN REGISTER ?"
Poin luar biasa. Mari selidiki apa yang ada di isi
m
register dengan mengetik"mp
. Kami kemudian mendapatkan yang berikut:Pada awalnya ini sepertinya Anda secara tidak sengaja membuka file biner di notepad, tetapi pada pandangan kedua, ini adalah urutan karakter yang tepat di makro kami!
Anda adalah orang yang ingin tahu, jadi mari kita lakukan sesuatu yang menarik dan edit baris teks ini untuk menyisipkan yang
!
lama dan tidak membosankan%
.Lalu mari kita tarik ini ke dalam
n
register dengan mengetikB"nyE
. Kemudian, hanya untuk iseng, mari jalankann
makro pada baris data kami menggunakan@n
....OMG, IT TAMBAH A
!
Pada dasarnya, menjalankan makro seperti menekan urutan tombol yang tepat dalam register makro itu. Jika itu bukan trik daftar yang keren, saya akan memakan topiku.
sumber
+
alih-alihj0
pergi ke karakter non kosong pertama pada baris berikutnya.Register berguna lainnya:
"*
atau"+
- isi clipboard sistem"/
- perintah pencarian terakhir":
- perintah terakhir.Catatan dengan vim macro, Anda dapat mengeditnya, karena mereka hanya daftar penekanan tombol yang digunakan saat merekam makro. Jadi, Anda dapat menulis ke file teks makro (gunakan
"ap
untuk menulis makro a ) dan mengeditnya, dan memuatnya ke dalam register"ay$
. Cara yang baik untuk menyimpan macro yang bermanfaat.sumber
vim --version
--clipboard
berarti Anda tidak memilikinya,+clipboard
berarti Anda memilikinya."*
dan"+
lebih keren lagi:"+
menempelkan teks terakhir yang disalinctrl+c
(salin buffer), atau apa pun pintasan yang Anda gunakan (atauright-click>copy
)."*
menempelkan teks terakhir yang disorot dengan mouse (buffer pilihan). Jadi, jika Anda menyalin sesuatu denganctrl+c
, dan kemudian menyoroti sesuatu yang lain dengan mouse, Anda dapat memilih yang mana yang akan ditempelkan. Ini tidak berfungsi di Windows, di mana kedua register ini sama."*
dan"+
selama bertahun-tahun! Saya pikir hanya gvim yang memiliki akses ke clipboard sistem, tetapi tampaknya vim biasa juga!-xterm_clipboard
aktifvim --version
. Ada paket sederhana untuk diinstal? (debian / apt-get). Terima kasih.The hitam lubang mendaftar
_
adalah/dev/null
register.Saya menggunakannya di vimrc saya untuk mengizinkan penghapusan satu karakter tanpa memperbarui register default:
dan untuk menempel dalam mode visual tanpa memperbarui register default:
sumber
x
menjadi kurang nyaman untuk merefleksikan karakter.x
pemetaan ini Anda tidak lagi dapat melakukanxp
"perintah" untuk mengganti arus dengan karakter berikutnya. Cukup bermanfaat untuk perbaikan kesalahan ketik. Kita juga harusXp
mengganti arus dengan karakter sebelumnya.Jika Anda ingin menempelkan isi register dalam perintah mode-ex, tekan
<C-r><registerletter>
.Mengapa Anda menggunakan ini? Saya ingin melakukan pencarian dan mengganti untuk string gondrong, jadi saya memilihnya dalam mode visual, mulai mengetik pencarian / ganti ekspresi
:%s/[PASTE YANKED PHRASE]//g
dan melanjutkan hari saya.Jika Anda hanya ingin menempelkan satu kata dalam mode ex, dapat memastikan kursor ada di dalamnya sebelum memasuki mode ex, dan kemudian tekan
<C-r><C-w>
ketika dalam mode ex untuk menempelkan kata.sumber
:
baris perintah adalah hal terbaik yang saya pelajari hari ini/[write out your regex]<cr>
dan kemudian ganti sajas/<C-R>//replacement/
. Dengan cara ini Anda mendapatkan manfaat dari umpan balik langsung di regex Anda sebelum menjalankan penggantian.Saya pikir register guru rahasia adalah ekspresi = daftar. Ini dapat digunakan untuk pemetaan kreatif.
Anda dapat menggunakannya bersamaan dengan sistem Anda seperti di atas atau mendapatkan tanggapan dari fungsi VimL khusus dll.
atau hanya hal-hal ad hoc suka
sumber
Trik kerennya adalah menggunakan
"1p
untuk menempelkan penghapusan / perubahan terakhir (, dan kemudian gunakan.
untuk berulang kali menempelkan penghapusan berikutnya. Dengan kata lain,"1p...
pada dasarnya setara dengan"1p"2p"3p"4p
.Anda dapat menggunakan ini untuk membalikkan urutan beberapa baris:
dddddddddd"1p....
sumber
Dari halaman bantuan vim:
sumber
sumber
nmap <F2> @q
Saya menggunakan register q, karena kemudian untuk menyimpan makro untuk F2 untuk diputar, saya tekan sajaqq
. simpan dan putar ulang makro cepat.Saya menggunakan register default untuk menangkap teks di jendela vim saya tanpa harus meraih mouse.
:!grep "<CTRL-R>0"<CR>
sumber
Gunakan register dalam perintah dengan
@
. Misalnya:Atur mereka dalam perintah:
Sekarang
"ap
akan menempelabc
.sumber
Sumber besar kebingungan adalah register default
"
. Penting untuk mengetahui cara kerjanya. Jauh lebih baik jika register default dihindari sebagian besar kali. Penjelasan dari dokumentasi Vim:Jadi register default sebenarnya adalah pointer ke register yang terakhir digunakan. Ketika Anda menghapus, atau menarik sesuatu register ini akan mengarah ke register lain. Anda dapat mengujinya dengan memeriksa register. Selalu ada register lain yang persis sama dengan register default: register yank (
"0
), register delete pertama ("1
), register delete kecil ("-
) atau register lain apa pun yang digunakan untuk menghapus atau mencabut.Satu-satunya pengecualian adalah register lubang hitam. Vim doc mengatakan:
Biasanya Anda akan jauh lebih baik dengan menggunakan secara langsung:
"0
,"-
dan"1-"9
register standar atau bernama register.sumber
Satu register yang terlewatkan adalah '.' dot register yang berisi teks yang disisipkan terakhir tidak peduli bagaimana itu disisipkan misalnya ct] (ubah sampai]). Kemudian Anda menyadari bahwa Anda perlu memasukkannya di tempat lain tetapi tidak dapat menggunakan metode dot repeat.
sumber
Register favorit saya adalah
':'
register. Menjalankan@:
dalam mode Normal memungkinkan saya untuk mengulangi perintah ex yang sebelumnya dijalankan.sumber
Teman saya Brian menulis artikel yang komprehensif tentang ini. Saya pikir ini adalah pengantar yang bagus untuk menggunakan topik. https://www.brianstorti.com/vim-registers/
sumber