Anfordern von tmux, einen Puffer in die Zwischenablage zu kopieren

118

Ich versuche einen anständigen Weg zu finden, um das, was ich in einem tmux-Puffer habe, in meine Zwischenablage zu kopieren. Ich habe ein paar verschiedene Sachen ausprobiert wie

bind-key p select-pane -t 2 \; split-window 'xsel -i -b' \; paste-buffer

das bringt mich ziemlich nahe, alles was ich tun muss ist control-d zu drücken, nachdem ich prefix-p gemacht habe.

Ich habe versucht, das dadurch zu beheben

bind-key p select-pane -t 2 \; split-window 'xsel -i -b << HERE\; tmux paste-buffer\; echo HERE'

Aber das geht einfach nicht. In der Tat, wenn ich dies auf nur koppeln

bind-key p select-pane -t 2 \; split-window 'xsel -i -b << HERE'

es macht nichts, also gehe ich davon aus, dass split-window << in einem Shell-Befehl nicht mag.

Irgendwelche Ideen?

Bearbeiten: Sie können das überspringen, select-pane -t 2wenn Sie möchten, es ist nicht wirklich wichtig. Ich verwende nur ein bestimmtes Layout, und Teilfenster 2 ist dasjenige, das ich lieber teile, wenn ich etwas anderes mache, damit es standardmäßig in meine Bindungen mit Teilungen eingeht.

Digitale Kräfte
quelle
2
Schauen Sie sich unbedingt die unten stehende Antwort für 2014 an, die aktueller ist als einige der anderen. Es wird das tmux yank Plugin empfohlen, das sehr gut funktioniert.
Dmonopol
Für eine Antwort, die mit Tmux 2.4 (veröffentlicht im April 2017) und 2.6 aktuell ist, siehe meine Antwort
Jason Axelson

Antworten:

26

Hier brauchen Dokumente Zeilenumbrüche. In einem Shell-Skript können Sie beispielsweise schreiben

cat <<EOF >somefile; echo  done
file contents
EOF

Ich glaube nicht, dass Sie mit tmux neue Zeilen einfügen können, und selbst wenn dies der Fall wäre, wäre dies kein guter Ansatz. Was ist, wenn die Daten selbst HEREnur eine Zeile enthalten (z. B. weil Sie Ihre kopieren .tmux.conf)?

Ich schlage vor, den Pufferinhalt in eine temporäre Datei zu schreiben. Ungetestet:

bind-key p save-buffer ~/.tmux-buffer \; run-shell "xsel -i -b <~/.tmux-buffer && rm ~/.tmux-buffer"

Es gibt eine Race-Bedingung, wenn Sie diesen Befehl in zwei separaten tmux-Instanzen verwenden. Ich weiß nicht, wie ich das lösen soll.

Gilles
quelle
Dank funktioniert perfekt, die Rennbedingungen sind für mich kein Problem, ich benutze nur 1 Sitzung.
Digital Powers
Um Rennbedingungen zu vermeiden, empfehle ich die Verwendung mktempder allgemein verfügbaren
Trauer
@Grief Gute Idee. In diesem Fall würde die Verwendung der PID des tmux-Prozesses ebenfalls funktionieren und wäre wahrscheinlich einfacher zu arrangieren ( $PPIDin einer von tmux gestarteten Shell). Aber wie bekommt man den variablen Dateinamen (wie auch immer er aufgebaut ist) in das Argument von save-buffer? Ich denke, save-buffer - | …wie in Grauwolfs Antwort , die eine temporäre Datei insgesamt beseitigt?
Gilles
Du hast recht, mein Fehler, das wäre nicht möglich.
Trauer
93

Das sollte funktionieren:

