Saya memiliki beberapa teks dalam buffer tempel, misalnya saya melakukan yw
(kata yank) dan sekarang saya memiliki 'foo' di buffer saya.
Saya sekarang pergi ke kata 'bar' dan saya ingin menggantinya dengan buffer paste.
Untuk mengganti teks secara manual saya bisa lakukan cw
dan kemudian ketik kata baru.
Bagaimana saya bisa melakukan 'mengubah kata' tetapi menggunakan isi buffer tempel saya alih-alih mengetik kata pengganti secara manual?
Pilihan terbaik yang saya miliki saat ini adalah pergi ke awal kata yang ingin saya ganti dan lakukan dw
(hapus kata), kemudian pergi ke tempat lain dan lakukan yw
(kata yank), kemudian kembali ke area penggantian dan lakukan p
(Tempel) yang agak canggung terutama jika mereka tidak berada di layar yang sama.
vep
.ve"0p
akan bekerja agar Anda mengulangi perubahan Andamap <C-j> ciw<C-r>0<ESC>
sehingga tidak masalah dari mana dalam kata yang Anda tekan^j
.:help insert
lalu cari CTRL-R/CTRL-R
. Untuk carave"0p
kerjanya, lihat:help registers
yw
untuk menarik kata Anda, kemudian memindahkan kursor ke kata yang ingin Anda ganti dan gunakan"_dw
untuk menghapusnya, mengirim teks ke register nol (sehingga tidak menimpa isi"
register, di mana teks yang ditarik / potong secara default ), lalu cukup tempel denganp
.Anda bisa menggunakan pemetaan berikut ini untuk membuat segalanya lebih mudah:
... jadi dalam mode normal, Anda dapat menggunakan
\dw
untuk menghapus kata, tanpa memengaruhi"
register.sumber
Untuk melakukan ini dengan cara VIM, Anda sengaja menggunakan yank, delete, dan register lainnya.
Daftar
"0
adalah daftar yank. Apa pun yang Anda tarik akan diletakkan di sini, tetapi penghapusan tidak pernah menyentuh daftar"0
.Jadi, dalam contoh Anda, Anda baru saja menarik kata. Untuk mengganti kata dengan apa yang baru saja Anda tarik, Anda memanfaatkan penghapusan tidak pernah menyentuh daftar penarikan. Jadi pindahlah ke kata target, hapus dengan
dw
, lalu rekatkan dari yank-register Anda dengan"0p
, atau lebih baik lagi,cw
lalu^R0
(yang dapat diulang).Yang berseberangan dengan register yank adalah register penghapusan kecil
"-
. Penghapusan kecil atau ubah penghapusan dilakukan di sini, tetapi yank tidak pernah menyentuh"-
. Penghapusan dianggap sekecil jika kurang dari satu baris penuh.Register
"1
-"9
adalah register histori hapus. Dengan"1
mengandung penghapusan besar terbaru atau perubahan penghapusan, dan"9
berisi penghapusan besar tertua atau perubahan penghapusan. Hanya penghapusan yang tidak kecil, yaitu penghapusan satu baris atau lebih, didorong ke"1
-"9
.Untuk operasi apa pun yang mengubah register, salinan juga selalu ditempatkan di default, alias register tanpa nama
""
. Ini adalah register yang digunakan ketika Anda tidak secara eksplisit menyebutkan nama suatu register.Register
"_
adalah register black hole, dan selalu kosong. Jika Anda menghapusnya, tidak ada dalam register yang berubah sama sekali, bahkan""
register default , atau register black hole itu sendiri. Teks yang dihapus sepenuhnya hilang, terlepas dari riwayat undo Anda. Yanking to, atau paste dari daftar lubang hitam pada dasarnya tidak melakukan apa pun.Register lubang hitam
"_
memungkinkan Anda melakukan hal-hal seperti pertama penghapusan kecil, lalu sejumlah penghapusan lainnya"_
tanpa mengubah register penghapusan kecil Anda"-
, lalu tempel penghapusan kecil pertama Anda.Register lain adalah register yang dimasukkan terakhir
".
, register nama file"%
dan"#
, register perintah":
, register pencarian"/
dan register ekspresi"=
.Anda bisa mendapatkan daftar semua register ini dan isinya dengan perintah
:register
. Perintah itu sangat berguna untuk bereksperimen dan mempelajari apa yang berakhir di mana.sumber
Saya sangat membutuhkan ini, saya menulis sebuah plugin untuk menyederhanakan dan memungkinkan kecepatan maksimum: ReplaceWithRegister .
Plugin ini menawarkan perintah dua-dalam-satu
gr
yang menggantikan teks yang dicakup oleh {motion} / objek teks, seluruh baris atau pilihan saat ini dengan isi register; teks lama dihapus ke register black-hole, yaitu hilang. Ini transparan menangani banyak kasus sudut dan memungkinkan untuk pengulangan cepat melalui.
perintah standar . Jika Anda tidak menyukainya, lamannya memiliki tautan ke alternatif.sumber
Untuk mengulangi pasta gunakan perintah perubahan.
cw ^R0ESC (^ R = Kontrol + R; 0 untuk register 0)
akan mengganti kata dengan konten dari reg. 0 dan mari kita ulangi.
Ini bagus untuk cgn(VIM 7.4) untuk mengganti pola pencarian:
sumber
Karena belum termasuk, Anda biasanya mengganti string dengan
:%s/.../.../
dan Anda dapat melakukan ini dengan kata di bawah kursor Anda juga.:s/find/
<ctrl-r>
dan memilih dengan kursor kata yang ingin Anda gantikan.<ctrl-w>
("kata") atau<ctrl-a>
(kata "besar") untuk menempelkan kata di bawah kursor ke dalam baris perintahLihat tautan tentang cara menggunakan hal-hal kursor di baris perintah .
sumber
Saya biasanya menggunakan ini: ywuntuk mencabut
foo
, lalu menghapusbar
dengan dw, dan sebagai langkah terakhir, dimasukkanfoo
dari register0
yang menyimpan teks yang ditarik menggunakan "0p. Ulangi menempatkan dengan titik ( .) sesuai kebutuhan.Selain itu, alih-alih ywdan dw, Anda dapat menggunakan yiwdan diw(perhatikan tambahan i- artinya di dalam ). Dengan itu Anda dapat menarik atau menghapus kata dari lokasi mana pun di dalamnya, tidak hanya di awal kata.
sumber
Saya menggunakan plugin ini untuk memperluas wilayah pilihan: https://github.com/terryma/vim-expand-region
Jadi kombinasi saya untuk mengubah kata adalah:
vvp
di sembarang tempat kata.Saya juga memiliki peretasan untuk menyimpan konten daftar yang tidak disebutkan namanya setelah ditempel sehingga saya dapat mengulanginya.
(clipboard saya dipilih otomatis)
sumber
Saya menggunakan pemetaan kunci di bawah ini untuk mengganti kata saat ini dengan kata yang disalin.
" replace with Register 0
map <leader>rr ciw<C-r>0<Esc>
yiwmenyalin sebuah kata. Arahkan ke sebuah kata. ,rrganti kata.
Kunci pemimpin adalah peta ,.
sumber
,rw
akan lebih masuk akal, dan pada QWERTY mungkin smidgen lebih mudah dan lebih cepat untuk keluar. Pada DVORAK, saya memilih,rc
, yang meskipun tidak masuk akal sama sekali, lebih mudah dan lebih cepat daripada mereka semua. Di DVORAK,,rw
ada pertunjukan horor;)Pertama, navigasikan ke awal kata yang ingin Anda tarik. Jika Anda berada di tengah kata, lakukan saja
b
untuk kembali ke awal. Kemudian lakukanye
untuk menarik seluruh kata, tanpa spasi tambahan (y
ank kee
nd). Akhirnya, buka kata yang ingin Anda ganti - mungkin dengan melakukanw
beberapa kali - dan lakukanvep
untuk masuk kev
mode pemilihan isual, pilih kee
kata, danp
aste isi yang terakhir disentak.(Jika ada yang ingin tahu mengapa saya tidak hanya mengomentari jawaban yang diterima, untuk modifikasi kecil
ye
daripada menggunakanyw
, itu karena reputasi saya di tumpukan ini masih terlalu rendah.)sumber
yw
untuk menarik dunia, pergi ke dunia yang ingin Anda ubah.v
untuk memilih dunia,ve
atauvw
tergantung pada situasi Anda.p
ke paster dunia yang Anda salin untuk mengganti blok yang dipilihsumber
Menambah jawaban lain yang lebih baik. Agak terlalu jelas tetapi Anda bisa menempelkannya sebelum menghapus. 'yw' lalu buka kata yang ingin Anda ganti, 'pldw' (rekatkan, geser satu karakter ke kanan, hapus kata.
sumber