Comment copier des données entre différentes instances de vim?

41

Si j'utilise le premier vim pour copier une ligne (avec yy), comment puis-je coller dans le vim d'un autre terminal (avec p)? Y at-il une commande ou des paramètres peuvent le faire? Puis-je copier et coller dans le presse-papiers du système global?

Je sais que les moyens suivants sont possibles, mais je veux un moyen plus simple:

  1. Je ne veux pas quitter le premier vim et rouvrir le deuxième vim.

  2. Je ne veux pas utiliser de fenêtre séparée (avec :sp).

sam
la source

Réponses:

49

Vous devez d’abord installer une version de vim compatible avec le presse-papiers. Pour prendre en charge les utilisateurs avec des environnements non graphiques (par exemple, les utilisateurs de serveur Ubuntu), vimet vim-tinyne pas utiliser cette fonctionnalité. Vous voudrez installer GVim Installer GVim , qui sera lancé graphiquement ou dans votre terminal. GVim remplacera la vimcommande.

Vous pouvez insérer le texte dans le 'tampon de coupe' du premier vim, puis le coller dans le second vim. Pour copier dans le tampon de coupe global, utilisez le +registre. La "touche vous permet de spécifier le registre à utiliser lors d’une opération d’extraction ou de collage.

Dans le premier vim, tirez une ligne dans le +registre:

"+yy

puis, coller du +registre dans le deuxième vim:

"+p

Pour plus d'informations sur les registres disponibles, consultez :help registers. Vous pouvez également utiliser "+ppour coller du texte copié depuis n’importe quelle autre source de votre système.

Jeremy Kerr
la source
Quoi qu’il en soit, si vous installez GVim (le paquet peut s’appeler vim-gnome), les entrées de menu vous donneront très souvent les raccourcis clavier qu’ils invoqueront.
Zpletan
1
Je ne veux pas installer Gvim. Comment puis-je faire cela dans vim?
trusktr
1
@trusktr en fait, cela fonctionne aussi dans vim. Dans ce Q & A, il est dit que vous avez besoin d'au moins vim 7.3.74 (ce qui signifie Ubuntu 11.10 ou plus récent).
lombrique
En quelque sorte, cela ne fonctionne pas si vous avez un vim démarré dans tmux et un autre vim normalement démarré à l'extérieur - une chance que vous sachiez comment résoudre ce problème?
Le
"*yy, "*pfonctionne aussi. si vous frappez :reg, vous verrez ce registre des étoiles
elquimista
20

La meilleure solution qui a fonctionné pour moi (qui ne me demande pas de changer mes habitudes en matière de raccourci clavier) est la suivante: https://stackoverflow.com/questions/9166328/how-to-copy-selected-lines-to-clipboard-in- vim

viens de mettre:

set clipboard=unnamedplus

dans votre .vimrc.

bhh1988
la source
En fait, j’avais besoin d’ajouter set clipboard=unnamedplusen combinaison avec l’installation de GVim. Cependant, j'ai pu utiliser xfce4-terminal pour Vim au lieu du programme GVim actuel.
jbrock
9

J'aime la solution de Bill et j'ai créé une cartographie:

vmap <leader>y :w! /tmp/vitmp<CR>                                                                   
nmap <leader>p :r! cat /tmp/vitmp<CR>

le premier en mode visuel copie tout dans / tmp / vitmp et le second copie le contenu de / tmp / vitmp dans le fichier

Samir Sadek
la source
solution simple, simple - à l'ancienne - merci, cela a été fait pour moi
serup
Qu'est-ce que je dois taper dans Vim après l'avoir ajouté au .vimrc?
Vitaly Zdanevich
Vous devez configurer vim pour pouvoir utiliser la clé de code suivie de y pour copier, la clé de code suivie de p pour coller.
Samir Sadek
1
C'est celui qui fonctionne. l'utilisation "*ysemble être brisée sur les serveurs
ospider
Oh mon. Je cherche depuis des heures sur cette question en utilisant vim dans tmux dans docker. Mon vimrc normal qui avait déjà unnamed / unnamedplus, ne fonctionnait PAS dans vim in tmux dans docker. Je n'ai rien trouvé non plus sur Internet. Cependant, cela semble fonctionner sur TOUTES les machines! En docker, sur Mac et sur Arch nativement. Merci!!
Tommy
5

Je me déplace entre différentes machines de la famille Unix et j'ai trouvé que la séquence suivante marche toujours pour moi:

En session vi source:

  1. Utiliser ESC m apour marquer la première ligne
  2. Utiliser ESC m bpour marquer la dernière ligne
  3. Utilisez :'a,'b w! xferpour écrire la plage dans un fichier de travail

En session de destination:

  1. Déplacer le curseur sur la ligne d'insertion
  2. Utiliser ESC :r xferpour lire dans le texte

Je sais que ce n'est pas joli mais ça marche toujours pour moi!

Facture
la source
2

C'est en fait assez simple: installer une version vimsupportant le presse-papier. si ce vimn'est pas le cas, procurez-vous l'un des éléments suivants:

sudo apt-get install vim-athena
sudo apt-get install vim-gnome
sudo apt-get install vim-gtk

Une fois installé, lancez simplement vim. Vous pouvez également vérifier que le Presse-papiers est activé en exécutant:

 vim --version|grep clipboard

vous devriez voir +xterm_clipboard.

FuzzyAmi
la source
Cette réponse touche au cœur du problème, à savoir si la fonctionnalité de presse-papiers est activée dans votre version de Vim. Sinon, aucune de ces autres réponses ne changera rien. Faites "vim --version" et cherchez "+ presse-papiers". Je pense que + xterm_clipboard ne s'applique que si vous voulez le support du presse-papier X11, mais si vous êtes sur Ubuntu, vous voudrez aussi.
Ray
2

Vous allez probablement tous détester cette réponse. Auparavant, dans les années 80, je travaillais sur divers ordinateurs Unix et j'ai récemment eu l'occasion de jouer sous Linux.

Ma solution pour couper et coller utilise Putty sous Windows pour accéder à ma machine Linux.

Putty vous permet de copier n'importe quel texte dans sa fenêtre en le mettant simplement en surbrillance. vous pouvez ensuite aller dans une autre fenêtre / session de Putty et cliquer avec le bouton droit de la souris pour coller.

ne pourrait pas être plus facile. et maintenant il y a vim. dommage que ce n’était pas dans ma journée, cela m’aurait aidé à me débarrasser de la mafia emacs.

srtour2011
la source
1

Ce n'est pas exactement en utilisant yy, mais si vous sélectionnez le texte que vous souhaitez copier avec la souris (vous devrez parfois utiliser Shift- [glisser]), passez à la fenêtre de l'autre terminal et faites un [clic du milieu] ou Shift- cliquez] là-bas, le texte sera inséré à votre point d'insertion actuel.

Cela fonctionne pour la plupart des programmes de ligne de commande et d'interface graphique, pas seulement pour vim.

Sergey
la source