# move x clipboard into tmux paste buffer
bind C-p run "tmux set-buffer \"$(xclip -o)\"; tmux paste-buffer"
# move tmux copy buffer into x clipboard
bind C-y run "tmux save-buffer - | xclip -i"
Grauwolf
quelle
1
So ist es auch. Das ist viel schöner als die Verwendung einer temporären Datei, danke. Dank der TMUXUmgebungsvariablen werden sogar mehrere gleichzeitige Sitzungen automatisch verarbeitet .
Gilles
22
Eine bessere Anleitung für die C-pwäre: bind C-p run "xclip -o | tmux load-buffer - ; tmux paste-buffer"- Keine Probleme mit Zitaten oder Kommandozeilenlimits.
docwhat
8
Hat tmux einen Haken, um die Auswahl in die Zwischenablage zu kopieren copy-mode?
Ehtesh Choudhury
1
xclip -oDie Option hat bei mir nicht funktioniert, also habe ich zubind C-c run "tmux save-buffer - | xclip -selection c"\; display-message "Buffer copied to clipboard"
Pawka
6
Jedes Mal, wenn ich die Kopie auf diese Weise mache, reagiert tmux nicht mehr auf Tastaturkürzel. Irgendeine Lösung dafür?
Skrat
41

Eine einfachere Lösung für Mac OS-X

Dies baut auf Alex 'Antwort auf und verwendet Dinge, die zu diesem Zeitpunkt noch nicht existierten.

Wenn Sie Homebrew verwenden (und wenn nicht, warum nicht?), Können Sie dies einfach tun:

brew install reattach-to-user-namespace

Dann in deinem ~/.tmux.conf:

set-option -g default-command "reattach-to-user-namespace -l zsh" # or bash...
bind C-c run "tmux save-buffer - | reattach-to-user-namespace pbcopy"
bind C-v run "reattach-to-user-namespace pbpaste | tmux load-buffer - && tmux paste-buffer"

Um den Puffer von tmux (Sie sollten bereits etwas mit tmux kopiert haben) in das Mac-Pasteboard zu kopieren, verwenden Sie <tmux-key> Control-c. Es wird jetzt für Command-voder verfügbar seinpbpaste

Verwenden Sie, um etwas aus dem Mac-Pasteboard einzufügen <tmux-key> Control-v.

docwhat
quelle
2
Diese Antwort ist hervorragend. Ich habe verwendet, tmux show-bufferwelche Zeilenumbruchprobleme das tmux save-buffer -Problem gelöst haben.
event_jr
Was macht der -am Ende tmux save-buffer -?
Hekevintran
Gibt das save-bufferzu stdout aus. Sie können den -Dateinamen durch einen Dateinamen ersetzen, der dort gespeichert wird. Dies verhindert, dass Sie eine Datei schreiben (und bereinigen müssen).
docwhat
1
Ab OS X 10.10 ist das erneute Anfügen eines Benutzernamensraums nicht mehr erforderlich. Fast jedes Tutorial und jede Dokumentation in Bezug auf tmux und OS X erwähnt es, da das Kopieren und Einfügen vor ein paar Jahren nicht einfach möglich war. Heutzutage funktioniert es (meistens) sofort.
Rafael Bugajewski
40

Der copy-pipeBefehl wurde ab Version 1.8 hinzugefügt. Es kopiert eine Auswahl in den tmux-Puffer und leitet sie an einen Befehl weiter. Jetzt ist keine Präfixbindung mehr erforderlich. Hier ist ein Beispiel:

bind -t vi-copy y copy-pipe "xclip"

# For OS X users:
bind -t vi-copy y copy-pipe "reattach-to-user-namespace pbcopy"

Wenn Sie nun Text ausgewählt haben copy-mode, ywird dieser Text in den tmux-Puffer sowie in die Zwischenablage des Betriebssystems kopiert. Es hilft jedoch nicht, wenn Sie Text aus der Zwischenablage in den tmux-Puffer kopieren möchten.

