web-dev-qa-db-fra.com

Comment faire pour vim coller (et copier dans) 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 saisir manuellement.

Puis-je créer vim paste depuis et vers le presse-papiers du système?

695
Santosh Kumar

Les registres "* et "+ sont destinés au presse-papiers du système (:help registers). Selon 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, le registre "* 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 fondamentalement, le "* est analogue à la sélection de X11 PRIMAIRE (qui copie sélectionnez avec la souris et collez avec le bouton central de la souris) et "+ est analogue à la sélection de X11 PRESSE-PAPIERS (qui correspond au presse-papiers proprement dit ).

Si tout cela vous dépasse, essayez d'utiliser "*yy ou "+yy pour copier une ligne dans le Presse-papiers de votre système. En supposant que vous ayez les options de compilation appropriées, l’un ou l’autre devrait fonctionner. Vous voudrez peut-être remapper ceci en quelque chose de plus pratique pour vous. Par exemple, vous pouvez insérer vnoremap <C-c> "*y dans votre ~/.vimrc pour pouvoir sélectionner visuellement et appuyer sur Ctrl+c taper dans le presse-papier de votre système.

Sachez que copier/coller depuis le presse-papiers du système ne fonctionnera pas si :echo has('clipboard') renvoie 0. Dans ce cas, vim n'est pas compilé avec la fonction +clipboard et vous aurez installer une autre version ou la recompiler. Certaines distributions linux fournissent une installation minimale de vim par défaut, mais généralement, si vous installez package vim-gtk ou vim-gtk3], vous pouvez obtenir les fonctionnalités supplémentaires.

Vous pouvez également consulter l’option 'clipboard' décrite sous :help cb. Dans ce cas, vous pouvez :set clipboard=unnamed ou :set clipboard=unnamedplus pour que toutes les opérations de suppression/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 le remplacera.

Pour coller, vous pouvez utiliser "+p ou "*p (encore une fois, selon votre système et/ou la sélection souhaitée) ou vous pouvez les mapper sur autre chose. Je les tape explicitement, mais je me trouve souvent en mode insertion. Si vous êtes en mode insertion, vous pouvez toujours les coller avec l'indentation appropriée en utilisant <C-r><C-p>* ou <C-r><C-p>+. Voir :help i_CTRL-R_CTRL-P.

Il convient également de mentionner l'option paste de vim (:help paste). Cela met vim dans un "mode de collage" spécial qui désactive plusieurs autres options, vous permettant de coller facilement dans vim à l'aide de votre émulateur de terminal ou du raccourci de collage habituel du multiplexeur. Il vous suffit de taper :set paste pour l'activer, de coller votre contenu, puis de taper :set nopaste pour le désactiver. Vous pouvez également utiliser l'option pastetoggle pour définir un code d'activation qui bascule le mode (:help pastetoggle). Je recommande d'utiliser des registres au lieu de ces options, mais si elles sont encore trop effrayantes, cela peut être une solution de contournement pratique pendant que vous perfectionnez vos côtelettes vim.

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

811
Conner

Vous pouvez copier dans vim par le raccourci gnome-terminal pour coller. Faire le fichier en mode insertion et utiliser

Ctrl.Shiftcertains __code__v.

Remember beforehand to

 :set paste 

to avoid messing with the indentation.

130
neel

Linux

Sur mon système Linux, les registres + et * correspondent à une sélection X11, qui peut être collée à l'aide du bouton central de la souris. Lorsque :set clipboard=unnamed et :set clipboard=unnamedplus sont utilisés, les registres sont mappés dans 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 amener dans la bonne direction.

Voir également

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

39
Todd A. Jacobs

Pour ma 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
38
lis2

Ce sont les lignes dont vous avez besoin dans votre vimrc à cet effet:

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
33
Danniel Little

Je pense que cette question mérite une réponse plus objective.

Entrée en mode coller

  • ESC
  • : définir la pâte
  • presse i
  • SHIFT + Insert (avec un texte copié dans votre presse-papiers)


