887 votes

Comment faire en sorte que vim colle depuis (et copie vers) le presse-papiers du système ?

Contrairement aux autres éditeurs, vim stocke le texte copié dans son propre presse-papiers. Il m'est donc très difficile de copier du texte d'une page web et de le coller dans le fichier de travail actuel. Il se trouve que je dois soit ouvrir gedit, soit le taper manuellement.

Puis-je faire en sorte que vim colle depuis et vers le presse-papiers du système ?

10 votes

7 votes

Copier "+y Coller "+p Fonctionne comme le copier-coller, sauf que vous spécifiez le registre avant.

2 votes

Pour utiliser les commandes suivantes, assurez-vous que vous avez fait sudo apt-get install vim-gnome qui ajoutera cette fonctionnalité à vim intégré en utilisant le presse-papiers du système.

982voto

Conner Points 10373

Le site "* et "+ sont destinés au presse-papiers du système ( :help registers ). En fonction de votre système, ils peuvent faire des choses différentes. Par exemple, sur les systèmes qui n'utilisent pas X11, comme OSX ou Windows, la commande "* est utilisé pour lire et écrire dans le presse-papiers du système. Sur les systèmes X11, les deux registres peuvent être utilisés. Voir :help x11-selection pour plus de détails, mais en gros, le "* est analogue à celle de X11 _PRIMARY_ sélection (qui copie généralement les éléments que vous sélectionnez avec la souris et les colle avec le bouton central de la souris) et "+ est analogue à celle de X11 _CLIPBOARD_ (qui est le presse-papiers proprement dit).

Si tout cela vous est passé au-dessus de la tête, essayez d'utiliser "*yy ou "+yy pour copier une ligne dans le presse-papiers de votre système. En supposant que vous avez les options de compilation appropriées, l'une ou l'autre devrait fonctionner.

Vous voudrez peut-être remapper cela à quelque chose de plus pratique pour vous. Par exemple, vous pourriez mettre vnoremap <C-c> "*y dans votre ~/.vimrc afin que vous puissiez visuellement sélectionner et appuyer sur Ctrl + c pour l'envoyer dans le presse-papiers de votre système.

Sachez que le copier/coller à partir du presse-papiers du système ne fonctionnera pas si :echo has('clipboard') retourne 0 . Dans ce cas, vim n'est pas compilé avec l'option +clipboard et vous devrez installer une autre version ou la recompiler. Certains distros linux fournissent une installation minimale de vim par défaut, mais si vous installer le vim-gtk ou vim-gtk3 paquet vous pouvez néanmoins bénéficier des fonctionnalités supplémentaires.

Vous pouvez également jeter un coup d'œil à la page d'accueil du site Web de la Commission européenne. 'clipboard' option décrite dans :help cb . Dans ce cas, vous pouvez :set clipboard=unnamed ou :set clipboard=unnamedplus pour que toutes les opérations d'arrachage/suppression soient automatiquement copiées dans le presse-papiers du système. Cela pourrait être un inconvénient dans certains cas où vous stockez quelque chose d'autre dans le presse-papiers, car cela l'écrasera.

Pour coller, vous pouvez utiliser "+p ou "*p (là encore, cela dépend de votre système et/ou de la sélection souhaitée) ou vous pouvez les associer à autre chose. Je les tape explicitement, mais je me retrouve souvent en mode insertion. Si vous êtes en mode insertion, vous pouvez quand même les coller avec une indentation correcte en utilisant <C-r><C-p>* ou <C-r><C-p>+ . Voir :help i_CTRL-R_CTRL-P .