Tyler Holien
quelle
1
Funktioniert perfekt und ist die einfachste Lösung des Bündels.
Naseer
2
Funktioniert bei mir unter Linux nicht, dies jedoch: unix.stackexchange.com/a/131074/13601
Sebastian Blask
1
Ab OS X 10.10 ist dies anscheinend reattach-to-user-namespacenicht erforderlich.
Chris
arbeitet an el capitan
olleh
2
Dies funktioniert nicht mehr für Tmux 2.4, das am 20. April 2017 veröffentlicht wurde. Stattdessen müssen Sie bind-key -T copy-mode-vi y send-keys -X copy-pipe "xclip"und für OS X verwenden:bind-key -T copy-mode-vi y send-keys -X copy-pipe "reattach-to-user-namespace pbcopy"
Jason Axelson
16

Vielleicht möchten Sie das tmux-yank-Plugin ausprobieren . Es ermöglicht das direkte Kopieren in die System-Zwischenablage (OS X und Linux) und einige andere Extras wie das Ziehen der aktuellen Shell-Zeile.


quelle
7
Dies ist eine großartige, saubere Lösung und sollte mehr in Betracht gezogen werden, da es sich um eine viel aktuellere Antwort handelt als die anderen. Danke für das Teilen!
Dmonopol
9

Nachdem ich eine andere Lösung ausprobiert habe, ist hier mein endgültiges Setup:

# move x clipboard into tmux paste buffer
bind C-p run "xclip -o | tmux load-buffer -
# move tmux copy buffer into x clipboard
bind C-y run "tmux save-buffer - | xclip -i -selection clipboard"

Wenn Sie "save-buffer" anstelle von "show-buffer" verwenden, werden die realen Daten ohne die mit Zeilenumbrüchen dargestellten Daten angezeigt, wenn Sie sich in Teilungen befinden.

Ich benutze dies auch, um die Auswahl / das Kopieren im tmux-Kopiermodus zu starten:

bind-key -t vi-copy 'v' begin-selection
bind-key -t vi-copy 'y' copy-selection

Ich denke, es könnte möglich sein, die Kopieauswahl mit der 'y'-Taste zusammenzuführen UND in die x-Zwischenablage zu verschieben.

Ownatik
quelle
Ich habe versucht, beide Befehle, wie Sie erwähnt haben, ohne Erfolg zusammenzuführen. Irgendwelche Ideen, wie es geht?
Rafael Vega
9

Hier ist ein Versuch einer umfassenden Antwort.

Zuerst ein bisschen Geschichte

Als diese Frage zum ersten Mal gestellt wurde (Juni 2011), musste das Kopieren von Text aus Tmux in die Zwischenablage in zwei Schritten erfolgen. Kopieren Sie zuerst den ausgewählten Text in den Puffer von Tmux und dann den Text aus dem Puffer von Tmux in die Zwischenablage des Systems.

In 1.8 (März 2013) wurde der copy-pipeBefehl hinzugefügt, mit dem Sie den ausgewählten Text direkt in die Systemzwischenablage (oder ein anderes Ziel) kopieren können.

In 2.4 (April 2017) wurden die Schlüsseltabellen erheblich geändert, sodass viele der Antworten auf dieser Seite veraltet sind.

Beantwortung der ursprünglichen Frage

Linux :

bind-key C-y run-shell "tmux save-buffer - | xclip -i -r > /dev/null" \; display-message "Copied tmux buffer to selection"
bind-key C-Y run-shell "tmux save-buffer - | xclip -i -r -selection clipboard > /dev/null" \; display-message "Copied tmux buffer to clipboard"
bind-key C-p run-shell "xclip -o | tmux load-buffer - ; tmux paste-buffer"

Mac :

Wenn Sie Homebrew verwenden , sollten Sie die Installation reattach-to-user-namespacemit dem folgenden Befehl in einem Terminal ausführen:

brew install reattach-to-user-namespace

Dann in deiner ~ / .tmux.conf:

bind-key C-y run-shell "tmux save-buffer - | reattach-to-user-namespace pbcopy" \; display-message "Copied tmux buffer to clipboard"
bind-key C-p run-shell "reattach-to-user-namespace pbpaste | tmux load-buffer - ; tmux paste-buffer"

Die kürzere Methode (kopiere und füge eine Auswahl direkt aus und in die Zwischenablage für tmux> 2.4 ein)

