web-dev-qa-db-fra.com

Comment copier dans le presse papier dans Vim?

Est-il possible de copier dans le presse-papier directement à partir de Vim? yy ne copie que des fichiers dans la mémoire tampon interne de Vim. Je veux copier dans le presse-papiers du système d'exploitation. Existe-t-il une telle commande dans Vim ou pouvez-vous seulement retirer des choses dans Vim?

677
Hari Menon

Le registre * le fera. Sous Windows, + et * sont équivalents. Sous Unix, il existe une différence subtile entre + et *:

Sous Windows, les registres * et + sont équivalents. Pour les systèmes X11, cependant, ils diffèrent. Pour les systèmes X11, * est la sélection et + le tampon de coupe (comme dans le presse-papiers). http://vim.wikia.com/wiki/Accessing_the_system_clipboard

* est probablement ce que vous voulez la plupart du temps. J'utilise donc * parce qu'il fonctionne comme je le souhaite dans les deux environnements.

Dans les distributions Linux, pour une raison quelconque, vous devez d'abord installer vim-gtk pour bénéficier des fonctionnalités du presse-papiers.

Et pour ceux qui ne savent pas comment utiliser les registres pour tirer ou mettre, vous écrivez simplement ", puis le nom du registre. Donc, pour copier quelque chose dans le presse-papiers, tapez "*y, puis tapez "*p.

463
Gabe Moothart

Sur Mac OSX

  • copier la partie sélectionnée: sélection visuelle du texte (tapez v ou V en mode normal) et tapez :w !pbcopy

  • copier le fichier entier :%w !pbcopy

  • coller du presse-papiers :r !pbpaste

Sur most Linux Distros, vous pouvez remplacer:

  • pbcopy ci-dessus avec xclip -i -sel c ou xsel -i -b
  • pbpaste utilisant xclip -o -sel -c ou xsel -o -b
    - Remarque: Si aucun de ces outils (xsel et xclip) n'est préinstallé sur votre distribution, vous pouvez probablement les trouver dans le dépôt
311
Brian

Dans votre fichier vimrc, vous pouvez spécifier d'utiliser automatiquement le Presse-papiers du système pour le copier-coller.

Sous Windows:

set clipboard=unnamed

Sous Linux (vim 7.3.74+):

set clipboard=unnamedplus

REMARQUE: Vous devrez peut-être utiliser une version à jour de Vim pour que ces derniers fonctionnent.

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

145
Gary Willoughby

Utilisez le registre "+ pour copier dans le presse-papiers du système (c'est-à-dire "+y au lieu de y).

De même, vous pouvez coller depuis "+ pour obtenir du texte dans le presse-papiers du système (c'est-à-dire "+p au lieu de p).

116
Amardeep AC9MF

@Jobob Dalton a mentionné cela dans un commentaire, mais personne ne semble avoir mentionné dans une réponse que vim doit être compilé avec le support du presse-papiers pour que les suggestions mentionnées ici fonctionnent. Le mien n'était pas configuré de cette façon sur Mac OS X par défaut et j'ai dû reconstruire vim. Utilisez cette commande pour savoir si vous l'avez ou non vim --version | grep 'clipboard'. +clipboard signifie que vous êtes bon et les suggestions présentées ici fonctionneront pour vous, tandis que -clipboard signifie que vous devez recompiler et reconstruire vim.

66
gkb0986

Résumer et rendre plus facile pour les débutants,

Pour copier la ligne en cours, en mode commande, tapez:

"*yy

Pour copier tout le fichier/tampon, en mode commande, commencez par le début via gg, puis tapez

"*yG

Comme indiqué, cela nécessite +clipboard sur vim --version, qui indique la disponibilité du support du presse-papiers, -clipboard signifie non.

54
ryenus

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_

installer la version de vim:

_brew install macvim_

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.



Méthode mise à jour:

Je n’ai jamais été satisfait de la méthode du presse-papiers depuis des années. Le plus gros inconvénient est que cela va gâcher votre historique du presse-papiers, même si vous utilisez x pour la suppression. Voici une solution meilleure et plus élégante.

  1. Copiez le texte [plage] de vim dans le presse-papiers du système. (Conseil: utilisez v ou V pour sélectionner d'abord la plage, puis tapez le signe deux-points _:_ pour activer la commande Ex):
    _:[line-range]yank +_
    par exemple.,
    _:5,10y *_ (copie/suppression des lignes 5 à 10 dans le registre du presse-papiers du système _*_)

  2. Collez le contenu du presse-papiers du système dans vim sur une nouvelle ligne:
    _:put +_

Remarque:

  1. Si vous sélectionnez une plage de mots, ce qui précède ne fonctionnera pas. utilisez "* y ou " + y pour enregistrer ce bloc visuel dans le presse-papiers. Cependant, il est difficile de taper, je pense toujours à des alternatives.
  2. : help "* ou : help * + pour plus d'informations
  3. _brew info vim_ pourra voir d'autres options pour installer vim. Actuellement, il n'a pas d'autres options.
23
anonymous

Je n'ai pas pu copier sur le système de mon presse-papiers parce que j'avais dans mon fichier ~/.vimrc:

 if has('mouse')
   set mouse=a
 endif

Mais si vous ajoutez cette ligne ensuite, cela vous permettra simplement Ctrl+c pour obtenir ce que vous avez sélectionné dans votre presse-papiers.

vmap <C-c> "+y

Discussion originale et plus de détails: Copier le texte hors de vim avec set mouse = a enabled

23
jcarballo

Pour Ubuntu - Juillet 2018

Utilisez le registre "+ pour copier dans le presse-papiers du système (c'est-à-dire " + y au lieu de y).

