Seringkali, dalam file konfigurasi saya dapat menyalin dan menempel blok baris, maka saya ingin membuat perubahan kecil pada blok itu. Setelah menempel, saya gunakan x
untuk menghapus karakter yang ingin saya hapus, kemudian pindah untuk menempelkan blok berikutnya. Kecuali x
menempatkan karakter yang dihapus di clipboard, jadi saya harus menyalin kembali blok garis.
Apakah ada cara untuk melakukan ini tanpa masuk ke mode insert?
cut-copy-paste
register
durron597
sumber
sumber
Jawaban:
Pilihan Anda adalah:
_
. Misalnya, untuk menghapus garis yang Anda ketikkan"_dd
. Ini dihapus tanpa mempengaruhi clipboard."ayy
lalu menempelkan Anda akan mengetik"ap
"0p
Jalankan
:help registers
untuk lebih detail pada 3 pertamasumber
x
saya gunakan"_x
?x
, Anda mungkin harus belajar untuk menghapus gerakan sepertidt)
yang dihapus sampai tanda kurung tutup berikutnyad2W
yang menghapus dua token yang dipisahkan spasi putih berikutnya. Maka Anda mungkin melakukan sesuatu seperti"_di{
di dalam wilayah yang diperkuat, yang merupakan sesuatu yang saya lakukan sepanjang waktu. Dalam mode normal ini berarti " delete segala sesuatu di dalam ini menguatkan daerah ke dalam lubang hitam "nnoremap x "_x
ke saya~/.vimrc
(penjelasan di sini: stackoverflow.com/questions/54255/… ).x
tidak meletakkan barang-barang di clipboard, itu menempatkan mereka ke dalam register . Jika Anda tidak memberi tahu register mana yang akan dimasukkan, ia memasukkannya ke dalam register yang tidak disebutkan namanya, yang tentu saja menimpa konten sebelumnya. Jadi, sebagai gantinya, beri tahu register mana yang harus digunakan" REGISTER x
:, di mana REGISTER adalah huruf tunggal. Anda kemudian menggunakan awalan daftar kutipan yang sama puntuk menempel dari daftar itu. (Catatan: huruf kecil menggantikan kontennya; huruf besar ditambahkan).Ada juga dua register khusus
"0
dan"1
."0
adalah yteks yang paling lama ditarik ( ), yang akan tetap ada bahkan jika Anda menghapus beberapa teks dengan perintah lain (seperti x)."1
adalah teks yang paling baru dihapus, selama teks itu tidak kecil (satu baris). Teks yang dihapus kecil masuk"-
.Akhirnya, seperti yang ditunjukkan Steve Vermeulen, Anda dapat memberitahu vim untuk tidak menyimpan teks yang dihapus dengan menentukan register lubang hitam
"_
.Perintah bantuan yang relevan adalah
:help registers
.sumber
The
:let
perintah akan membiarkan Anda mendefinisikan sebuah register bernama. Pada baris perintah vim, menekan Control+ R dua kali 1 dan kemudian nama register akan menempelkan isi register ke dalam perintah. Kemudian Anda dapat memodifikasi apa yang ditempelkan, dan menyimpan daftar dengan modifikasi Anda.Contoh:
"fyy
seluruh baris (yy
) kef
register ("f
).:let @f='
, dan Control+ r, Control+ rlagi, lalu f, dan Anda akan melihatnya menempel di "Foo Bar", jadi baris perintah Anda sekarang membaca:let @f='Foo Bar
, dengan kursor di bagian paling akhir.:let @f='foo bar baz
.:let @f='foo bar baz'
dan tekan Enter.Sekarang Anda telah mendefinisikan ulang isi
f
register menjadi "foo bar baz".(Ini juga berfungsi untuk makro!
:help let
Untuk informasi lebih lanjut.)1 Control + rmemungkinkan Anda memasukkan register saat Anda sudah dalam mode insert, seolah-olah Anda sedang mengetik karakter. Menggunakan urutan ini dua kali penting karena "teks dimasukkan secara harfiah, tidak seperti diketik. Ini berbeda ketika register berisi karakter seperti
<BS>
." - vimdoc insert.txt,:help i_CTRL-R_CTRL-R
sumber
Terkait dengan daftar blackhole yang
"_
disebutkan oleh @derobert, Anda dapat menemukan screencast yang berguna di http://vimcasts.org/episodes/meet-the-yank-register/sumber
Plugin ReplaceWithRegister
http://www.vim.org/scripts/script.php?script_id=2703 (2009-2014)
Ini menyarankan pemetaan
gr
.gr
Atau, gunakan
gr<text object>
untuk melakukannya tanpa pemilihan visual. dot-repeat didukung ketika pluginrepeat.vim
oleh Tim Pope danvisualrepeat.vim
oleh Ingo Karkat diinstal.sumber