Comment copier sur des terminaux?

11

J'utilise un système Linux. Deux vims sont ouverts dans deux terminaux. Maintenant, je voudrais copier du texte de A vers B. Une façon de le faire est de sélectionner du texte dans A, d'utiliser la souris pour copier, puis de passer à B, en mode insertion, la commande <c-r>+collera le texte.

Est-il possible de le faire sans utiliser de souris? comme "+yydans A, quand passer à B o<c-r>+,? J'ai exploré en vain quelques combinaisons. Et j'ai cherché "copier sur les terminaux", mais je n'ai rien trouvé.

@statox utilisateur propose une solution en utilisant le mode visuel, soit v$"+yen A, lorsque l' interrupteur à B, o<c-r>+.

Existe-t-il un moyen simple de copier le texte en A sans passer en mode v? Certes, entrer en mode v n'implique pas trop de frappes de touches, demandez-vous simplement s'il y a une meilleure façon. Par exemple. si le curseur est au milieu d'une ligne, yycopie la ligne entière (pour s'enregistrer "), tout en faisant 0v$yla même chose avec un coup de clé supplémentaire.

Ou, ma question peut être réduite à s'il existe un moyen avec moins de touches que 0v$"+ypour copier de sorte que je puisse utiliser <alt-tab>o<c-r>+pour coller.

user3813057
la source
Quel est votre problème exact? Vous semblez avoir la solution: sélectionnez votre texte en mode visuel (pourquoi utiliseriez-vous la souris?) Mettez-le dans le registre du presse-papiers avec "+yet dans l'autre instance de vim mettez le registre du presse-papiers "+p. Ou un double de ce ?
statox
Vous n'avez pas besoin de passer en mode visuel pour tirer quelque chose. Vous pouvez suivre yavec un mouvement ( :help motion.txt) ou un objet ( :help object-select). Si vous copiez et collez souvent entre les instances de Vim, vous pouvez trouver ce paramètre clipboardà inclure unnamedou unnamedplusutile. Tu vois :help 'clipboard'. Ensuite, la copie entre les instances devrait simplement fonctionner.
garyjohn
1
Le point de mon commentaire n'était pas le mode visuel, en fait j'ai du mal à comprendre votre problème: au début, je pensais que c'était le fait de copier du texte d'un terminal à un autre, maintenant il semble qu'il s'agit d'utiliser aussi peu de touches que possible de tirer dans le registre du presse-papiers. S'il s'agit du deuxième cas, le commentaire de Garyjohn est pertinent.
statox
1
0v$est le même que V. Et il est facile de faire une cartographie pour "+y: :nnoremap <Leader>y "+y. Donc, cela le réduit à V\y.
Martin Tournoij
@Carpetsmoker, votre solution est bonne. J'aimerais le considérer comme la solution optimale si vous le collez dans la région de réponse. Il semble que sans carte clé, le mieux que nous puissions faire pour la copie dans ma question est de V"+y4 touches.
user3813057

Réponses:

9

Vous pouvez vérifier si Vim est construit avec le support du presse-papiers avec:

:echo has('clipboard')

Si la sortie est 1, les éléments suivants devraient être suffisants pour atteindre votre objectif:

"*y    in source Vim
"*p    in destination Vim

Vous pouvez rendre tout cela beaucoup plus transparent en synchronisant le registre du presse-papiers et le registre par défaut avec ce paramètre dans votre vimrc:

set clipboard^=unnamed

Si la sortie de :echo has('clipboard')est 0, pensez à installer un Vim approprié comme vim-gtkou vim-gnome(le nom du paquet peut différer d'une distribution à l'autre).

romainl
la source
1

Je pense que la solution que vous avez déjà mentionnée dans votre question est la bonne. Si vous souhaitez réduire le nombre de frappes, vous pouvez simplement créer une carte, par exemple

vmap <leader>y "+y
vmap <leader>d "+d
nmap <leader>p "+p
nmap <leader>P "+P
vmap <leader>p "+p
vmap <leader>P "+P

Voir la deuxième entrée ici .

Karl Yngve Lervåg
la source
1

Pour étendre la réponse de @ romainl (avec la prise en charge du presse-papiers), vous pouvez utiliser des registres partagés avec le presse-papiers à l'échelle du système.

"+y    To yank/copy from a vim-terminal
"+p    To paste in destination vim-terminal

"*y    To yank/copy from a vim-terminal
"*p    To paste in destination vim-terminal

En exécutant ces commandes, vous y Anking / copier / stocker des contenus sélectionnés dans les registres, et p asting leur destination à Vim-terminal. Ces deux registres spéciaux +et *sont partagés avec le système large presse - papier (et donc beaucoup d' autres programmes tels que le navigateur Web, gedit etc). Le registre +est associé au tampon copier / coller et *est associé au tampon de sélection (celui qui insère une copie de la sélection avec un clic du milieu sur un champ de texte dans, disons, Ubuntu) et peut être collé à l'aide de ctrl + v( ctrl + shift + vsur gnome-terminal).

0xc0de
la source
1

1) Sur Fedora, j'utilise la configuration suivante:

dnf install vim-X11

vim-X11 est livré avec un support presse-papiers - peut-être que dans d'autres distributions, il est similaire.

2) Définissez un alias dans mon .bashrc

alias vim="vimx"

3) En .vimrc:

set clipboard=unnamedplus

Maintenant, le coup sec habituel dans Vim va dans le presse-papiers du système et chaque Ctrl-C en dehors de vim peut être collé dans vim.

Neaţu Ovidiu Gabriel
la source
0

Si vous utilisez un Mac (OSX), vous pouvez installer bpcopy (en utilisant brew install pbcopy - voir http://brew.sh/ pour plus de détails). Exécutez ensuite la commande suivante (ligne de commande directe) sans toucher à la souris:

EXEMPLE:

1) Au TERMINAL # 001 :

cat /tmp/stuff.txt | pbcopy

2) Vous pouvez basculer vers le terminal # 002 (sans utiliser la souris) en utilisant les touches de raccourci intégrées dans l'application de terminal OSX: command+i

3) Dans TERMINAL # 002 : Ouvrez le nouveau fichier dans vim

vi newfile

4) Mettez vim en mode insertion aveci

5) Insérez le texte du presse-papiers avec command+ V(pour coller depuis le presse-papiers sur un Mac)

6) Profitez du reste de votre journée!

Joe Choosakul
la source