Quitter le mode Coller

  • ESC
  • : set nopaste
  • presse i

Vous avez collé le texte et vous pouvez taper à nouveau.

20
ivanleoncz

presse-papier

Il existe un registre spécial pour stocker cette sélection, il s’agit du registre "*". Rien n’est inséré ici à moins que l’information concernant le texte sélectionné soit sur le point de changer (par exemple, si vous cliquez avec le bouton gauche de la souris quelque part), ou si une autre application souhaite coller le texte sélectionné. Le texte est ensuite placé dans le registre "*. Par exemple, pour couper une ligne et en faire la sélection actuelle/la placer sur le CLIPBOARD:

    "*dd

De même, lorsque vous souhaitez coller une sélection à partir d'une autre application, par exemple en cliquant sur le bouton central de la souris, la sélection est d'abord placée dans le registre "*, puis" placée "comme tout autre registre. Par exemple, pour mettre la sélection (contenu du CLIPBOARD):

    "*p

enregistre E354

> There are nine types of registers:                      
> 1. The unnamed register ""
> 2. 10 numbered registers "0 to "9
> 3. The small delete register "-
> 4. 26 named registers "a to "z or "A to "Z
> 5. four read-only registers ":, "., "% and "#
> 6. the expression register "=
> 7. The selection and drop registers "*, "+ and "~ 
> 8. The black hole register "_
> 9. Last search pattern register "/

Coller du presse-papier

1. Clipboard: Copy
2. Vim insertmode, middle mouse key

Vérifier la prise en charge du presse-papier X11 dans le terminal

Lorsque vous souhaitez exécuter Vim dans un terminal, vous devez rechercher une version de Vim qui a été compilée avec le support du presse-papiers. Vérifiez la prise en charge du presse-papiers X11 à partir de la console, tapez:

% vim --version

Si vous voyez "+ xterm_clipboard", vous êtes prêt à partir.

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

Le serveur X conserve trois sélections, appelées:

PRIMAIRE, SECONDAIRE et CLIPBOARD

La sélection PRIMARY est généralement utilisée pour implémenter le copier-coller via le bouton central de la souris. Les sélections SECONDARY et CLIPBOARD sont moins fréquemment utilisées par les programmes d'application.

http://linux.die.net/man/1/xsel

16
The Demz

J'ai essayé les suggestions ci-dessus et aucune d'entre elles n'a fonctionné dans mon environnement. (Windows PuTTY clone sur ssh)

Quelques recherches supplémentaires sont apparues: https://unix.stackexchange.com/questions/110684/copy-paste-into-sshd-vim-from-local-windows-clipboard

L'un des commentaires suggérait d'utiliser SHIFT+INSERT, qui permettait de coller du presse-papiers du bureau dans le tampon de Vim. Ctrl-C travaillait déjà pour copier dans le presse-papiers du bureau à partir de Vim.

12
jinksPadlock

Je n'avais pas de presse-papiers, j'ai donc proposé cette solution alternative avec xsel:

Ajoutez à votre ~/.vimrc:

vnoremap <C-C> :w !xsel -b<CR><CR>

9
rotestein

Une note rapide pour les personnes dont l’installation de vim ne prend pas en charge les registres * et +. Il n'est pas nécessaire de télécharger une nouvelle installation de vim à coller dans le presse-papiers. Voici une méthode alternative:

1) Installez parcellite (un gestionnaire de presse-papiers avec une faible empreinte mémoire);

2) Dans votre fichier .vimrc, ajoutez les éléments suivants:

command Clip r !parcellite -c

3) Redémarrez vim.

Maintenant, lorsque vous tapez: Clip en tant que commande ex, le contenu du presse-papiers est collé au niveau du curseur. Vous pouvez également mapper la nouvelle commande sur une touche de fonction afin de pouvoir le faire en une seule frappe.

6
lovecraftian

