Utiliser le presse-papiers du système en mode vi-copy sous tmux

51

J'exécute tmux 1.6 et j'essaie de le configurer pour qu'il utilise les raccourcis clavier de style vi ainsi que le presse-papiers du système lors de la copie en mode interactif:

set-window-option -g mode-keys vi

bind-key -t vi-copy 'v' begin-selection
bind-key -t vi-copy 'y' "copy-selection && run \"tmux save-buffer | xclip -selection clipboard\""

En termes simples, j'aimerais pouvoir faire C+ [et utiliser ensuite vpour commencer à sélectionner le texte à copier, puis lorsque vous yappuyez sur la touche, copiez la sélection dans la sélection tmux puis exportez-la dans le presse-papiers du système à l'aide de xclip.

Malheureusement, lorsque j'essaie de faire cela, je vois ce qui suit:

.tmux.conf: 14: unknown command: copy-selection && run "tmux save-buffer | xclip -selection clipboard"

Est-il possible de faire cela dans la configuration de tmux?

Naftuli Kay
la source

Réponses:

88

Cela a également été répondu ici , mais il m'a fallu un certain temps pour comprendre comment l'utiliser, alors je vais expliquer à quiconque d'autre que c'était confus.

C’est essentiellement le réglage que vous visez:

(pour les versions tmux <2.5 )

bind -t vi-copy y copy-pipe 'xclip -in -selection clipboard'

(pour les versions tmux > = 2.5 )

bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel 'xclip -in -selection clipboard'

Puis appuyez sur Ctrl+b [pour entrer en mode copie. Ensuite, appuyez Spacesur la touche de déplacement quelconque pour effectuer une sélection. Ensuite, au lieu de frapper Enter, appuyez sur yet la sélection sera copiée dans le presse-papiers.

Remarque: cela suppose que vous utilisez les liaisons par défaut de tmux avec les clés vi.

Tmux a différentes tables de liaison de clés pour différents modes. Donc, bind-key -t vi-copy ydéfinit l'action pour la yclé en mode copie. Au début, j'étais confus parce que j'étais habitué à frapper Enteraprès avoir fait une sélection. Enterest en fait simplement la liaison de clé par défaut pour la copy-selectioncommande (en mode copie). La copy-pipecommande nous permet de lier une nouvelle clé pour diriger la sélection vers une commande, ce qui dans ce cas xclip.

Vous pouvez voir toutes les combinaisons de touches pour le mode copie en exécutant list-keys -t vi-copy.

Ben Davis
la source
Merci beaucoup, j’ai dû télécharger et compiler tmux 1.9a, mais ce n’était pas si difficile et maintenant ça marche ™!
Naftuli Kay
4
Si cela ne fonctionne pas, vérifiez simplement que le xclipsudo apt-get install xclip
logiciel
4
Pour OSX, remplacez xclippar pbcopy. Pour Cygwin sous Windows, remplacez-le par putclip(dans le cygutils-extrapackage).
SnoringFrog
5
La reliure suivante de cette entrée de blog fonctionne également très bien sur Tmux 2.6 et ne présente pas l'inconvénient de mettre des caractères apparemment aléatoires à l'écran lors de la copie:bind -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel "xclip -i -f -selection primary | xclip -i -selection clipboard"
Matthias Braun
1
Ce ne fonctionnait pas pour moi jusqu'à ce que j'enlevé cette ligne de .tmux.conf: set -g mouse on. Ceci est censé activer le "mode souris", mais même après l'avoir supprimée, tout fonctionne
correctement
11

La version mise à jour de la réponse de Ben Davis

compatible avec tmux 2.4

bind -T copy-mode-vi y send -X copy-pipe "xclip -selection c"
jruz
la source
4
Je trouve que cela fonctionne un peu mieux avec copy-pipe-and-cancelplutôt que copy-pipe. C'est sur tmux 2.5
wreckgar23
6

Vous rencontrez quelques problèmes techniques:
Les liaisons en «mode spécial» (par exemple vi-copy)…

  1. utiliser un ensemble de commandes différent (c.-à-d. que le run-shellsymbole runn'est pas disponible), et
  2. ne sont pas capables de lier plusieurs commandes (qui peuvent normalement être séparées par ;- le &&séparateur de commandes du shell n'est pas disponible).

tmux 1.8 a copy-pipe, ce qui pourrait aider si:

bind-key -t vi-copy y copy-pipe 'xclip -selection clipboard >/dev/null'

(Il existe une liaison comme celle-ci dans la FAQ .)

Chris Johnsen
la source
1
J'ai tmux 1.8 et cela ne semble pas fonctionner. (edit) Ugh, je déteste les entrées textarea qui se soumettent sur Enter. Quoi qu'il en soit, j'ai ajouté cette liaison de clé, mais lorsque je fais <préfixe> -y et que je clique sur [espace], le contenu n'est pas copié dans le Presse-papiers.
Ben Davis
Je viens de le comprendre. Je ne comprenais pas comment fonctionnait la table de raccourcis "vi-copy".
Ben Davis
5

Jetez un coup d'œil au plugin tmux-yank pour tmux. https://github.com/tmux-plugins/tmux-yank

Il fournit un moyen automatisé de copier / coller de tmux dans le presse-papiers du système. Cela fonctionne sur les systèmes OSX / Linux / Cygwin.

bergercookie
la source
Cela a bien fonctionné pour moi, merci pour le lien!
Bryan Henry
2

Pour macOS, vous pouvez ajouter cette ligne à .tmux.conf

bind -t vi-copy y copy-pipe 'pbcopy'

bumaociyuan
la source
Utilisateurs de macOS, pour tmux> = 2.5:bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel 'pbcopy'
Dai
1

C'est ce qui a finalement fonctionné pour moi avec tmux 2.2 et après avoir installé xclip. Pour la copie de style Vim, ajoutez ce qui suit à .tmux.conf

bind Escape copy-mode
bind -t vi-copy 'v' begin-selection
bind -t vi-copy 'y' copy-selection
# Vim style copy to clipboard
bind-key -t vi-copy y copy-pipe "xclip -selection c > /dev/null"
bind-key p run "xclip -o -sel clip | tmux load-buffer - ; tmux paste-buffer"

Ici, en mode copie, PREFIX v démarre la sélection et PREFIX y est copié dans le Presse-papiers. PREFIX p peut être utilisé pour coller dans le terminal.

OrigamiEye
la source