Seçimi varsayılan kayıt defterine yerleştirmeden görsel olarak seçilen bir alanı yapıştırmanın bir yolunu bilen var mı?
Her zaman açık bir kayıttan yapıştırarak sorunu çözebileceğimi biliyorum. Ama yazmak "xpyerine boynundaki bir acıp
Seçimi varsayılan kayıt defterine yerleştirmeden görsel olarak seçilen bir alanı yapıştırmanın bir yolunu bilen var mı?
Her zaman açık bir kayıttan yapıştırarak sorunu çözebileceğimi biliyorum. Ama yazmak "xpyerine boynundaki bir acıp
Yanıtlar:
"{register}p
tarif ettiğiniz gibi çalışmayacak. Seçimi kayıt içeriğiyle değiştirecektir. Bunun yerine şöyle bir şey yapmanız gerekecek:
" 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()
Bu, p'ye nore olmayan bir vmap'e sahip bir eklenti kullanmadığınız ve bir yazmacın üzerine yazılmasını bekleyen bir eklenti kullanmadığınız sürece iyi olacaktır.
Bu kod, orada bir komut dosyası olarak mevcuttur . Ingo Karkat da aynı sorunu çözen bir eklenti tanımladı .
regtype
(linewise?) 'I hatırlamayacaktır ve p'yi yeniden eşleştirmek pgvy
yeterlidir.
"xp
, bu @"
içeriklerin üzerine @x
farklı yazmazpgvy
:xnoremap p pgv@=v:register.'y'<cr>
?
Birlikte silinen tüm metin kopyalama varsayılan vim davranışı sevmiyorum d
, D
, c
, veya C
içine varsayılan kayıt.
Ben eşleyerek etrafında ele verdik d
için "_d
, c
için "_c
, vb.
.Vimrc dosyamdan:
"These are to cancel the default behavior of d, D, c, C
" to put the text they delete in the default register.
" Note that this means e.g. "ad won't copy the text into
" register a anymore. You have to explicitly yank it.
nnoremap d "_d
vnoremap d "_d
nnoremap D "_D
vnoremap D "_D
nnoremap c "_c
vnoremap c "_c
nnoremap C "_C
vnoremap C "_C
Aşağıdakileri kullanın:
xnoremap p pgvy
bu görsel modda yapıştırılan herhangi bir metni yeniden seçecek ve yeniden çekecektir.
Düzenleme: bunun birlikte çalışması için "xp
şunları yapabilirsiniz:
xnoremap p pgv"@=v:register.'y'<cr>
v:register
normal mod komutunda kullanılan son kayıt adına genişler.
"xp
, bu yaklaşım üzerine yazar @"
ile @x
.
xnoremap p pgv"@=v:register.'y'<cr>
benim için işe yaramadı. Ancak bu şunları yapar:xnoremap <expr> p 'pgv"'.v:register.'y'
g
yaptığı hakkında bir satır ekleyebilir misiniz ? Daha önce görmedim.
g
tek başına hiçbir şey yapmaz. Gibi genişletilmiş, çok tuşlu komutlar sağlar z
. Örneğin, go
tampon içerisinde n'inci byte gider gj
ve gk
bir sonraki ve önceki görüntülenen hattına (farklılık gitmek jk
, çizgiler sarılmış zaman) ga
, imlecin altındaki karakteri üzerinde bilgileri görüntüler gJ
boşluk bırakmadan çizgiler katılır ve burada gv
geçen görsel seçimi geri yükler. Kullanabilirsiniz:help gv
.
:xnoremap <expr> p 'pgv"'.v:register.'y`>'
, ``> `` İmleç konumunu geri yüklemek için
Senin içinde .vimrc
xnoremap p "_dP
Bunu benzer bir başlıktaki yanıttan buldum, ancak orijinal kaynak http://vim.wikia.com/wiki/Replace_a_word_with_yanked_text idi . Bazı dezavantajlardan bahsediyor, ancak benim için iyi çalışıyor.
.vimrc.local
de sorun değil.
Luc Hermitte'nin çözümü bir cazibe gibi çalışıyor. Yaklaşık bir hafta kadar kullanıyordum. Sonra Steve Losh'un .vimrc dosyasından, YankRing eklenti / paket programınızın bir parçasıysa iyi çalışan bir çözüm keşfettim :
function! YRRunAfterMaps()
" From Steve Losh, Preserve the yank post selection/put.
vnoremap p :<c-u>YRPaste 'p', 'v'<cr>gv:YRYankRange 'v'<cr>
endfunction
Bunu şu cihazınızda deneyin ~/.vimrc
:
xnoremap <expr> p 'pgv"'.v:register.'y'
xnoremap
Visual
bunun Visual + Select
modlar için değil , yalnızca mod için olduğu anlamına gelir .
<expr>
bu araçlar {rhs}
arasında xnoremap {lhs} {rhs}
ayarı bir ifade olarak değerlendirilir.
Bu durumda bizim ifademiz birleştirme için 'pgv"'.v:register.'y'
kullanılıyor .
.
v:register
eşlemenin gerçekleştirilmesi sırasında kullanılan sicile değerlendirilir.
Sonucu "xp
şu şekilde değerlendirilirpgv"xy
, nerede x
kayıt olduğunu.
Bu stackoverflow sorusunun cevabından yardım aldım: Vim - Benoit'in bu sayfadaki cevabı ile birlikte isteğe bağlı bir kayıt öneki ile eşleme
Clipboard = isimsiz setim olduğu gerçeğini desteklemek için bir değişiklik yaptıktan sonra Luc'un işlevi benim için iyi çalıştı:
function! RestoreRegister()
let @" = s:restore_reg
if &clipboard == "unnamed"
let @* = s:restore_reg
endif
return ''
endfunction
clipboard=unnamedplus
gerekir . @+
@*
Luc Hermitte hile yaptı! Gerçekten iyi. İşte onun çözümü bir geçiş fonksiyonuna yerleştirilmiş, böylece normal davranış ve kayıt değiştirmeyen koyma arasında geçiş yapabilirsiniz.
komut, u davranışı değiştirir
let s:putSwap = 1
function TogglePutSwap()
if s:putSwap
vnoremap <silent> <expr> p <sid>Repl()
let s:putSwap = 0
echo 'noreplace put'
else
vnoremap <silent> <expr> p p
let s:putSwap = 1
echo 'replace put'
endif
return
endfunction
noremap ,p :call TogglePutSwap()<cr>
silent! vunmap
yerine tercih etvnoremap <silent> <expr> p p
koli bandı programlama, ancak benim için çalışıyor:
nmap viwp viwpyiw
nmap vi'p vi'pyi'
nmap vi"p vi"pyi"
nmap vi(p vi(pyi(
nmap vi[p vi[pyi[
nmap vi<p vi<pyi<
Deneyin -
:set guioptions-=a
:set guioptions-=A