De même, vous pouvez coller de "+ pour obtenir le texte du presse-papiers du système (c'est-à-dire " + p au lieu de p).

Vous devez également vous assurer que vim est compilé avec le support du presse-papiers. Essayer:

vim --version | grep .xterm_clipboard -o 

et si c'est - xterm_clipboard (un préfixe moins), alors vous avez pas avez le support.

Voici quelques instructions pour échanger une version fonctionnelle de vim prenant en charge le presse-papiers.

  • $ Sudo apt-get purge vim
  • $ Sudo apt-get autoremove (supprime tous les paquets de dépendances vim superflus du système)
  • Sudo apt-get install vim-gnome

Vérifiez à nouveau avec vim --version | grep .xterm_clipboard -o et vous pourrez confirmer que le presse-papiers est maintenant disponible (c.-à-d. + xterm_clipboard)

Bonne chance.

21
arcseldon

la solution pour moi était d'installer vim supplémentaire avec l'option presse-papier incluse:

Sudo apt-get install vim-gnome
18
alex

Si vous utilisez GVim, vous pouvez également set guioptions+=a. Cela déclenchera la copie automatique dans le presse-papier du texte que vous mettez en surbrillance en mode visuel.
Inconvénient: Notez que les gestionnaires de presse-papiers avancés (avec historique) obtiendront dans ce cas tout l'historique de votre sélection…

14
Benoit

Vous pouvez trouver les réponses ici Arch Wiki

Pour Linux: vous devez tout d'abord activer Clipboard dans votre version de vim en installant gvim.


Ensuite, vous devez mettre cette ligne sur votre fichier .vimrc.

set clipboard=unnamedplus

11
HOuadhour

Si votre vim est compilé sans l'option +xterm_clipboard, comme c'est le cas par défaut dans Debian et Ubuntu, vous pouvez diriger la sélection ou la mémoire tampon entière vers un programme externe qui gère le presse-papiers du bureau. Pour xclip (que vous devrez peut-être installer précédemment), la commande sera :w !xclip -sel clip

10
Hnatt

Dans vim sous ubuntu terminal uniquement,

appuyez sur shift + drag mouse pour sélectionner un texte dans vim puis sur ctrl + shift + c sur le terminal

then ctrl + v sur un autre éditeur

8
Supawat Pusavanno

Si vous avez xclip, un moyen simple de copier du texte dans le presse-papiers est le suivant:

  1. Yank texte que vous voulez copier. (Commande y dans Vanilla vim)
  2. Tapez :call system("xclip -selection clipboard", @")

:call system() exécute une commande de terminal. Il faut deux arguments, le premier la commande, le second ce qu'il faut diriger vers cette commande. Par exemple, :echom system("head -1", "Hello\nWorld") renvoie Hello (avec un remplissage). echom renvoie le résultat d'une commande, l'appel n'appelle pas.

xclip -selection clipboard copie simplement le texte dans le presse-papiers du système, par opposition au presse-papiers par défaut de X (accessible par le bouton du milieu).

@" renvoie le dernier texte extrait. "est le registre par défaut, mais vous pouvez utiliser n’importe quel registre. Pour voir le contenu de tous les registres, tapez :registers.

6
John AZ1
  1. Mettez set clipboard=unnamed dans votre vimrc.
  2. Sélectionnez ce que vous voulez copier en mode Visual (appuyez sur v pour entrer).
  3. Retour au mode Normal (appuyez sur la touche d'échappement [esc]), appuyez sur y pour copier.
  4. Si vous voulez coller quelque chose du presse-papiers du système d'exploitation, appuyez sur p/P en mode Vim Normal.
4
BigPa

Peut-être que quelqu'un trouvera cela utile. Je voulais rester indépendant du presse-papiers X et pouvoir toujours copier et coller du texte entre deux vims en cours d'exécution. Ce petit code enregistre le texte sélectionné dans le fichier temp.txt pour le copier. Mettez le code ci-dessous dans votre fichier .vimrc. Utilisez CTRL-c CTRL-v pour effectuer le travail.

vnoremap: w! cp/dev/null ~/temp.txt && cat> ~/temp.txt

noremap: r! cat ~/temp.txt

4
user4897781

Je suis un nouveau venu dans Vim mais, pour copier tout le texte dans le presse-papiers du système (par exemple, si vous souhaitez le coller dans un traitement de texte ou un autre éditeur de texte tel que gedit, mousepad, etc.), en mode normal:

ggVGy

ou plus simplement:

:% y

Comme suggéré, j'ai également installé vim-gtk et mis

set clipboard = unnamedplus

dans mon .vimrc

et tout fonctionne bien

Si vous souhaitez ne copier qu'une partie du texte, utilisez mode visuel (v), sélectionnez le texte que vous souhaitez copier et appuyez sur y.

Enfin, je suggère un programme de presse-papiers comme Clipman (mon préféré), Clipit, Parcellite ou similaire.

(J'utilise vim 8.0 dans Debian Stretch Xfce)

Pardonne-moi pour mon anglais! :-)

3
Bertrando Goio

J'ai eu un problème parce que mon vim ne supportait pas presse-papiers:

vim --version | grep clip
-clipboard       +insert_expand   +path_extra      +user_commands
+emacs_tags      -mouseshape      +startuptime     -xterm_clipboard

J'ai installé vim-gnome (qui supporte le presse-papiers) puis vérifié à nouveau:

vim --version | grep clipboard
+clipboard       +insert_expand   +path_extra      +user_commands
+emacs_tags      +mouseshape      +startuptime     +xterm_clipboard

Maintenant, je peux copier et coller en utilisant "+ y et" + p respectivement.

2

Si vous ne souhaitez pas utiliser d'interface graphique pour vim et si vous préférez vous en tenir à l'émulateur de terminal, il peut y avoir une approche beaucoup plus simple à ce problème. Au lieu d'utiliser yank ou quelque chose comme ça, jetez d'abord un coup d'œil à la documentation du terminal que vous utilisez. Je me suis débattu avec le même problème (essayer d'utiliser + presse-papiers et xclip, etc.) et à la fin, il s'est avéré que dans mon émulateur de terminal, il suffisait d'appuyer sur Shift et de sélectionner le texte que vous souhaitez copier. C'est ça. Assez simple et pas besoin de jouer avec la configuration. (J'utilise urxvt en passant).

