"{register}p
ne fonctionnera pas comme vous le décrivez. Il remplacera la sélection par le contenu du registre. Vous devrez à la place faire quelque chose comme:
" 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()
Ce qui devrait être bien tant que vous n'utilisez pas un plugin qui a un vmap non-nore vers p, et qui s'attend à ce qu'un registre soit écrasé.
Ce code est disponible en tant que script il . Ingo Karkat a également défini un plugin résolvant le même problème.
regtype
(linewise?) Et que le remappage de p àpgvy
est suffisant."xp
, cela n'écrase pas le@"
contenu avec@x
contrairementpgvy
:xnoremap p pgv@=v:register.'y'<cr>
?Je ne aime pas le comportement de vim par défaut de copier tout le texte supprimé avec
d
,D
,c
ouC
dans le registre par défaut.Je l'ai contourné en mappant
d
vers"_d
,c
vers"_c
, etc.Depuis mon .vimrc:
la source
Utilisez le suivant:
cela resélectionnera et re-yank tout texte collé en mode visuel.
Edit: pour que cela fonctionne avec,
"xp
vous pouvez faire:v:register
se développe jusqu'au dernier nom de registre utilisé dans une commande en mode normal.la source
"xp
, cette approche remplace@"
par@x
.xnoremap p pgv"@=v:register.'y'<cr>
n'a pas fonctionné pour moi. Ceci, cependant, fait:xnoremap <expr> p 'pgv"'.v:register.'y'
g
fait? Je ne l'ai jamais vu.g
seul ne fait rien. Il fournit des commandes étendues à plusieurs touches, commez
. Par exemple,go
va au nième octet dans la mémoire tampon,gj
etgk
va à la ligne suivante et précédente affichée (diffère dejk
quand les lignes sont enveloppées),ga
affiche des informations sur le caractère sous le curseur,gJ
joint les lignes sans espace etgv
restaure ici la dernière sélection visuelle. Vous pouvez utiliser:help gv
.:xnoremap <expr> p 'pgv"'.v:register.'y`>'
, j'ai ajouté ``> `` Pour restaurer la position du curseurDans votre
.vimrc
J'ai trouvé cela à partir d'une réponse sur un fil similaire, mais la source d'origine était http://vim.wikia.com/wiki/Replace_a_word_with_yanked_text . Il mentionne certains inconvénients, mais cela fonctionne très bien pour moi.
la source
.vimrc.local
est OK aussi.La solution de Luc Hermitte fonctionne comme un charme. Je l'ai utilisé pendant environ une semaine. Puis j'ai découvert une solution de .vimrc Steve Losh qui fonctionne bien si YankRing fait partie de votre gamme de plugins / bundles:
la source
Essayez ceci dans votre
~/.vimrc
:xnoremap
signifie que ce n'est que pour leVisual
mode, pas pour lesVisual + Select
modes.<expr>
signifie que{rhs}
lexnoremap {lhs} {rhs}
paramètre est évalué comme une expression.Dans ce cas, notre expression de
'pgv"'.v:register.'y'
utilise.
pour la concaténation.v:register
est évalué par rapport au registre utilisé lors de l'exécution du mappage.Le résultat de
"xp
serait évalué àpgv"xy
, oùx
est le registre.J'ai été aidé par une réponse à cette question de stackoverflow: Vim - mapping avec un préfixe de registre optionnel en conjonction avec la réponse de Benoit sur cette page
la source
La fonction de Luc a bien fonctionné pour moi après avoir apporté une modification pour prendre en charge le fait que j'ai clipboard = ensemble sans nom:
la source
clipboard=unnamedplus
ceci doit être@+
au lieu de@*
.Luc Hermitte a fait l'affaire! Très bien. Voici sa solution mise dans une fonction de bascule, vous pouvez donc basculer entre le comportement normal et la mise sans remplacement du registre.
la commande, u bascule le comportement
la source
silent! vunmap
au lieu devnoremap <silent> <expr> p p
programmation de ruban adhésif, mais fonctionne pour moi:
la source
essayez -
la source