Jadi saya biasanya menemukan diri saya menyalin teks dari satu titik ke titik lain sambil menimpa teks lama di mana yang baru disisipkan:
blah1
newtext
blah2
wrong1
blah3
wrong2
blah4
Misalkan saya menandai secara visual newtext
dan y
menggesernya. Sekarang saya pilih wrong1
(yang bisa apa saja, tidak harus hanya sepatah kata pun) dan p
aste newtext
. Namun, jika sekarang saya melakukan hal yang sama dengan wrong2
itu akan diganti dengan wrong1
bukan newtext
.
Jadi bagaimana cara menjaga agar teks yang ada di buffer tidak ditukar dengan teks yang saat ini saya timpa?
Edit 1
Walaupun saya cukup menyukai saran reigister (saya pikir saya akan mulai menggunakan register lebih banyak, sekarang saya menemukan :dis
perintah), saya akan dengan modifikasi jawaban jinfield , karena saya tidak menggunakan mode swapping.
vnoremap p "0p
vnoremap P "0P
vnoremap y "0y
vnoremap d "0d
melakukan trik dengan sempurna.
Edit 2
Saya terlalu cepat; solusi romainl adalah persis apa yang saya cari, tanpa hack di Edit 1 .
Sebenarnya vnoremap p "_dP
sudah cukup!
Jadi, mengubah jawaban yang diterima.
sumber
vnoremap p "_dP map
, dan saya perhatikan itu tidak bekerja dengan baik untuk kata / karakter terakhir dalam satu baris. Aku sudah kembali pergi kevnoremap p "0p
,vnoremap P "0P
danset clipboard=unnamed
(untuk OSX)vnoremap p "_dP
menghilangkan ruang putih pada pasta. Sunting 1 berfungsi dengan sempurna.Jawaban:
Saya memiliki pemetaan ini di .vimrc saya:
"_
adalah "daftar lubang hitam", menurut:help "_
:"Saat menulis ke register ini, tidak ada yang terjadi. Ini dapat digunakan untuk menghapus teks tanpa mempengaruhi register normal. Ketika membaca dari register ini, tidak ada yang dikembalikan. {Not in Vi}"
sumber
vnoremap p "_dP map
dan memperhatikan bahwa itu tidak berfungsi dengan baik untuk kata / karakter terakhir dalam satu baris. Aku sudah kembali pergi kevnoremap p "0p
,vnoremap P "0P
danset clipboard=unnamed
(untuk OSX)vnoremap p "_dP
berhenti bekerja untuk saya dalam mode pilih, tetapivnoremap <leader>p "_dP
berhasil<leader>
adalah pengganti yang seharusnya saya ketahui untuk menggantikannya dengan sesuatu, tetapi ini hanya bekerja untuk saya jika saya menghapusnya. Apa artinya di sini?:help mapleader
,.vnoremap <leader>p
pemetaan tidak berfungsi dengan benar pada baris terakhir buffer karena segera setelah Anda menghapus baris terakhir buffer, Anda sekarang berada di baris sekali-kedua-terakhir, danP
akan menempel di atas garis itu, bukannya di bawah.Selain buffer standar, Anda dapat menarik teks ke buffer bernama, dan kemudian menempatkan dari buffer bernama. Ada hingga 26 buffer bernama yang dapat Anda gunakan (satu untuk setiap huruf). Gunakan tanda kutip ganda dan surat untuk mengakses buffer bernama. Contoh:
"dyy
- Yank line saat ini ke buffer d."a7yy
- Tarik tujuh baris berikutnya ke dalam buffer a."dP
- Letakkan isi buffer d sebelum kursor."ap
- Letakkan isi buffer setelah kursorHal keren lainnya, jika Anda menggunakan huruf kapital dan bukan huruf kecil, yaitu
"Dyy
baris saat ini akan ditambahkan ke buffer d bukannya menggantikannya. Lebih detail dalam buku O`Reilly: http://docstore.mik.ua/orelly/unix/vi/ch04_03.htmsumber
"a
semuanya, tapi oke.Saat menggunakan
put
dalam mode visual, teks yang Anda gantikan,,wrong1
ditimpa oleh isi register 'tidak dikenal'.Ini sebenarnya bekerja dengan 'meletakkan' register setelah seleksi dan kemudian menghapus seleksi. Masalahnya adalah bahwa penghapusan ini sekarang disimpan dalam
unnamed
register dan akan digunakan untukput
tindakan selanjutnya .Solusinya, menurut
:h v_p
, adalah menarik ke register bernama, seperti"0y
, lalu tempel menggunakan"0p
waktu sebanyak yang Anda butuhkan. Mungkin bermanfaat untuk memetakan<leader>y
dan<leader>p
menggunakan register bernama, jika ini adalah sesuatu yang sering Anda lakukan.untuk bantuan lebih lanjut lihat:
sumber
Menempel dari
"0
daftar penting untuk diketahui, tetapi Anda sering ingin mengganti berkali-kali. Jika Anda membuatnya menjadi tindakan yang berulang, Anda dapat menggunakan.
operator, seperti yang disinggung oleh garyjohn. Dijelaskan di vim wiki :sumber
Ketika Anda menarik teks ke dalam register tanpa nama *, salinan juga dimasukkan ke dalam register 0. Setiap kali Anda mengganti teks yang dipilih, Anda dapat menempelkannya dari 0 register. Lihat
Selain itu, jika Anda mengganti sejumlah kata dengan kata yang sama, Anda bisa langsung pindah ke awal kata yang akan diganti dan ketik
.
. Itu akan mengulangi operasi pengeditan terakhir. Lihat* Lokasi penyimpanan yang Anda tarik dan masukkan disebut register. Buffer adalah hal yang Anda edit, biasanya salinan file dari disk.
sumber
Saya sangat membutuhkan ini, saya menulis sebuah plugin untuk itu: ReplaceWithRegister .
Plugin ini menawarkan perintah dua-dalam-satu
gr
yang menggantikan teks yang dicakup oleh {motion}, seluruh baris, atau pilihan saat ini dengan isi register; teks lama dihapus ke register black-hole, yaitu hilang.sumber
Karena sesuatu seperti
vnoremap p "_dP
(saya juga mencobax
atauc
) memiliki masalah dengan garis awal dan akhir, saya akhirnya melakukan ini:vnoremap p :<C-U>let @p = @+<CR>gvp:let @+ = @p<CR>
yang saya temukan lebih sederhana daripada plugin yang ada (yang juga tidak bekerja dengan diset clipboard=unnamedplus
luar kotak). Jadi yang dilakukannya adalah:C-U
)+
mendaftar (karena unnamedplus, alternatif yang"
dan*
tergantung pada konfigurasi Anda) untukp
sumber
Inilah yang saya gunakan (secara harfiah disalin dari .vimrc saya) untuk Windows-style Control + X cut / Control + C copy / Control + V paste / Control + S save / Control + F find / Control + H ganti perilaku.
Fungsi smartpaste () harus berisi apa yang Anda cari, yaitu cara untuk menempelkan teks yang disorot tanpa secara bersamaan menarik apa yang dipilih.
sumber
tl; dr - vnoremap p "_c *
Berikut adalah daftar pemetaan lengkap saya:
"Perbaiki daftar copy / paste
nnoremap DD" * dd
nnoremap D "* d
vnoremap D" d
nnoremap dd "_d
nnoremap dd" _dd
vnoremap d "_d
nnoremap s" _s
vnoremap s "_s
vnoremap s" _s c "_c
vnoremap c" _c
nnoremap x "_x
vnoremap x" _x
vnoremap p "_c
"Tempel di baris baru
nnoremap, p op
nnoremap, P Op
sumber