Il convient également de mentionner la fonction de vim paste option ( :help paste ). Cela place vim dans un environnement spécial "mode collage" qui désactive plusieurs autres options, vous permettant de coller facilement dans vim en utilisant le raccourci coller familier de votre émulateur de terminal ou de votre multiplexeur. (Il suffit de taper :set paste pour l'activer, collez votre contenu, puis tapez :set nopaste pour le désactiver). Vous pouvez également utiliser l'option pastetoggle pour définir un code de touche qui fait basculer le mode ( :help pastetoggle ).

Je recommande d'utiliser les registres à la place de ces options, mais si elles sont encore trop effrayantes, cela peut être une solution de rechange pratique pendant que vous perfectionnez vos compétences en matière de vim.

Voir :help clipboard pour des informations plus détaillées.

127 votes

C'est très instructif, mais pouvez-vous résumer les frappes à effectuer pour coller à partir du presse-papiers du système... par exemple, que fait-on avec "*p ? Dois-je appuyer sur Shift-', puis sur Shift-8, puis sur p, etc.

13 votes

Oui, tapez ces trois caractères dans l'ordre. De nombreuses commandes dans vim utilisent ce que l'on appelle le "mode d'attente de l'opérateur", où une touche est pressée et vim attend d'autres touches. Prenons l'exemple de dd par exemple. Le premier d entre en mode opérateur en attente, puis le deuxième d termine la commande et supprime la ligne. Si vous tapez dG Toutefois, le G permet d'effacer jusqu'à la fin du fichier au lieu d'effacer simplement la ligne. Les registres utilisent ce même principe pour permettre à diverses commandes de les utiliser.

63 votes

Un point important : vous devez installer le vim-gtk (sous Debian, au moins), pour obtenir vim qui est compilé avec +xterm_clipboard . Il m'a fallu 40 minutes pour le découvrir, et seulement quelques secondes pour sudo apt-get install vim-gtk .

224voto

neel Points 612

Vous pouvez coller dans vim par le raccourci de gnome-terminal pour coller. Placez le fichier en mode insertion et utilisez

Ctrl + Shift + v .

N'oubliez pas à l'avance de

 :set paste 

pour éviter de modifier l'indentation.

20 votes

Cela perturbe l'indentation s'il y a plusieurs lignes comme la boucle for de python.

12 votes

Utiliser une bascule de collage pour le mode insertion. Par exemple, définissez pastetoggle=<F2> Puis, en mode insertion, appuyez sur <F2> et insérez votre code python.

1 votes

Si les tabulations/espaces blancs, eols etc. sont affichés comme caractères visibles (via l'option listchars), alors ces caractères de substitution seront copiés à la place des caractères cachés.

46voto

CodeGnome Points 25402

Linux

Sur mon système Linux, le + et * correspondent à une sélection X11, qui peut être collée avec le bouton central de la souris. Lorsque :set clipboard=unnamed et :set clipboard=unnamedplus sont utilisés, les registres sont alors mis en correspondance avec le presse-papiers et peuvent être collés avec CTRL-V.

Les spécificités semblent dépendre quelque peu de la configuration et du système, donc votre kilométrage variera certainement. Cela devrait cependant vous mettre sur la bonne voie.

Voir aussi

http://vim.wikia.com/wiki/Accessing_the_system_clipboard

3 votes

Seulement * correspond au registre primaire de X11 (qui est normalement collé par la souris). + correspond au registre du presse-papiers de X11 normalement collé par les raccourcis.

0 votes

@ZyX Pas sur mon système, mais votre kilométrage peut certainement varier. Il est préférable de configurer explicitement le comportement que vous souhaitez si vous voulez une expérience cohérente entre les plateformes et les versions logicielles.

1 votes

Je crois que cela signifie que vous avez un gestionnaire de presse-papiers comme klipper/glipper, ils sont capables de synchroniser deux tampons. Cela ne change rien au fait que vim utilise * pour le primaire et + pour les registres X11 du presse-papiers, vous pouvez le voir dans le source de vim : ces sont fixées à cet endroit et ne sont jamais modifiées, et clip_star et clip_plus sont toujours utilisés pour * et + respectivement.

45voto

lis2 Points 1398

Pour moi, cette configuration fonctionne pour copier et coller.

" copy and paste
vmap <C-c> "+yi
vmap <C-x> "+c
vmap <C-v> c<ESC>"+p
imap <C-v> <ESC>"+pa

0 votes

Dans quoi avez-vous collé ?

0 votes

C'est, à mon avis, une meilleure solution que de définir clibboard sur un nom inconnu - pour ne pas perturber le presse-papiers du système d'exploitation à chaque action x/dd/y, etc. Et sur un Mac, il peut être préférable de changer le modificateur C(ctrl) en D pour le mappage des combinaisons cmd+c/x/v.

39voto

Danniel Little Points 61

Ce sont les lignes dont vous avez besoin dans votre vimrc à cette fin :

set clipboard+=unnamed  " use the clipboards of vim and win
set paste               " Paste from a windows or from vim
set go+=a               " Visual selection automatically copied to the clipboard

2 votes

J'aime votre solution. J'aimerais une meilleure explication.

0 votes

Excellent. L'utilisation de registres me fait toujours hésiter et réfléchir. C'est beaucoup mieux

0 votes

Ma version de vim a +clipboard et cette option ne fonctionne pas pour moi. J'utilise Byobu (qui utilise Tmux sous le capot).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X