Hinweis: Es gibt zwei Versionen für Linux, da Linux über eine primäre und eine sekundäre Zwischenablage verfügt (auch als Auswahl bezeichnet).

Linux :

bind-key -T copy-mode-vi y send-keys -X copy-pipe "xclip -r" \; display-message "Copied to selection"
bind-key -T copy-mode-vi Y send-keys -X copy-pipe "xclip -r -selection clipboard" \; display-message "Copied to clipboard"
bind-key C-p run-shell "xclip -o | tmux load-buffer - && tmux paste-buffer"

Mac :

bind-key -T copy-mode-vi y send-keys -X copy-pipe "reattach-to-user-namespace pbcopy" \; display-message "Copied to clipboard"

Anpassen dieser Befehle

  • Wenn Sie nicht möchten, dass der Befehl Ihnen sagt, was er in der Statuszeile getan hat, entfernen Sie einfach das display-message(sowie das \;, was davor steht).

  • Wenn Sie den Emacs-Kopiermodus anstelle von vi verwenden, ersetzen Sie jede Instanz von copy-mode-vidurch justcopy-mode

  • Wenn Sie Linux verwenden und xselanstelle von xclipersetzen xclip -rmit xsel -i -pund xclip -omit verwenden möchtenxsel -o -p

  • Die -rin xclip -rist optional, es entfernt das letzte Newline. Es ist nützlich, um Befehle zu kopieren. Wenn Sie sie dann einfügen, werden sie nicht sofort ausgeführt.

  • Wenn Sie über SSH tunneln, sollten Sie https://unix.stackexchange.com/a/354581/14252 konsultieren

Verweise:

Jason Axelson
quelle
Ist dieser Befehl bind-key C-p run-shell "xclip -o | tmux load-buffer - ; tmux paste-buffer"noch gültig? fürtmux>2.4
alpha_989
7

Ich mag keine zusätzlichen Tastendrücke, deshalb wollte ich etwas ehrgeizigeres. Aktivieren Sie den Kopiermodus mit [, markieren Sie den richtigen Text und drücken Sie dann], um den Text in die Zwischenablage zu kopieren.

Außerdem fügt tmux gern Zeilenumbrüche in umbrochene Ausdrücke ein (und seltsamerweise befinden sich diese Zeilenumbrüche an der falschen Stelle! Sie befinden sich nicht dort, wo der Ausdruck auf dem Bildschirm umbrochen wird). Also wollte ich, dass C-] den Ausdruck kopiert und die Zeilenumbrüche entfernt.

Unter tmux 1.6 habe ich Folgendes versucht:

bind [ copy-mode
bind -t vi-copy ] run "tmux send-keys Enter; tmux show-buffer | xclip -i -selection clipboard;"
bind -t vi-copy C-] run "tmux send-keys Enter; tmux show-buffer | perl -pe 's/\n//' | xclip -i -selection clipboard;"

aber das hat nicht funktioniert, weil tmux nicht glücklich zu sein scheint, komplexe dinge an die vi-copy-tabelle zu binden. Also habe ich dies stattdessen getan:

bind [ copy-mode \;                                                        \
    bind -n ] run                                                          \
    "tmux send-keys Enter;                                                 \
     tmux show-buffer | xclip -i -selection clipboard;                     \
     tmux unbind -n C-];                                                   \
     tmux unbind -n ]" \;                                                  \
    bind -n C-] run                                                        \
    "tmux send-keys Enter;                                                 \
     tmux show-buffer | perl -pe 's/\n//' | xclip -i -selection clipboard; \
     tmux unbind -n C-];                                                   \
     tmux unbind -n ]"

Dies führt dazu, dass seltsame Dinge (] oder C-] sich beim nächsten Gebrauch lustig verhalten, aber nur einmal), wenn Sie den Kopiermodus auf eine andere Weise als] oder C-] verlassen. Dies könnte mit einigen weiteren Bindungen behoben werden, die ich mir vorstelle, aber diese tun die meiste Zeit, was ich will.

