Pola pengeditan yang sering saya temui adalah sebagai berikut: Saya ingin menarik sepotong teks di dalam tanda kutip atau tanda kurung, dan mengganti potongan teks itu di dalam sepasang tanda kutip / tanda kurung lain.
Misalnya, jika saya ingin menyalin nama kelas foo bar
dan menempelkannya di tempat lain:
<span class="foo bar">
<div class="this-should-be-replaced-with-foo-and-bar">
Yang saya tahu adalah ini: Jika saya pindah ke dalam kelas span, saya gunakan yi"
untuk menarik teks di dalam tanda kutip.
Sekarang saya memiliki ini di register saya, jadi saya harus dapat mengganti konten kelas div dengan itu. Tetapi saya tidak dapat menemukan cara praktis untuk melakukan ini.
Jika saya menggunakan ciw
ini akhirnya menimpa register saya dengan konten untuk berubah, jadi saya kehilangan teks saya menarik.
Hal terbaik yang bisa saya dapatkan adalah pindah ke kutipan pertama kelas div, memukul p
, lalu menghapus kutipan berikutnya dt"
.
Biasanya saya mengacaukan posisi saya, dan saya menempelkannya di suatu tempat di dalam tanda kutip yang menggabungkan kedua string, dan itu mengacaukan semuanya.
Saya berharap ada beberapa cara untuk melakukan kombinasi "ganti teks dalam dengan konten yang saya tarik" untuk membuatnya lebih mudah.
sumber
Anda dapat menggunakan register bernomor. Tarik pertama "foo-bar" dengan
yi"
, yang akan mengisi"0
register, lihat:h "0
. Kemudian lakukanci"<c-r>0
untuk mengganti dengan isi register 0.Lihat
:h i_CTRL-R
deskripsi bagian terakhir.sumber
yi"
) dan menempelkannya dari register0
tempat menyimpannya setelah Anda menghapus teks yang akan diubah (ci"<c-r>0
)? Dalam hal vimgolf Anda memenangkan 2 penekanan tombol dan Anda tidak mengacaukan register Anda.CTRL+r
sebelumnyaa
, itulah<c-r>
artinya.ciw
tidak menempatkan teks yang dihapus dalam daftar disebutkan namanya tetapi register bergeser, itu sebabnya Anda harus menggunakan<c-r>0
bukan<c-r>"
. Lihat:h quote_number
."0
Register hanya diisi oleh perintah yank dan tidak akan terganggu oleh misalnyac
.Ini solusi lain. Ini bukan yang terbaik dalam hal Vimgolf, tetapi menggunakan register lubang hitam:
Setelah Anda berada di
foo bar
string, Anda dapat mencabutnya menggunakan normalyi"
.Kemudian di dalam kurung untuk mengubah:
"_di"P
Yang mana:
Keuntungan dari register lubang hitam adalah tidak akan mengacaukan register orang lain. Lihat
:h quote_
untuk lebih jelasnya.(Perhatikan bahwa jawaban ini hanya di sini untuk membicarakan tentang daftar hitam. Saya pribadi menggunakan pilihan visual seperti yang disarankan oleh @grodzik.)
sumber
P
untuk yang itu. Ketika Andadi"
kursor Anda akan ditinggalkan pada tanda kutip terakhir danp
akan menempel setelah, di mana sepertiP
akan menempel sebelum posisi saat ini.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