Comment copier du texte de vim vers un programme externe?


84

J'essaie de copier-coller du texte de vim. Je fais v pour entrer en mode visuel, puis y une fois que j'ai sélectionné mon bloc.

Il semble copier le texte dans le presse-papiers de vim, car p le collera. Mais dans un autre programme (par exemple, Chrome), un clic droit-> coller ne colle pas le texte correct. Comment copier du texte dans le bon presse-papiers?

Réponses:


63

Ce qui suit ne fonctionnera que si vim --versionindique que vous avez une +xterm_clipboardfonctionnalité. Sinon, vous devrez installer des packages supplémentaires ou recompiler vim avec cette fonctionnalité ajoutée.


Il y a en fait deux options pour cela:

"+y

copie dans la mémoire tampon "habituelle" du presse-papiers (vous pouvez donc coller en utilisant Ctrl + V, cliquer avec le bouton droit de la souris et sélectionner "Coller", etc.), tandis que

"*y

copies à la sélection X11 - vous pouvez coller à partir de ce tampon en utilisant le clic du milieu.

Notez cela "*et "+travaillez dans les deux sens. Ainsi, si vous avez sélectionné du texte dans une autre application, vous pouvez le coller dans vim à l'aide de "*pet si vous avez copié du texte (à l'aide, par exemple, de Ctrl-C), vous pouvez le coller dans vim à l'aide de "+p.


@Tshepang cela ne fonctionne pas à partir de mastic. que devrais-je faire ?
Rahul Patil

@RahulPatil je ne sais pas; peut-être poser une question distincte, peut-être sur le super utilisateur (puisqu'il s'agit d'un outil Windows, il serait plus bienvenu là-bas).
Tshepang

@RahulPatil - si vous utilisez du mastic, vous éditez le fichier sur un serveur distant, pas sur votre ordinateur local. Généralement, le serveur distant ne saura rien du Presse-papiers sur votre ordinateur local. Si vous utilisiez un poste de travail Linux, vous pouvez ssh avec le transfert X (à condition d’avoir installé les bibliothèques X sur le serveur), mais comme le mastic s’exécute sur les fenêtres, X n’exécute pas et vous ne pouvez pas le transférer.
Hamish Downer

1
Bonjour tout le monde, Comment taper "+ y? Devrais-je le taper en mode visuel ou en mode commande? Chose idiote, mais je suis incapable de le comprendre.
Alind Billore

@AlindBillore: En mode commande. Littéralement, appuyez sur les touches shift'puis shift=ensuite y(pas tout à la fois, l' un après l'autre, à l' exception des changements de cours).
Reid

31

Si vous utilisez vim> = 7.3.74, alors vous pouvez mettre ceci dans votre vimrc:

set clipboard=unnamedplus

Qui utilisera automatiquement le +tampon (le presse-papiers du système) par défaut. Ensuite, pour tirer (copier), il vous suffit d'utiliser la ycommande normale , etc.

J'ai trouvé ce comportement assez ennuyant, cependant, car des commandes telles que dmettre le texte sur lequel elles fonctionnent opèrent dans la mémoire tampon par défaut, ce qui signifie que je ne pouvais pas faire de rapide ddet coller une ligne à partir d'Internet, par exemple.


2
+ est un enregistreur de presse-papiers
Kit Ho

1
En ce qui concerne votre dernier point, ddsignifie "couper une ligne", ce serait donc le comportement attendu. Dans les rares cas où vous voulez réellement supprimer une ligne dans l'oubli, "_ddfera l'affaire.
user7089

aussi comme le note @HamishDowner dans sa réponse: Ce qui suit ne fonctionnera que si vim --versionindique que vous avez une +xterm_clipboardfonctionnalité. Sinon, vous devrez installer des packages supplémentaires ou recompiler vim avec cette fonctionnalité ajoutée.
rudolph9

24

Maintenez la touche Maj enfoncée et sélectionnez le texte avec le curseur de la souris.
Le texte sera copié dans le presse-papier.

Cela fonctionne également pour le collage depuis le presse-papiers vers vim.

Pour être clair, cela fonctionne pour une vimexécution dans un terminal tel que xterm.


Voulez-vous dire en maintenant la touche Maj enfoncée lors de la sélection du texte? C'est comme ça que je le fais xterm.
nozimica