Cela fonctionne pour moi: Ctrl+Shift+V

3
Boseam

Suite à la réponse de Conner, qui était excellente, mais C-R C-p + et C-R C-p * en mode insertion est un peu gênant. Idem "*p et "+p à partir du mode commande.

un gourou VIM a suggéré ce qui suit pour mapper C-v à ce que C-r C-p + fait.

Vous pourriez avoir :inoremap <C-v> <C-o>"+p pour le mode insertion uniquement

si vous vouliez vraiment écraser le mode visuel par blocs (non recommandé par lui, car le mode visuel est bon), vous pourriez avoir map <C-v> "+p

2
barlop

Si vous utilisez vim sous MAC OSX, il est malheureusement livré avec une version plus ancienne et n’est pas conforme aux options du Presse-papiers. Heureusement, les homebrews peuvent facilement résoudre ce problème.

installer vim:

brew install vim --with-lua --with-override-system-vim

installer la version de vim:

brew install macvim --with-lua --with-override-system-vim

redémarrez le terminal pour prendre effet.


ajoute la ligne suivante à ~/.vimrc
set clipboard=unnamed

vous pouvez maintenant copier la ligne dans vim avec yy et la coller dans l’ensemble du système.

2
anonymous

La solution la plus simple, qui fonctionne également entre différentes machines Linux via ssh, est la suivante:

  1. Vérifiez si vim prend en charge le presse-papiers X-11: vim --version | grep clipboard. S'il renvoie -clipboard et -xterm_clipboard, vous devez installer soit vim-gtk ou vim-gnome (gvim sur Arch Linux).

  2. Ajoutez les lignes suivantes à votre .vimrc:

set clipboard=unnamedplus
set paste
  1. Si vous vous connectez sur une autre machine via ssh, utilisez l'option -Y: ssh -Y machine

Maintenant, copier et coller devrait fonctionner exactement comme prévu sur une seule machine et sur différentes machines en utilisant uniquement y pour yank et p pour coller. NB modifier .vimrc sur toutes les machines sur lesquelles vous souhaitez utiliser cette fonctionnalité.

1
chao

Basé sur la réponse @ lis2, j'utilise une configuration plus simple qui ne forcera pas le mode insertion à la fin:

_" Copy and paste
if has('clipboard') && !has('gui_running')
  vnoremap <C-c> "+y
  vnoremap <C-x> "+d
  vnoremap <C-v> "+p
  inoremap <C-v> <C-r><C-o>+
endif
_

Notez que tout cela annule les mappages Vim par défaut:

  • v_CTRL-C : arrêter le mode visuel
  • v_CTRL-X : soustraire [nombre] du nombre
  • v_CTRL-V : mode visuel par blocs
  • i_CTRL-V : insère le prochain non-chiffre littéralement, qui est également mappé sur _i_CTRL-Q_

En guise d'alternative, on peut utiliser des clés inspirées des verbes "yank", "delete" et "put" Vim: _<C-y>_, _<C-d>_ et _<C-p>_. Ceux-ci ne remplaceraient qu'un seul mappage par défaut:

  • i_CTRL-P : recherche en amont du mot clé pour la complétion
1
ericbn

Si vous utilisez d'abord une souris, faites

 :set paste 

Ensuite, right click mouse et le contenu du tampon seront collés.

1
Mohammed Rafeeq

Les autres solutions sont bonnes si vous souhaitez modifier votre vimrc, etc ... Cependant, je voulais un moyen simple de copier from = vim à mon clavier système. C'est ce que je suis venu avec.

  • Sélectionnez le texte que vous souhaitez copier en mode visuel v
  • Appuyez sur : (l’écran affichera automatiquement :'<,'>).
  • Tapez y *oy + (selon votre système) pour transférer le texte sélectionné dans le Presse-papiers du système.
1
NateW

