Définir des commandes personnalisées pour les registres * et +

9

Si j'utilise une version de Vim avec la xterm_clipboardfonctionnalité, le contenu du presse-papiers du système est disponible via le +registre.

Si la version que j'utilise n'a pas cette fonctionnalité, puis-je faire en sorte que le "+registre appelle mes programmes personnalisés pour récupérer et définir le presse-papiers du système ( xsel -boet xsel -bi, ou de même avec xclip)? De même avec "*pour appeler xsel -poet xsel -pi.

Le but est de pouvoir taper quelque chose comme "+psans avoir à se soucier de la disponibilité de la fonctionnalité. Typing :r !xsel -b<Enter>est pas ce que je cherche: Je veux les mêmes frappes au travail, et je veux la pâte variantes de suivre ce qui est disponible pour les registres « vrais » ( P, gp...).

Bonus: puis-je définir des commandes personnalisées pour d'autres noms de registre?

Gilles 'SO- arrête d'être méchant'
la source

Réponses:

7

Quelques <expr>cartes devraient pouvoir faire le travail ici. La structure de base serait

function! ClipboardOrXclip(command, register)
    if a:register !~ '[+*]' || has('xterm_clipboard') || has('gui_running')
        " Just return the original command if the clipboard is accessible
        " or it's not a register that should be handled by xsel
        return a:command
    endif
    if a:register == '+'
        return "<Esc>:r !xsel -bo<CR>"
    else
        return "<Esc>:r !xsel -po<CR>"
    endif
endfunction

nnoremap <silent> <expr> p ClipboardOrXclip('p', v:register)

La fonction aurait besoin d'être élargi pour gérer toutes les variations de p, P, gp, etc. , mais cela devrait être un bon point de départ.

jamessan
la source
Cela semble être sur la bonne voie, mais cela ne fonctionne pas. Un simple p(sans "nom précédent et nom de registre) ne fait rien d'autre que faire "papparaître dans la ligne d'état. "apest équivalent à a, "bpbips,… je ne comprends pas la logique. "+bips immédiatement, je ne dis même pas que je veux dire +ou *comme nom de registre.
Gilles 'SO- arrête d'être méchant'
1
En supposant que ces problèmes fondamentaux sont résolus, existe-t-il une liste exhaustive des commandes que je devrais contourner? L'ensemble semble intimidant, surtout si je veux également soutenir le tirage.
Gilles 'SO- arrête d'être méchant'
@Gilles Mis à jour pour corriger le comportement avec les registres non + + / *. Le problème avec "+quand votre vim a -xterm_clipboardest plus difficile car il n'obtient jamais cette fonction. La spécification d'un registre non valide ( +) annule la commande. Donc, il semble que le comportement doit être inversé, mappez le "+ou "*puis manipulez la commande spécifiée par l'utilisateur ...
jamessan