@ Nozimica: Oui.
Loop Space

Cette réponse devrait avoir plus de votes positifs ...
whoan

@LoopSpace pour les sélections multilignes, ceci copie également les numéros de ligne quand il set nuest activé. Donc, vous voudrez probablement basculer les numéros de ligne avec un raccourci ou exécuter la :set nonucommande avant chaque sélection
Steven Pribilinskiy

Sur MAC, maintenez la touche Option enfoncée et sélectionnez le texte avec le curseur de la souris
abreschi

10

Je trouve la norme "+gPet les "+ycommandes très difficiles à utiliser. Donc, j'ai remappé Ctrl-Ypour yanking dans le presse-papiers et Ctrl-Pcoller du presse-papiers. Ajouter ceci à.vimrc

nnoremap <C-y> "+y
vnoremap <C-y> "+y
nnoremap <C-p> "+gP
vnoremap <C-p> "+gP

6

Qu'à cela ne tienne, j'ai trouvé la réponse - c'est écrit sur les menus de vim.

"+y

Très intuitif.


Utilisez-vous gvim?
nozimica

@ nozimica- ouais
ripper234

1
Cela est également disponible dans vim fonctionnant dans un émulateur de terminal xterm ou similaire sous X (si vim est compilé avec la +xterm_clipboardfonctionnalité).
Gilles

3

Juste pour ajouter une réponse non spécifique à vim: Vous pouvez utiliser Ctrl+Shift+Cpour copier dans le presse-papiers du système sous Ubuntu (si la fonctionnalité est fournie par votre émulateur de terminal, gnome-terminal le fournit). Ctrl+Shift+Vcolle dans une autre fenêtre de terminal, Ctrl+Vcolle régulièrement dans une application à interface graphique.

De plus, si vous sélectionnez le texte dans le terminal, puis cliquez avec le bouton du milieu, il sera collé à partir du Presse-papiers X11.


Pour une raison quelconque, cela ne fonctionne pas. Il suffit de sélectionner en mode visuel, de copier avec ctrl-shift-C, puis de coller une autre application en utilisant Ctrl-shift-V? Le texte n'est pas copié pour moi.
ripper234

2
@ ripper234: cela ne fonctionne pas si vous utilisez gvim. Comme dit crazy2be, cette fonctionnalité provient de votre émulateur de terminal.
Reid

@ ripper234: 1) C'est une fonctionnalité fournie par votre émulateur de terminal (gnome-terminal le fournit), 2) Ctrl + Maj + V consiste à coller dans le terminal , les applications à interface graphique utilisent toujours Ctrl + V comme d'habitude. Je vais modifier la réponse pour la rendre plus claire.
Crazy2be

si vous utilisez shift-control mousedrag - select text, le copier-coller depuis une fenêtre de tampons devient simple.
Stephan

2

Par défaut, si vous installez la version allégée de vim, vous ne disposerez pas de la +xterm_clipboardfonction on ( vim --version | grep xterm), nécessaire pour utiliser les registres *et en +dehors de vim.

Pour l'activer, vous devez soit compiler vim vous-même, soit installer une version de vim fournie avec celle-ci, qui est pré-activée. Je vim-gnome: sudo apt-get install vim-gnome. Si vous jouez vim --version | grep xterm, vous verrez que c'est maintenant +xterm_clipboard.

Maintenant, essayez de copier vers +et *et cela devrait fonctionner.


2

Quand j'ai vérifié que vim ne supportait pas le presse-papier:

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

J'ai installé vim-gnome 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.


1

Maintenez la touche MAJ et la souris enfoncée pour sélectionner le texte à copier.

Puis collez dans un autre programme avec CTRL + v.

Fonctionne en terminal sur mon Ubuntu 16.04. Pas sûr de gvimet d'autres systèmes.

entrez la description de l'image ici


Cela ne fonctionne pas.
Astrid

réponse créative
vidur punj

0

Juste pour ajouter, si quelque chose fonctionne, essayez de changer le terminal qui enveloppe vim (si vous utilisez vim depuis le terminal). J'ai trouvé que, par exemple, le presse-papiers est inaccessible par guake tandis que est accessible depuis gnome-terminal.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.