Question

Quelqu'un connaît-il un moyen de coller sur une zone sélectionnée visuellement sans que la sélection soit placée dans le registre par défaut?

Je sais que je peux résoudre le problème en collant toujours à partir d'un registre explicite. Mais c’est pénible de taper & "; x p au lieu de juste p

Était-ce utile?

La solution

"{register}p ne fonctionnera pas comme vous le décrivez. Il remplacera la sélection par le contenu du registre. Au lieu de cela, vous devrez 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 convenir tant que vous n'utilisez pas de plug-in doté d'une vmap non-nore vers p, et qui s'attend à ce qu'un registre soit écrasé.

Ce code est disponible sous forme de script il . Ingo Karkat a également défini un plugin pour résoudre le même problème.

Autres conseils

Je n'aime pas le comportement par défaut de vim consistant à copier tout le texte supprimé avec d, D, c ou C dans le registre par défaut.

Je l'ai compris en mappant "_d à "_c, <=> à <=>, etc. ".

De mon .vimrc:

"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

Utilisez les éléments suivants:

xnoremap p pgvy

Ceci resélectionnera et retranchera tout texte collé en mode visuel.

Modifier: pour que cela fonctionne avec "xp vous pouvez faire:

xnoremap p pgv"@=v:register.'y'<cr>

v:register passe au dernier nom de registre utilisé dans une commande en mode normal.

Dans votre .vimrc

xnoremap p "_dP

J'ai trouvé cela grâce à 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 quelques inconvénients, mais cela fonctionne très bien pour moi.

La fonction de Luc a bien fonctionné pour moi après avoir apporté une modification pour prendre en charge le fait que j'ai presse-papiers = ensemble non nommé:

function! RestoreRegister()
    let @" = s:restore_reg
    if &clipboard == "unnamed"
        let @* = s:restore_reg
    endif
    return ''
endfunction

Luc Hermitte a fait le tour! Très bien. Voici sa solution dans une fonction à bascule, vous pouvez donc basculer entre un comportement normal et une vente sans remplacement.

la commande, u bascule le comportement

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>

essayer -

:set guioptions-=a
:set guioptions-=A
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top