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 2
wenn 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.
quelle
Antworten:
Hier brauchen Dokumente Zeilenumbrüche. In einem Shell-Skript können Sie beispielsweise schreiben
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
HERE
nur eine Zeile enthalten (z. B. weil Sie Ihre kopieren.tmux.conf
)?Ich schlage vor, den Pufferinhalt in eine temporäre Datei zu schreiben. Ungetestet:
Es gibt eine Race-Bedingung, wenn Sie diesen Befehl in zwei separaten tmux-Instanzen verwenden. Ich weiß nicht, wie ich das lösen soll.
quelle
mktemp
der allgemein verfügbaren$PPID
in einer von tmux gestarteten Shell). Aber wie bekommt man den variablen Dateinamen (wie auch immer er aufgebaut ist) in das Argument vonsave-buffer
? Ich denke,save-buffer - | …
wie in Grauwolfs Antwort , die eine temporäre Datei insgesamt beseitigt?Das sollte funktionieren:
quelle
TMUX
Umgebungsvariablen werden sogar mehrere gleichzeitige Sitzungen automatisch verarbeitet .C-p
wäre:bind C-p run "xclip -o | tmux load-buffer - ; tmux paste-buffer"
- Keine Probleme mit Zitaten oder Kommandozeilenlimits.copy-mode
?xclip -o
Die 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"
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:
Dann in deinem
~/.tmux.conf
: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ürCommand-v
oder verfügbar seinpbpaste
Verwenden Sie, um etwas aus dem Mac-Pasteboard einzufügen
<tmux-key> Control-v
.quelle
tmux show-buffer
welche Zeilenumbruchprobleme dastmux save-buffer -
Problem gelöst haben.-
am Endetmux save-buffer -
?save-buffer
zu 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).Der
copy-pipe
Befehl 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: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.quelle
reattach-to-user-namespace
nicht erforderlich.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"
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
Nachdem ich eine andere Lösung ausprobiert habe, ist hier mein endgültiges Setup:
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:
Ich denke, es könnte möglich sein, die Kopieauswahl mit der 'y'-Taste zusammenzuführen UND in die x-Zwischenablage zu verschieben.
quelle
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-pipe
Befehl 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 :
Mac :
Wenn Sie Homebrew verwenden , sollten Sie die Installation
reattach-to-user-namespace
mit dem folgenden Befehl in einem Terminal ausführen:Dann in deiner ~ / .tmux.conf:
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 :
Mac :
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-vi
durch justcopy-mode
Wenn Sie Linux verwenden und
xsel
anstelle vonxclip
ersetzenxclip -r
mitxsel -i -p
undxclip -o
mit verwenden möchtenxsel -o -p
Die
-r
inxclip -r
ist 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:
> /dev/null
Kopieren des tmux Puffer in die Zwischenablage verursacht tmux reagieren nicht auf Verknüpfungenquelle
bind-key C-p run-shell "xclip -o | tmux load-buffer - ; tmux paste-buffer"
noch gültig? fürtmux>2.4
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:
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:
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.
quelle
Es gibt eine Lösung im Arch Wiki mit
xclip
:https://wiki.archlinux.org/index.php/Tmux
quelle
save-buffer
Datei sicher in einem freigegebenen Verzeichnis? Ansonsten ist das Einstecken/tmp
eine Sicherheitslücke. Es gibt eine sinnlose Verwendung voncat
und das Entfernen der temporären Datei fehlt. Dann geht es umxsel
vsxclip
, die hier gleichwertig sind, und Sie haben meine (unabhängig geschriebene) Lösung.Eine Lösung für Mac OS X. Befolgen Sie diese beiden Schritte:
Verwenden Sie die Problemumgehung von Chris Johnsen: https://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard
Füge diesen Code zu deiner tmux Konfiguration hinzu (~ / .tmux.conf)
quelle
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
primary
Standard-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 clipboard
Argument übergebenxclip
.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-buffer
das Argument using und anschließend buffer ansave-buffer
using übergeben werden-b %%
.UPDATE: Irgendwie kommt es bei tmux 1.8 und zwei meiner openSUSE 12.2-Installationen zu einem Absturz, wenn
tmux run-shell
dasxclip
Lesen von stdin über eine Pipe aufgerufen wird . Ich beschloss stattdessen, es zuxsel
versuchen, und das scheint zu funktionieren. Dies sind die entsprechenden Tastenkombinationenxsel
. Ich habe&&
die Befehle auch aus Gründen der Robustheit in Paste verkettet.quelle
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
xclip
nicht geklappt (macht tmux pane total unempfindlich). Ich habe auf der Tmux-Seite des Arch-Wikis herausgefunden, warum :Die Bindung sollte also sein:
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
$DISPLAY
richtig 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
:Zum Einfügen vom primären:
Ich verstehe nicht ganz, warum
$DISPLAY
beim Sourcing die Einstellungen nicht korrekt.tmux.conf
sind. Deshalb muss ich sie mittmux show-env
und extrahierensed
.Wenn Sie tmux> = 1.8 haben, können Sie diesen Befehl anpassen mit
copy-pipe
: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
sed
Befehl ist nicht derselbe wie der, den ich geschrieben habe ... Ist es das, was Sie in Ihrem geschrieben haben.tmux.conf
?sed
? Der Befehl sollsed -n s/^DISPLAY=//p
. Alternativ könnten Sie verwendencut
:tmux show-env DISPLAY | cut -d'=' -f2
. Es könnte sich auch lohnen, Ihre tmux-Version zu überprüfen.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?)
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)
quelle
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.
Einige Notizen:
-sel clip -i
. Diese Zeile kombiniert den yank-to-tmux-Puffer und sendet ihn an xclip.-sel clip -o
Das funktioniert jetzt wunderbar für mein vim / zsh / tmux-Setup.
quelle
-sel clip -i
löst das Problem. Obwohl ich nicht verstehe, warum Sie die Zwischenablage erneut angeben müssen, um sie]
Eine verbesserte Version von @Leif answer könnte sein:
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.
quelle
Unter OS-X mit tmux Version 2.2 oder höher funktioniert Folgendes:
quelle
Ich benutze
copyq
einen mehrzeiligen Zwischenablage-Manager. (Es funktioniert mit Windows, OSX, Linux.)Fügen Sie die folgenden Zeilen hinzu
~/.tmux.conf
:cygwin
verlangtcopyq.exe
Standort in~/.bashrc
:quelle