En plus du paramètre :set clipboard=unnamed, vous devez utiliser mvim -v que vous pouvez obtenir avec brew install macvim si vous utilisez vim sur Terminal.app sous Mac OS X 10.9. Vim par défaut ne supporte pas l'option presse-papier.

1
Nobu

Ce dont vous avez vraiment besoin, c'est EasyClip . Il fera exactement cela et bien plus encore ...

1
Scott Wade

Il peut également être utile de mentionner que, sur OSX utilisant Vim, vous pouvez sélectionner du texte avec la souris, Cmd-C pour copier dans le Presse-papiers du système OSX et le texte copié sera disponible dans le Presse-papiers en dehors de Vim.

En d’autres termes, OSX le traite comme s’il s’agissait d’une fenêtre normale, et c’est là que le bouton tant décrié Apple "Commande" est très utile.

B-30

1
B-30

J'ai rencontré ce problème sur un Macbook Pro mi-2017 exécutant vim dans iTerm2 comme principal environnement de développement.

Comme d'autres réponses l'ont suggéré, j'ai exécuté vim --version et constaté qu'il renvoie -clipboard, ce qui signifie que la version de vim fournie avec ma machine n'a pas été compilée avec l'option presse-papiers.

Le package homebrew pour vim semble compiler avec l'option clipboard. Le correctif pour moi était donc le suivant:

  1. Exécuter brew install vim
  2. Ajouter set clipboard+=unnamed à mon fichier ~/.vimrc
  3. Fermer et rouvrir iTerm2
1
NM Pennypacker

Avec Vim 8+ sous Linux ou Mac, vous pouvez désormais utiliser simplement le collage natif du système d'exploitation (ctrl+shift+V sous Linux, cmd+V sur Mac). N'appuyez pas sur i pour le mode Insertion.

Il collera le contenu du presse-papiers de votre système d'exploitation, en préservant les espaces et les onglets sans ajouter d'auto-identification. C'est l'équivalent de l'ancienne méthode :set paste, i, ctrl+shift+V, esc, :set nopaste.

Vous n'avez même plus besoin des fonctionnalités +clipboard ou +xterm_clipboard vim. Cette fonctionnalité est appelée "pâte entre crochets". Pour plus de détails, voir Désactivation du retrait automatique lors du collage de texte dans vim

1
wisbucky

Pour certains claviers internationaux, vous devrez peut-être appuyer sur "+Space pour obtenir un ".

Donc, dans ce cas, vous devrez appuyer sur "Space+y ou "Space*y copier.

Et "Space+p ou "Space*p coller.

0
Arthur F

Il y a deux façons simples de faire cela. Créez votre fichier en mode insertion et 1) appuyez sur le bouton du milieu (la molette de défilement) de votre souris, ou 2) Ctrl + Maj + V

0
user1898814

Lorsque j'utilise mon vim Debian non intégré à Gnome (vim --version | clip # grep ne montre aucun support du presse-papiers), je peux copier dans le presse-papiers après avoir maintenu la touche Maj enfoncée et sélectionné le texte avec la souris, comme avec tout autre programme de malédictions. Comme je l'ai découvert d'après un commentaire de @Conner, c'est le terminal (gnome-terminal dans mon cas) qui désactive le compte rendu des événements de la souris lorsqu'il détecte ma pression sur Shift. Je suppose que les programmes basés sur curses peuvent recevoir des événements de souris après avoir envoyé une certaine séquence d'échappement au terminal.

0
eel ghEEz

Depuis vim 8 , un clic droit active le mode visuel par défaut. Cela empêche le copier-coller "normal" (appelez-le un "défaut par conception" https://github.com/vim/vim/issues/1326 ). Corrigez ça en faisant:

echo "set mouse-=a" >> ~/.vimrc.

Quittez et redémarrez vim.

0
dr0i

Si vous êtes sur Windows et que vous souhaitez coller le contenu du Presse-papiers du système à l'aide de p, tapez cette commande.

:set clipboard = unnamed

Cela a résolu mon problème.

0
vincent mathew