"{register}p
não funcionará como você descreve. Substituirá a seleção pelo conteúdo do cadastro. Em vez disso, você terá que fazer algo como:
" 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()
O que deve funcionar, contanto que você não use um plugin que tenha um vmap não nore para p, e que espere que um registro seja sobrescrito.
Este código está disponível como um script lá . Ingo Karkat também definiu um plugin para resolver o mesmo problema.
regtype
(linewise?) E que remapear p topgvy
é suficiente."xp
, isso não substitui o@"
conteúdo com@x
diferente depgvy
:xnoremap p pgv@=v:register.'y'<cr>
?Eu não gosto do comportamento vim padrão de copiar todo o texto eliminado com
d
,D
,c
ouC
para o registro padrão.Eu resolvi isso mapeando
d
para"_d
,c
para"_c
e assim por diante.Do meu .vimrc:
fonte
Use o seguinte:
isso selecionará novamente e puxará novamente qualquer texto colado no modo visual.
Editar: para que isso funcione,
"xp
você pode fazer:v:register
expande para o último nome de registro usado em um comando de modo normal.fonte
"xp
, essa abordagem sobrescreve@"
com@x
.xnoremap p pgv"@=v:register.'y'<cr>
não funcionou para mim. Isso, no entanto, faz:xnoremap <expr> p 'pgv"'.v:register.'y'
g
faz? Eu não vi isso antes.g
sozinho não faz nada. Ele fornece comandos estendidos de várias teclas, comoz
. Por exemplo,go
vai para o enésimo byte no buffergj
egk
vai para a próxima linha exibida e a anterior (diferente dejk
quando as linhas são quebradas),ga
exibe informações sobre o caractere sob o cursor,gJ
junta linhas sem espaço e aquigv
restaura a última seleção visual. Você pode usar:help gv
.:xnoremap <expr> p 'pgv"'.v:register.'y`>'
, adicionei `` `>` `Para restaurar a posição do cursorNa tua
.vimrc
Eu encontrei isso em uma resposta em um tópico semelhante, mas a fonte original era http://vim.wikia.com/wiki/Replace_a_word_with_yanked_text . Ele menciona algumas desvantagens, mas funciona bem para mim.
fonte
.vimrc.local
está bem também.A solução de Luc Hermitte funciona perfeitamente. Eu estava usando por cerca de uma semana ou assim. Então descobri uma solução do .vimrc de Steve Losh que funciona muito bem se o YankRing fizer parte da sua linha de plug-in / pacote:
fonte
Experimente isso em seu
~/.vimrc
:xnoremap
significa que isso é apenas paraVisual
modo, nãoVisual + Select
modos.<expr>
significa que{rhs}
axnoremap {lhs} {rhs}
configuração é avaliada como uma expressão.Nesse caso, nossa expressão de
'pgv"'.v:register.'y'
está usando.
para concatenação.v:register
é avaliado para o registro que está sendo usado durante o cumprimento do mapeamento.O resultado de
"xp
avaliaria parapgv"xy
, ondex
está o registro.Fui ajudado por uma resposta a esta questão stackoverflow: Vim - mapeamento com um prefixo de registro opcional em conjunto com a resposta de Benoit nesta página
fonte
A função de Luc funcionou bem para mim depois que fiz uma alteração para suportar o fato de que tenho a área de transferência = conjunto sem nome:
fonte
clipboard=unnamedplus
isso tem que ser em@+
vez de@*
.Luc Hermitte fez o truque! Muito bom. Aqui está sua solução colocada em uma função de alternância, para que você possa alternar entre o comportamento normal e a colocação sem substituição de registro.
o comando, você alterna o comportamento
fonte
silent! vunmap
vez devnoremap <silent> <expr> p p
programação de fita adesiva, mas funciona para mim:
fonte
experimentar -
fonte