Leif
quelle
stackoverflow.com/a/10954274/69663 stellt fest, dass ein entsprechender Fehlerbericht zu den Einschränkungen von bind-key unter sourceforge.net/tracker/…
unhammer 22.11.12
4

Es gibt eine Lösung im Arch Wiki mit xclip:

# move tmux copy buffer into x clipboard
bind-key C-y save-buffer /tmp/tmux-buffer \; run-shell "cat /tmp/tmux-buffer | xclip"

https://wiki.archlinux.org/index.php/Tmux

jasonwryan
quelle
2
Erstellt tmux die save-bufferDatei sicher in einem freigegebenen Verzeichnis? Ansonsten ist das Einstecken /tmpeine Sicherheitslücke. Es gibt eine sinnlose Verwendung von catund das Entfernen der temporären Datei fehlt. Dann geht es um xselvs xclip, die hier gleichwertig sind, und Sie haben meine (unabhängig geschriebene) Lösung.
Gilles
1
Vielen Dank, Gilles. Ich werde das Wiki aktualisieren, um Ihre Punkte wiederzugeben.
Jasonwryan
4

Eine Lösung für Mac OS X. Befolgen Sie diese beiden Schritte:

  1. Verwenden Sie die Problemumgehung von Chris Johnsen: https://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard

  2. Füge diesen Code zu deiner tmux Konfiguration hinzu (~ / .tmux.conf)

# paste clipboard into tmux buffer
bind v run-shell "reattach-to-user-namespace -l zsh -c 'tmux set-buffer \\"$(pbpaste)\\"; tmux paste-buffer'"
# put tmux buffer into x clipboard
bind y run-shell "reattach-to-user-namespace -l zsh -c 'tmux show-buffer | pbcopy'"

Alex Gaudio
quelle
4

Eine leicht abgewandelte Variante der akzeptierten Antwort, die ich mir ausgedacht habe.

Ich bevorzuge es auch, die System-Zwischenablage (Strg-C, Strg-V) zusätzlich zur primaryStandard-Zwischenablage von xclip zu verwenden (diejenige, die Sie bei der Mausauswahl und bei mittleren Mausklicks erhalten). Um die System-Zwischenablage auszuwählen, müssen Sie ein -selection clipboardArgument übergeben xclip.

Auch beim Kopieren eines Puffers in die Zwischenablage gefällt mir die Möglichkeit, auszuwählen, welchen Puffer ich kopieren möchte. Es wird ausgeführt, indem choose-bufferdas Argument using und anschließend buffer an save-bufferusing übergeben werden -b %%.

# Copy into clipboard
bind C-c choose-buffer "run \"tmux save-buffer -b %% - | xclip -i -selection clipboard\""
# Paste from clipboard
bind C-v run "xclip -o -selection clipboard | tmux load-buffer - ; tmux paste-buffer"
# Copy into primary
bind C-y choose-buffer "run \"tmux save-buffer -b %% - | xclip -i \""
# Paste from primary
bind C-p run "xclip -o | tmux load-buffer - ; tmux paste-buffer"

UPDATE: Irgendwie kommt es bei tmux 1.8 und zwei meiner openSUSE 12.2-Installationen zu einem Absturz, wenn tmux run-shelldas xclipLesen von stdin über eine Pipe aufgerufen wird . Ich beschloss stattdessen, es zu xselversuchen, und das scheint zu funktionieren. Dies sind die entsprechenden Tastenkombinationen xsel. Ich habe &&die Befehle auch aus Gründen der Robustheit in Paste verkettet.

# Copy into clipboard
bind C-c choose-buffer "run \"tmux save-buffer -b '%%' - | xsel -i -b\""
# Paste from clipboard
bind C-v run "xsel -o -b | tmux load-buffer - && tmux paste-buffer"
# Copy into primary
bind C-y choose-buffer "run \"tmux save-buffer -b '%%' - | xsel -i\""
# Paste from primary
bind C-p run "xsel -o | tmux load-buffer - && tmux paste-buffer"
Tuxdude
quelle
4