2
alagris

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

2
Arthur F

J'ai écrit une simple ligne dans mon fichier .vimrc pour que la copie fonctionne. J'espère que ça aide quelqu'un. Mon vim n’est malheureusement pas installé avec le support Clipboard, donc aucune de ces suggestions n’a fonctionné pour moi. Fondamentalement, collez cette ligne dans votre fichier .vimrc:

map <C-c> y:e ~/clipsongzboard<CR>P:w !pbcopy<CR><CR>:bdelete!<CR>

Si vous souhaitez lire des détails sur ce que cela fait, vous pouvez en savoir plus sur mon blog

2
songz

pour OSX, comme indiqué clairement dans les réponses 10342 ci-dessus, vous devez vous assurer que vim prend en charge la fonctionnalité de presse-papiers, a déclaré celui fourni en pré-livraison avec OSX NE prend PAS en charge le presse-papiers, et que si vous exécutez brew install vim it travaillerait.

Sauf que l'exécution de vi vous obligera toujours à exécuter la version OSX pré-expédiée, pas celle que vous avez installée à partir de brew.

pour surmonter ce problème, j'ai simplement associé ma commande vim à la version brassée, et non à la version par défaut d'OSX:

alias vim="/usr/local/Cellar/vim/8.0.1100_1/bin/vim"

et maintenant je suis d'or

1
abbood

si vous vous connectez au système Unix via PuTTY, suivez les étapes ci-dessous pour copier le contenu d'un fichier.

  • Mettez en surbrillance le texte que vous souhaitez copier (vous pourrez copier page par page)
  • appuyez sur ctrl + c (ça va copier le texte dans le presse papier
  • coller dans n'importe quel éditeur externe Terminé
1
Pratik

Shift+Ctrl+C si vous êtes en mode graphique de Linux, mais vous devez d’abord sélectionner ce que vous devez copier.

enter image description here

0
prosti

Rien de ce qui précède n'a fonctionné pour moi sur mon ordinateur portable Windows.

Ctrl+C était bien pour copier .. mais j'avais besoin Shift+Insert coller !

(Une bonne raison de toujours avoir un ordinateur portable où Insert toujours accessible sans appuyer sur une touche secondaire)

0
SherylHohman

selecting avec l'aide de mouse et right-click copy a fonctionné dans mon cas.

Je ne voulais pas que les numéros de ligne soient inclus, donc je :set nonumber avant copying.

0
Akash

Dans mon cas, sélectionner du texte en surlignant (en cliquant et en faisant glisser) avec ma souris faisait passer vim en mode visuel.

Sur un mac de toute façon, la solution la plus simple consiste à utiliser fn + mouse click and drag pour éviter d'entrer en mode visuel.

Si vous souhaitez éviter ce comportement par défaut, vous pouvez modifier votre vimrc.

0
MochiJump

Cela fait des mois que je lutte contre cela avec MacOsX à l’aide de raccourcis clavier. Je sais que la question ne concerne pas l’utilisation de shorts pour clavier. Mais cela pourrait aider quelqu'un avec le même souci.

J'ai trouvé que si vous décochez la case:

Vue -> Autoriser le rapport de la souris

depuis le menu Terminal, vous pourrez copier dans le presse-papiers en utilisant

command + c

encore.

0
GO'