J'essaie de trouver un moyen décent de copier ce que j'ai dans un tampon tmux dans mon presse-papiers. J'ai essayé différentes choses comme
bind-key p select-pane -t 2 \; split-window 'xsel -i -b' \; paste-buffer
ce qui me rapproche assez, tout ce que j'ai à faire est d'appuyer sur control-d après avoir préfixé-p.
J'ai essayé de réparer ça en faisant
bind-key p select-pane -t 2 \; split-window 'xsel -i -b << HERE\; tmux paste-buffer\; echo HERE'
Mais ça ne marche pas. En fait, si je compare cela à juste
bind-key p select-pane -t 2 \; split-window 'xsel -i -b << HERE'
cela ne fait rien, donc je suppose que split-window n'aime pas << dans une commande shell.
Des idées?
Edit: Vous pouvez ignorer le select-pane -t 2
si vous voulez, ce n'est pas vraiment important. J'utilise simplement une présentation spécifique et le volet 2 est celui que je préfère scinder lorsque je fais autre chose, de sorte que les liaisons impliquant des scissions par défaut sont intégrées.
keyboard-shortcuts
tmux
clipboard
xclip
Pouvoirs numériques
la source
la source
Réponses:
Ici, les documents ont besoin de nouvelles lignes. Par exemple, dans un script shell, vous pouvez écrire
Je ne pense pas que tmux vous permette d'y placer des nouvelles lignes, et même si c'était le cas, ce ne serait pas une bonne approche. Que se passe-t-il si les données elles-mêmes ne contiennent que
HERE
sur une ligne (par exemple parce que vous les copiez.tmux.conf
)?Je suggère d'écrire le contenu du tampon dans un fichier temporaire. Non testé:
Il existe une condition de concurrence si vous utilisez cette commande dans deux instances distinctes de tmux. Je ne sais pas comment résoudre ça.
la source
mktemp
ce qui est largement disponible$PPID
dans un shell lancé par tmux). Mais comment obtenez-vous le nom de fichier variable (quelle que soit sa construction) dans l'argument desave-buffer
? Je suppose que,save-buffer - | …
comme dans la réponse de Grauwolf , qui supprime complètement un fichier temporaire?Cela devrait fonctionner:
la source
TMUX
variables d'environnement.C-p
serait:bind C-p run "xclip -o | tmux load-buffer - ; tmux paste-buffer"
- pas de problème de citation ni de problème de limite de ligne de commande.copy-mode
?xclip -o
option n'a pas fonctionné pour moi alors j'ai changé pourbind C-c run "tmux save-buffer - | xclip -selection c"\; display-message "Buffer copied to clipboard"
Une solution plus simple pour Mac OS-X
Cela découle de la réponse d'Alex et utilise des éléments qui n'existaient pas à l'époque.
Si vous utilisez homebrew (et si vous ne l'êtes pas, pourquoi ne l'êtes-vous pas?), Vous pouvez simplement faire ceci:
Puis dans votre
~/.tmux.conf
:Pour copier le tampon de tmux (vous devriez déjà avoir déjà copié quelque chose avec tmux) dans le pasteboard du Mac, utilisez
<tmux-key> Control-c
. Il sera maintenant disponible pourCommand-v
oupbpaste
Pour coller quelque chose à partir du presse-papiers Mac, utilisez
<tmux-key> Control-v
.la source
tmux show-buffer
ce qui causait des problèmes de retour à la ligne qui letmux save-buffer -
résolvaient.-
à la fintmux save-buffer -
?save-buffer
à la sortie standard. Vous pouvez remplacer le-
avec un nom de fichier et le sauvegarder ici. Cela vous évite d'écrire (et de nettoyer) un fichier.La
copy-pipe
commande a été ajoutée à partir de la version 1.8. Il copie une sélection dans le tampon tmux et la dirige vers une commande. Maintenant, il n'y a pas besoin de liaison de préfixe. Voici un exemple:Maintenant, lorsque vous avez du texte sélectionné dans
copy-mode
, ycopiez ce texte dans le tampon tmux ainsi que dans le presse-papier du système d'exploitation. Cependant, cela n'aidera pas si vous voulez obtenir du texte du presse-papiers dans la mémoire tampon tmux.la source
reattach-to-user-namespace
n’est plus nécessaire.bind-key -T copy-mode-vi y send-keys -X copy-pipe "xclip"
et pour OS X:bind-key -T copy-mode-vi y send-keys -X copy-pipe "reattach-to-user-namespace pbcopy"
Vous voudrez peut-être essayer le plugin tmux-yank . Il permet de copier directement dans le presse-papiers du système (OS X et Linux) et quelques autres choses intéressantes, telles que le retrait de la ligne de shell actuelle.
la source
Après avoir essayé différentes solutions, voici ma configuration finale:
L'utilisation de save-buffer au lieu de show-buffer donne les données réelles sans les données, comme indiqué par les sauts de ligne lorsque vous êtes dans des divisions.
J'utilise aussi cela pour commencer la sélection / copie en mode copie tmux:
J'imagine qu'il pourrait être possible de fusionner la sélection de copie avec la touche 'y' ET de la déplacer dans le presse-papiers x.
la source
Voici une tentative de réponse globale.
D'abord un peu d'histoire
Lorsque cette question a été posée pour la première fois (juin 2011), la copie de texte de Tmux dans le presse-papiers devait se faire en deux étapes: copiez d'abord le texte sélectionné dans la mémoire tampon de Tmux, puis copiez le texte de la mémoire tampon de Tmux dans le presse-papiers du système.
En 1.8 (mars 2013), la
copy-pipe
commande a été ajoutée pour vous permettre de copier le texte sélectionné directement dans le Presse-papiers du système (ou dans une autre destination).Puis, dans la version 2.4 (avril 2017), les tableaux de clés ont été modifiés de manière significative, rendant obsolètes de nombreuses réponses sur cette page.
Répondre à la question initiale
Linux :
Mac :
Si vous utilisez homebrew, vous devez l'installer
reattach-to-user-namespace
en exécutant la commande suivante dans un terminal:Puis dans votre ~ / .tmux.conf:
La méthode la plus courte (copier-coller une sélection directement depuis et vers le presse-papiers pour tmux> 2.4)
Remarque: il existe deux versions pour Linux car Linux possède un presse-papiers principal et secondaire (également appelé sélection).
Linux :
Mac :
Personnaliser ces commandes
Si vous ne voulez pas que la commande vous dise ce qu'elle a fait dans la ligne d'état, supprimez simplement le
display-message
(ainsi que le\;
précédant).Si vous utilisez le style Emacs copie en mode au lieu de vi puis remplacer une instance de
copy-mode-vi
avec justecopy-mode
Si vous utilisez Linux et que vous voulez utiliser
xsel
au lieu dexclip
remplacerxclip -r
parxsel -i -p
etxclip -o
avecxsel -o -p
Le
-r
inxclip -r
est facultatif, il supprime la dernière nouvelle ligne. Cela est utile pour copier des commandes. Lorsque vous les collez, elles ne seront pas exécutées immédiatement.Si vous effectuez un tunneling sur SSH, vous devez consulter https://unix.stackexchange.com/a/354581/14252.
Références:
> /dev/null
copier le tampon tmux dans le presse-papiers, tmux ne répondra pas aux raccourcis.la source
bind-key C-p run-shell "xclip -o | tmux load-buffer - ; tmux paste-buffer"
-elle toujours valide? pourtmux>2.4
Je n'aime pas avoir des touches supplémentaires, alors je voulais quelque chose de plus ambitieux. Passez en mode copie avec [, mettez en surbrillance le texte de droite, puis appuyez sur] pour copier le texte dans le Presse-papiers.
En outre, tmux aime inclure les nouvelles lignes dans les expressions qui se suivent (et curieusement ces nouvelles lignes se trouvent au mauvais endroit! Elles ne sont pas celles où l'expression est enveloppée à l'écran). Je voulais donc que C-] copie l'expression en supprimant les nouvelles lignes.
Sur tmux 1.6 j'ai essayé ceci:
mais cela n'a pas fonctionné car tmux ne semble pas content de lier des choses complexes à la table vi-copy. Alors j'ai fini par faire ceci à la place:
Cela conduit à des choses étranges (] ou C-] agira de manière amusante la prochaine fois que vous les utiliserez, mais seulement une fois) si vous quittez le mode copie d'une autre manière que] ou C-]. Cela pourrait être corrigé avec d'autres liaisons, j'imagine, mais cela fait ce que je veux la plupart du temps.
la source
Il existe une solution sur Arch Wiki utilisant
xclip
:https://wiki.archlinux.org/index.php/Tmux
la source
save-buffer
fichier de manière sécurisée dans un répertoire partagé? Sinon, le mettre/tmp
est un trou de sécurité. Il y a une utilisation inutile decat
, et la suppression du fichier temporaire est manquante. Ensuite, c’est une question dexsel
vsxclip
, qui sont équivalents ici, et vous avez ma solution (écrite de manière indépendante).Une solution pour Mac OS X. Suivez ces 2 étapes:
Utilisez la solution de contournement de Chris Johnsen: https://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard
Ajoutez ce code à votre configuration tmux (~ / .tmux.conf)
la source
Une variante légèrement modifiée de la réponse acceptée, que j'ai concoctée.
Je préfère également utiliser le presse-papiers du système (Ctrl-C, Ctrl-V) en plus du
primary
presse-papiers par défaut de xclip (celui obtenu avec la sélection de la souris et les clics de souris correspondants). Pour choisir le presse-papiers du système, vous devez passer un-selection clipboard
argument àxclip
.Aussi, lors de la copie d'un tampon dans un presse-papiers, j'aime la possibilité de choisir quel tampon je veux copier. Ceci est fait en utilisant
choose-buffer
puis en tamponnant l'argument àsave-buffer
utiliser-b %%
.UPDATE: D'une manière ou d'une autre, avec tmux 1.8 et deux de mes installations openSUSE 12.2, je vois un blocage quand
tmux run-shell
est appelé avec unexclip
lecture de stdin sur un tuyau. J'ai plutôt décidé d'xsel
essayer et cela semble fonctionner. Ce sont les raccourcis clavier équivalents qui utilisentxsel
. J'avais aussi l'habitude&&
d'enchaîner les commandes en pâte pour plus de robustesse.la source
Voici ma réponse plutôt longue qui devrait résoudre deux problèmes majeurs liés à l'utilisation de xclip pour copier le tampon à partir d'une session tmux distante (ssh):
1. xclip irresponsif
Pour moi, la réponse de @ Grauwolf avec
xclip
n'a pas fonctionné (rend le volet tmux totalement irresponsable). J'ai découvert pourquoi dans la page Tmux du wiki Arch :Donc, la liaison devrait être:
Maintenant, cela fonctionnera si votre session tmux est locale.
2. xclip incapable de se connecter à X
Si vous utilisez tmux sur ssh -X , il y a de grandes chances que cela ne fonctionne pas directement.
C'est parce que la variable shell
$DISPLAY
doit être définie correctement.Solution complète
Donc, pour moi, la solution de travail complète consiste à mettre les lignes suivantes dans mon
~/.tmux.conf
:Pour coller depuis le primaire:
Je ne comprends parfaitement pourquoi
$DISPLAY
n'est pas correctement en approvisionnement.tmux.conf
, donc c'est pourquoi je dois l' extraire avectmux show-env
etsed
.Si vous avez tmux> = 1.8, vous pouvez adapter cette commande avec
copy-pipe
:la source
/home/linux/.tmux.conf:11: invalid or unknown command: bind-key C-y run "tmux save-buffer - | xclip -i -selection clipboard -d `tmux show-env | sed -n 's[0/0] PLAY=//p'` >/dev/null
sed
commande que vous affichez n'est pas la même que celle que j'ai écrite ... Est-ce ce que vous avez écrit dans votre.tmux.conf
?sed
? La commande doit être:sed -n s/^DISPLAY=//p
. Sinon, vous pouvez utilisercut
:tmux show-env DISPLAY | cut -d'=' -f2
. Cela pourrait également valoir la peine de vérifier votre version de tmux.Pour les liaisons de style emacs, il existe différentes options. (Le style Vi devrait être similaire?) La liaison typique pour effectuer la "sélection de copie" dans emacs est Mw, il serait donc très pratique d'avoir la même liaison dans tmux.
1 - Serait idéal, mais ne fonctionne pas (en raison de la limitation de tmux?)
2 - Un compromis qui fonctionne bien pour moi : Acceptez l’utilisation d’un raccourci clavier différent pour emacs-copy dans tmux. Utilisez par exemple CMw. (Cette liaison sera définie "globalement" - pas seulement en mode copie - mais utile uniquement en mode copie)
la source
Beaucoup de ces réponses n'ont pas fonctionné pour mon Ubuntu 14.04 sur zsh tel quel. Je ne sais pas si mon shell a quelque chose à voir avec cela, mais voici ma version de travail d'utilisation de cette stratégie pour la copie et cette stratégie pour le collage
Quelques notes:
-sel clip -i
. Cette ligne combine le tampon yank to tmux et l’envoie à xclip.-sel clip -o
Cela fonctionne très bien maintenant pour ma configuration vim / zsh / tmux.
la source
-sel clip -i
résout le problème. Bien que, je ne comprenne pas pourquoi vous devez spécifier à nouveau le Presse-papiers pour le coller (la]
Et la version améliorée de la réponse @Leif pourrait être:
Ainsi, le code ci-dessus est encapsulé dans tundle / tmux- yank, un plugin tmux permettant de copier du texte tmux dans le presse-papiers, il cible tmux> = 1.6 sur OS X et Linux.
la source
Sous OS-X avec tmux version 2.2 ou ultérieure, ce qui suit fonctionnera:
la source
J'utilise
copyq
un gestionnaire de presse-papiers multiligne. (Cela fonctionne avec Windows, OSX, Linux.)Ajoutez les lignes suivantes dans
~/.tmux.conf
:cygwin
demande l'copyq.exe
emplacement dans~/.bashrc
:la source