Copier le texte d'un volet tmux à un autre (à l'aide de vim)


133

J'ai deux fichiers ouverts dans vim, chacun dans un volet tmux. J'aimerais copier, disons, 10 lignes d'un fichier à un autre.

Comment puis-je accomplir cela sans utiliser la souris Copy-> Paste?


2
Vous pouvez impliquer tmux , mais il existe généralement des méthodes plus simples. Les deux instances de Vim sont-elles sur la même machine (locale?)? Habituellement, je voudrais simplement utiliser un fichier temporaire pour cela (c.-à-d. Sélectionner visuellement les lignes :w /tmp/lines, puis :r /tmp/linesdans l'autre cas). Ou, si votre Vim sait comment communiquer avec le Presse-papiers de votre système, vous pouvez utiliser les registres +ou *pour éviter le fichier temporaire.
Chris Johnsen

Réponses:


194

Vous devrez utiliser les raccourcis tmux. En supposant que votre raccourci de commande tmux soit la valeur par défaut: Ctrl+ b, puis:

  1. Ctrl+ b, [Entrez en mode copie (?).

  2. Déplacer au début / à la fin du texte à surligner.

  3. Ctrlspace

    Commencez à mettre le texte en surbrillance (sous Arch Linux). Quand j'ai compilé tmux à partir de la source sur OSX et d'autres systèmes Linux, seul ça Spacemarche habituellement. Le texte sélectionné modifie les couleurs afin que vous sachiez si la commande a fonctionné.

  4. Déplacer à la fin opposée du texte à copier.

  5. Alt+ wCopie le texte sélectionné dans le presse-papier tmux. (Sur Mac, utilisez Esc+ w.)

  6. Déplacez le curseur sur le volet tmux opposé ou sur une fenêtre tmux complètement différente. Placez le curseur à l'endroit où vous souhaitez coller le texte que vous venez de copier.

  7. Ctrl+ b, ]Coller le texte copié du presse-papiers de tmux.

tmux est assez doué pour mapper des commandes sur des raccourcis clavier personnalisés.

Voir Ctrl+ b, ?pour la liste complète des raccourcis clavier de jeu.


4
Merci. Juste un sidenode: Le Alt + w ne fonctionnait pas sur Mac. Alt a été associé à Esc par défaut. C'est donc Esc + w.
Karan

11
si vous utilisez des screenraccourcis: Ctrl + A [(entrez en mode copie), Space(démarrez en surbrillance), Enter(finissez en surbrillance), Ctrl + A ](collez).
jfs

11
Il est à noter que "entrer" fonctionne pour moi alors que alt + w ne fonctionne pas.
Elijah Lynn

3
Comme il est indiqué dans awhan.wordpress.com/2010/06/20/copy-paste-in-tmux , si vous avez des raccourcis clavier vi, l' étape 5 doit être remplacé par la Enterclé.
Ying Xiong

3
Que faire si je dois copier et coller dans un éditeur de texte? Pour une raison quelconque, il semble que le texte sélectionné ne soit pas repris même après avoir appuyé sur 'entrée' après avoir sélectionné le texte.
uday

34

Malheureusement, je ne peux pas encore ajouter de commentaire à la réponse d'Alex Leach. Je vais donc inclure ici un addenda pour les utilisateurs de Mac OS X:

  1. Enter Copie le texte sélectionné

1
Merci! Je suis sur Ubuntu Xenial, en utilisant byobu/ tmuxavec tous les paramètres par défaut, cela a fonctionné, mais pas Alt + w.
Andrea Zonca

1
Cela ne fonctionne pas sous OS X Yosemite avec tmux 2.0, ni alt + w, ni esc + w :(
weberc2

Fonctionne aussi pour moi sous Windows avec un terminal Zoc.
Jdhao

15

Si vous utilisez vim et tmux sur macOS (testé sur macOS 10.12.2, tmux 2.3):

(Supposons que la combinaison de touches de préfixe de tmux soit prefix. Le préfixe est ctrl+ bpar défaut.)

  • Copie:
    1. Appuyez sur prefix+ [pour passer en mode copie.
    2. Utilisez les touches fléchées pour aller au début / à la fin de la sélection de texte.
    3. Appuyez sur ctrl+ space(Si vous avez défini ctrl+ spacecomme préfixe, appuyez sur ctrl+ space+ au spacelieu)
    4. Utilisez les touches fléchées pour vous déplacer de l’autre côté de la sélection.
    5. Appuyez sur ctrl+ w.
  • Pâte:
    1. Appuyez sur prefix+ ]en mode insertion.

9

Je me connecte à mon serveur CentOS sur une machine Windows à l'aide du client ssh du terminal ZOC . Voici ce qui fonctionne pour moi:

  • Entrer en mode copie: <prefix>+[
  • Commencer la copie: <Space>
  • Copier le texte: <Enter>
  • Coller le texte: <prefix>+]

2

Vous pouvez utiliser le presse-papiers du système avec "* y et" * p au lieu des valeurs normales y et p.


1
Pour utiliser le presse-papiers du système, vous devez utiliser "+2yy- copier deux lignes dans le presse "+dd- papiers X11 - couper la ligne dans le presse "+p- papiers X11 - coller le presse
Patryk

Dois-je taper quoi que ce soit avant d'utiliser ces commandes?
Thomas Ahle

@ThomasAhle, pas .. sa lettre les doubles guillemets ( "), suivi de plus (+) suivi par 2ys (y). Assurez- vous que vous êtes en mode normal. Si vous êtes en mode normal, vous devriez être en mesure d'utiliser h,j,k,lpour J'ai également vu parfois sur ma machine virtuelle ubuntu que le registre "+" disparaissait pour une raison inconnue. Pour vérifier que vous disposez du +registre, vous pouvez taper :reget vérifier si "+la première colonne
contient une

Oui, ça y est, c'est la réponse. Beaucoup plus simple que les autres suggérés (en utilisant tmux copier / coller) et cela ne dérange pas les numéros de ligne. Cela poserait-il des problèmes si vous remappiez standard yet pà "+yet "+p?
Ryan

1

Si vous avez vimouvert, il est préférable d’utiliser le vim copier coller pour copier du texte.

Tmux copier coller fonctionnera, mais il y a plusieurs inconvénients.

Premièrement, lors de la copie de plusieurs lignes de texte, vous devrez sélectionner plusieurs lignes. Tmux copier coller ne comprend généralement pas qu'il vima des numéros de ligne ou il y a des marques dans la gouttière vim (tels que des nombres relatifs / nombres absolus). En conséquence, il les copiera également.

Deuxièmement, j'ai constaté que si le texte avait une mise en forme spécifique à la langue et que vous essayez directement de copier coller avec tmux dans vim, cela gâcherait la mise en forme. Ceci peut être évité en utilisant set paste!. Cependant, cela nécessite beaucoup plus de travail.

Utiliser "+ypour copier et "+pcoller

Vimfournit nativement une méthode pour copier / coller entre le tampon vim et le presse-papiers du système, en utilisant soit, "+ysoit "*y. Puis coller en utilisant "+pou "*p. Cela évitera de copier les nombres relatifs dans la gouttière ou d’autres marques aléatoires non pertinentes pour vim


0

Quelques options pour utiliser vim car la séquence de raccourcis tmux est un peu longue et j'ai du mal à me souvenir

Comme les réponses ci-dessus, vous pouvez utiliser "+yet "*ycopier puis coller "+pet "*pcoller. Si vous voulez que vim utilise le presse-papiers par défaut, vous pouvez simplement l'utiliser y/pdirectement ensuite.

set clipboard=unamed "sets the default copy register to be *
set clipboard=unamedplus "sets the default copy register to be +

source de la commande presse-papiers: https://vi.stackexchange.com/questions/84/how-can-i-copy-text-to-the-system-clipboard-from-vim

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.