Dies ist meine langwierige Antwort, die zwei Hauptprobleme bei der Verwendung von xclip zum Kopieren des Puffers aus einer Remote (ssh) tmux-Sitzung beheben sollte:

1. Nicht reagierender xclip

Bei mir hat @ Grauwolfs Antwort mit xclipnicht geklappt (macht tmux pane total unempfindlich). Ich habe auf der Tmux-Seite des Arch-Wikis herausgefunden, warum :

xclip könnte auch für diesen Zweck verwendet werden, im Gegensatz zu xsel funktioniert es besser, wenn roher Bitstream gedruckt wird, der nicht zum aktuellen Gebietsschema passt. Trotzdem ist es sinnvoller, xsel anstelle von xclip zu verwenden, da xclip STDOUT nicht schließt, nachdem es aus dem Puffer von tmux gelesen hat. Daher weiß tmux nicht, dass der Kopiervorgang abgeschlossen ist, und wartet weiterhin auf die Beendigung von xclip, wodurch tmux nicht mehr reagiert. Eine Problemumgehung besteht darin, STDOUT von xclip nach / dev / null umzuleiten

Die Bindung sollte also sein:

bind-key C-y run "tmux save-buffer - | xclip -i -sel clip > /dev/null"

Dies funktioniert nun, wenn Ihre tmux-Sitzung lokal ist.

2. xclip kann keine Verbindung zu X herstellen

Wenn Sie tmux über ssh -X verwenden , ist die Wahrscheinlichkeit groß, dass dies nicht direkt funktioniert .

Das liegt daran, dass die Shell-Variable $DISPLAYrichtig gesetzt werden muss.

Komplette Lösung

Für mich besteht die vollständige Arbeitslösung darin, die folgenden Zeilen in meine einzufügen ~/.tmux.conf:

set-option -g update-environment "DISPLAY"
bind-key C-y run "export DISPLAY=`tmux show-env | sed -n 's/^DISPLAY=//p'`; tmux save-buffer - | xclip -i -selection clipboard >/dev/null"
# Or more concise:
bind-key C-y run "tmux save-buffer - | xclip -i -selection clipboard -d `tmux show-env | sed -n 's/^DISPLAY=//p'` >/dev/null

Zum Einfügen vom primären:

bind-key C-p run "xclip -d `tmux show-env | sed -n s/^DISPLAY=//p` -o | tmux load-buffer - && tmux paste-buffer"

Ich verstehe nicht ganz, warum $DISPLAYbeim Sourcing die Einstellungen nicht korrekt .tmux.confsind. Deshalb muss ich sie mit tmux show-envund extrahieren sed.

Wenn Sie tmux> = 1.8 haben, können Sie diesen Befehl anpassen mit copy-pipe:

bind-key -t vi-copy y copy-pipe 'xclip -in -selection clipboard -d `tmux show-env | sed -n s/^DISPLAY=//p` >/dev/null'
PlasmaBinturong
quelle
/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
Benutzer
@user Der angezeigte sedBefehl ist nicht derselbe wie der, den ich geschrieben habe ... Ist es das, was Sie in Ihrem geschrieben haben .tmux.conf?
PlasmaBinturong
Ich habe gerade Ihren Code kopiert und eingefügt.
Benutzer
@user, komisch. Es kann viele Fehlerquellen geben. Überprüfen Sie zuerst, ob Ihr Angebot in Ordnung ist. Dann kennen Sie sich aus sed? Der Befehl soll sed -n s/^DISPLAY=//p. Alternativ könnten Sie verwenden cut: tmux show-env DISPLAY | cut -d'=' -f2. Es könnte sich auch lohnen, Ihre tmux-Version zu überprüfen.
PlasmaBinturong
3

Ich versuche einen anständigen Weg zu finden, um das, was ich in einem tmux-Puffer habe, in meine Zwischenablage zu kopieren. Ich habe ein paar verschiedene Sachen ausprobiert wie

