web-dev-qa-db-fra.com

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

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

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

148
Patryk

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

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

  2. Déplacer vers le début/la fin du texte pour le mettre en surbrillance.

  3. Ctrlspace

    Commencez à surligner du texte (sur Arch Linux). Quand j'ai compilé tmux à partir de la source sur OSX et d'autres Linux, juste Space seul fonctionne généralement. Le texte sélectionné modifie les couleurs, vous saurez donc si la commande a fonctionné.

  4. Déplacer à l'extrémité opposée du texte à copier.

  5. Alt+w Copie le texte sélectionné dans le presse-papiers 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] Collez le texte copié du presse-papiers tmux.

tmux est assez bon pour mapper les commandes aux raccourcis clavier personnalisés.

Voir Ctrl+b,? pour la liste complète des raccourcis clavier définis.

219
Alex Leach

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

  1. Enter Copie le texte sélectionné
39

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 + b par défaut.)

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

Je me connecte à mon serveur CentOS sur une machine Windows en utilisant le client terminal ZOC ssh. Voici ce qui fonctionne pour moi:

  • Entrer en mode copie: <prefix> + [
  • Démarrer la copie: <Space>
  • Copier le texte: <Enter>
  • Coller le texte: <prefix> + ]
13
jdhao

Si vous avez vim ouvert, il vaut mieux utiliser le copier-coller vim pour copier du texte.

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

Tout d'abord, lors de la copie de plusieurs lignes de texte, vous devrez sélectionner plusieurs lignes. Le copier-coller Tmux ne comprend généralement pas que vim a des numéros de ligne ou qu'il y a des marquages ​​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 a une mise en forme spécifique à une langue et que vous essayez directement de copier-coller en utilisant tmux vers vim, cela gâchera la mise en forme. Cela peut être évité en utilisant set paste!. Cependant, cela nécessite beaucoup plus de travail.

Utilisation "+y pour copier et "+p coller

Vim fournit nativement une méthode pour copier-coller entre le tampon vim et le presse-papiers du système, en utilisant "+y ou "*y. Puis coller à l'aide de "+p ou "*p. Cela évitera de copier les nombres relatifs dans la gouttière ou d'autres marques aléatoires qui ne sont pas pertinentes pour vim

4
alpha_989

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

3
Johan

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

Comme indiqué dans les réponses ci-dessus, vous pouvez utiliser "+y et "*y pour copier puis "+p et "*p respectivement à coller. Si vous souhaitez que vim utilise le presse-papiers par défaut, vous pouvez simplement utiliser y/p directement alors.

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

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

0
Avi Areman

J'ai moi-même eu le problème et j'ai téléchargé mes fichiers .vimrc et .tmux.conf ici: tvp-repl

Vous pouvez configurer tmux pour

  1. Copiez la sélection du volet vim dans le presse-papiers,
  2. Lisez le presse-papiers et collez-le dans un autre volet, puis
  3. Revenez au volet d'origine.

Tout ce dont vous avez besoin pour configurer vim à copier dans le presse-papiers [mode visuel Ctrl+c]:

set clipboard=unnamedplus
vnoremap <C-c> "+y

Ensuite, utilisez la commande tmux pour exécuter la copie depuis vim et coller le tampon dans un autre volet [Ctrl+b Entrer]:

bind-key Enter run "tmux send-keys -t 0 C-c" \; 
run "tmux select-pane -t 1" \; 
run "tmux set-buffer \"$(xclip -o -sel clipboard)\"; tmux paste-buffer" \; 
run "tmux send-keys -t 1 Enter" \; 
run "tmux select-pane -t 0"

Remarque: a) Ce script nécessite xclip pour s'interfacer avec le presse-papiers. b) L'hypothèse est que vim est dans le volet 0; le volet cible est le volet 1.

0
dariohett