"{register}p
tidak akan berfungsi seperti yang Anda gambarkan. Ini akan menggantikan seleksi dengan konten register. Anda harus melakukan sesuatu seperti:
" I haven't found how to hide this function (yet)
function! RestoreRegister()
let @" = s:restore_reg
return ''
endfunction
function! s:Repl()
let s:restore_reg = @"
return "p@=RestoreRegister()\<cr>"
endfunction
" NB: this supports "rp that replaces the selection by the contents of @r
vnoremap <silent> <expr> p <sid>Repl()
Yang seharusnya baik-baik saja selama Anda tidak menggunakan plugin yang memiliki vmap non-nore ke p, dan yang mengharapkan register untuk ditimpa.
Kode ini tersedia sebagai skrip di sana . Ingo Karkat juga mendefinisikan plugin yang memecahkan masalah yang sama.
regtype
(secara garis?) Dan bahwa pemetaan ulangpgvy
sudah cukup."xp
, ini tidak menimpa@"
isi dengan@x
sepertipgvy
:xnoremap p pgv@=v:register.'y'<cr>
?Aku tidak suka perilaku default vim menyalin semua teks dihapus dengan
d
,D
,c
, atauC
ke default mendaftar.Saya menyiasatinya dengan memetakan
d
ke"_d
,c
ke"_c
, dan seterusnya.Dari .vimrc saya:
sumber
Gunakan yang berikut ini:
ini akan memilih ulang dan menarik kembali teks yang ditempelkan dalam mode visual.
Sunting: agar ini bekerja,
"xp
Anda dapat melakukan:v:register
memperluas ke nama register terakhir yang digunakan dalam perintah mode normal.sumber
"xp
, pendekatan ini menimpa@"
dengan@x
.xnoremap p pgv"@=v:register.'y'<cr>
tidak berhasil untuk saya. Ini, bagaimanapun, tidak:xnoremap <expr> p 'pgv"'.v:register.'y'
g
? Saya belum pernah melihatnya sebelumnya.g
sendiri tidak melakukan apa-apa. Ini menyediakan perintah multi-tombol yang diperluas, sepertiz
. Misalnya,go
pergi ke byte ke-n dalam buffer,gj
dangk
pergi ke baris yang ditampilkan berikutnya dan sebelumnya (berbeda darijk
saat garis dibungkus),ga
menampilkan informasi tentang karakter di bawah kursor,gJ
menggabungkan baris tanpa spasi, dan di sinigv
memulihkan pemilihan visual terakhir. Anda bisa menggunakan:help gv
.:xnoremap <expr> p 'pgv"'.v:register.'y`>'
, saya menambahkan ``> `` Untuk mengembalikan posisi kursorDalam Anda
.vimrc
Saya menemukan ini dari tanggapan di utas serupa, tetapi sumber aslinya adalah http://vim.wikia.com/wiki/Replace_a_word_with_yanked_text . Ini menyebutkan beberapa kekurangan, namun berfungsi dengan baik untuk saya.
sumber
.vimrc.local
baik juga.Solusi Luc Hermitte bekerja seperti pesona. Saya menggunakannya selama sekitar satu minggu atau lebih. Kemudian saya menemukan solusi dari .vimrc Steve Losh yang berfungsi dengan baik jika YankRing adalah bagian dari daftar plugin / bundel Anda:
sumber
Coba ini di
~/.vimrc
:xnoremap
artinya ini hanya untukVisual
mode, bukanVisual + Select
mode.<expr>
berarti bahwa{rhs}
darixnoremap {lhs} {rhs}
pengaturan dievaluasi sebagai ekspresi.Dalam hal ini, ekspresi kita
'pgv"'.v:register.'y'
sedang digunakan.
untuk penggabungan.v:register
dievaluasi ke register yang digunakan selama pemenuhan pemetaan.Hasil dari
"xp
akan mengevaluasi kepgv"xy
, dimanax
register.Saya dibantu oleh jawaban untuk pertanyaan stackoverflow ini: Vim - pemetaan dengan prefiks register opsional sehubungan dengan jawaban Benoit di halaman ini
sumber
Fungsi Luc bekerja dengan baik untuk saya setelah saya membuat perubahan untuk mendukung fakta bahwa saya memiliki clipboard = set tanpa nama:
sumber
clipboard=unnamedplus
ini harus@+
daripada@*
.Luc Hermitte berhasil! Sangat bagus. Inilah solusinya yang dimasukkan ke dalam fungsi toggle, sehingga Anda dapat beralih antara perilaku normal dan put no-replace-register.
perintahnya, u mengubah perilakunya
sumber
silent! vunmap
daripadavnoremap <silent> <expr> p p
pemrograman lakban, tetapi bekerja untuk saya:
sumber
coba -
sumber