Für Emacs-Style-Bindungen gibt es verschiedene Optionen. (Vi-Stil sollte ähnlich sein?) Die typische Bindung für die "Kopierauswahl" in Emacs ist Mw, daher wäre es sehr praktisch, dieselbe Bindung in tmux zu haben.

1 - Wäre ideal, aber funktioniert nicht (aufgrund der tmux-Einschränkung?)

unbind-key -t emacs-copy M-w
bind-key -t emacs-copy M-w copy-selection\; \
  run-shell "tmux save-buffer - | xsel --input --clipboard"

2 - Ein Kompromiss, der für mich gut funktioniert : Akzeptieren Sie die Verwendung einer anderen Tastenkombination für emacs-copy in tmux. Verwenden Sie zum Beispiel CMw. (Diese Bindung wird "global" definiert - nicht nur im Kopiermodus - sondern nur im Kopiermodus)

bind-key -n C-M-w send-keys M-w\; \
 run-shell "tmux save-buffer - | xsel --input --clipboard" 
Hugo Heden
quelle
3

Viele dieser Antworten funktionierten für mein Ubuntu 14.04 auf zsh nicht wie sie sind. Ich bin mir nicht sicher, ob meine Shell irgendetwas damit zu tun hat, aber hier ist meine Arbeitsversion dieser Strategie zum Kopieren und dieser Strategie zum Einfügen.

    bind-key -t vi-copy 'v' begin-selection
    bind-key -t vi-copy 'y' copy-pipe "xclip -sel clip -i"
    bind-key ] run-shell "xclip -sel clip -o | tmux load-buffer - ; tmux paste-buffer" 

Einige Notizen:

  • für copy-pipe musste ich meine zwischenablage mit angeben -sel clip -i. Diese Zeile kombiniert den yank-to-tmux-Puffer und sendet ihn an xclip.
  • um es tatsächlich einzufügen, musste ich nochmal angeben mit welcher zwischenablage -sel clip -o

Das funktioniert jetzt wunderbar für mein vim / zsh / tmux-Setup.

brianclements
quelle
Dankeschön! -sel clip -ilöst das Problem. Obwohl ich nicht verstehe, warum Sie die Zwischenablage erneut angeben müssen, um sie ]
einzufügen
1

Eine verbesserte Version von @Leif answer könnte sein:

tmux bind-key '[' run "tmux copy-mode;
tmux bind-key -n ']' run \"tmux send-keys Enter; tmux save-buffer - | xclip -i -selection clipboard;
tmux unbind-key -n ']'\";
tmux bind-key -n q run \"tmux unbind -n ']'; tmux send-keys q\";
tmux bind-key -n C-c run \"tmux unbind -n ']'; tmux send-keys C-c\""

Auf diese Weise hat es keine Konsequenzen, wenn Sie den Kopiermodus auf eine andere Weise als] verlassen. Der obige Code wird in tundle / tmux-yank ein tmux-Plugin zum Kopieren von tmux-Text in die System-Zwischenablage eingebunden. Es zielt auf tmux> = 1.6 unter OS X ab und Linux.

Javier López
quelle
1

Unter OS-X mit tmux Version 2.2 oder höher funktioniert Folgendes:

bind-key -t emacs-copy MouseDragEnd1Pane copy-pipe "pbcopy"
bind-key -t vi-copy MouseDragEnd1Pane copy-pipe "pbcopy"
Kyle Kloepper
quelle
1

Ich benutze copyqeinen mehrzeiligen Zwischenablage-Manager. (Es funktioniert mit Windows, OSX, Linux.)

  • Fügen Sie die folgenden Zeilen hinzu ~/.tmux.conf:

    set-window-option -g mode-keys vi
    bind C-y run 'out=`tmux save-buffer - ` && copyq add "$out"'
    
  • cygwinverlangt copyq.exeStandort in ~/.bashrc:

    export PATH="$PATH:/cygdrive/c/Program Files (x86)/CopyQ"
    
Oleg Svechkarenko
quelle