web-dev-qa-db-fra.com

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

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).

40
sam

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 du serveur Ubuntu), vim et vim-tiny ne font pas partie de cette fonctionnalité. Vous aurez envie d'installer GVimInstall GVim , qui sera lancé graphiquement ou dans votre terminal. GVim remplacera la commande vim.

Vous pouvez extraire le texte dans le 'tampon de coupe' du premier vim, puis le coller dans le deuxième vim. Pour copier dans le tampon de coupe global, utilisez le registre +. La touche " vous permet de spécifier le registre à utiliser lorsque vous effectuez une opération yank ou coller.

Dans le premier fichier vim, insérez une ligne dans le registre +:

"+yy

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

"+p

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

49
Jeremy Kerr

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

il suffit de mettre:

set clipboard=unnamedplus

dans votre .vimrc.

20
bhh1988

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

9
Samir Sadek

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. Utilisez ESC m a pour marquer la première ligne
  2. Utilisez ESC m b pour marquer la dernière ligne
  3. Utilisez :'a,'b w! xfer pour écrire une plage dans un fichier de travail

En session de destination:

  1. Déplace le curseur sur la ligne d'insertion
  2. Utilisez ESC :r xfer pour lire du texte

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

5
Bill

C'est en fait assez simple: installez une version de vim qui supporte le presse-papier. si votre vim ne le fait pas, 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.

2
FuzzyAmi

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 accéder à 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 cela n’ait pas été le cas à l’époque, cela m’aurait aidé à me débarrasser de la mafia emacs.

2
srtour2011

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.

1
Sergey