Ich verwende die neueste Version von tmux (aus dem Git-Repository) und xclip (0.12) und möchte in der Lage sein, mit Emacs-ähnlichen Tastaturbefehlen den Text in der Zwischenablage zu verschieben, Auswahlen copy-mode
( M-w
) in die Zwischenablage zu kopieren und Einfügen ( C-y
) von / in den Kopierpuffer in die Zwischenablage.
Bisher habe ich in der Lage gewesen Text einfügen mit C-y
, und bewegen sich in copy-mode
mit Emacs-wie Tastaturbindungen, aber ich bin noch nicht Text kopieren von einem tmux Puffer (zB in copy-mode
)
Ich habe diesen Thread zum Kopieren des gesamten Puffers in die Zwischenablage (und umgekehrt) gefunden, aber er scheint bei mir nicht zu funktionieren.
Außerdem wurde tmux-users
mir in der Mail-Liste mitgeteilt, dass die neuesten Versionen von tmux (nur im Git-Repo) einen aufgerufenen Befehl enthalten copy-pipe
. Die Manpage sagt folgendes zu diesem Befehl:
Ein Befehl in akzeptiert ein Argument, copy-pipe, das die Auswahl kopiert und an einen Befehl weiterleitet. Das folgende Beispiel bindet 'C-q', um die Auswahl in / tmp sowie den Einfügepuffer zu kopieren:
bind-key -temacs-copy C-q copy-pipe "cat >/tmp/out"
Es sieht so aus, als ob copy-pipe
es teilweise verwendet werden soll, um die Auswahl an einen anderen Befehl weiterzuleiten. Es scheint auch einige Tippfehler in dieser Beschreibung und im Befehl zu geben (was ist das temacs-copy
?)
Auf jeden Fall möchte ich Folgendes tun:
Kopieren:
- Aktivieren Sie den Kopiermodus
- Verschieben Sie in dem Text Ich möchte Emacs Navigationsbefehle zum Kopieren verwendet (dh
C-f
,C-b
,M-f
,M-b
,C-a
,C-e
etc. , um den Cursor zu bewegen). Kein Präfix für irgendetwas davon. - Kopieren Sie den ausgewählten Text in die Zwischenablage mit:
M-w
(auch ohne Präfix )
Einfügen:
- Ich möchte in der Lage sein, Text in das Terminal einzufügen
C-y
( ohne ihn eingeben zu müssencopy-mode
) (auch ohne Präfix )
Ich habe folgendes zum Kopieren ohne Glück versucht:
bind-key -n M-w run "tmux save-buffer - | xclip -i -selection clipboard"
Das Einfügen funktioniert jedoch hervorragend:
bind-key -n C-y run "xclip -o | tmux load-buffer - ; tmux paste-buffer"
Das seltsame ist, dass ich weiß, dass der " xclip -i -selection clipboard
" Teil des Kopierbefehls gut funktioniert, da ich Dinge in die Zwischenablage in der Befehlszeile kopieren kann , zB:
echo "Hello world. How are you?" | xclip -i -selection clipboard
Wie kann ich bei alledem eine Auswahl aus dem Kopiermodus in die Zwischenablage kopieren?
run-shell
stattrun
bind -Tcopy-mode M-w send-keys -X copy-pipe "xclip -i -sel p -f | xclip -i -sel c "
.bind-key -n C-y run-shell "xclip -o | tmux load-buffer - ; tmux paste-buffer"
gemäß diesem Commit, vorgeschlagen von starfryBitte beachten Sie, dass sich mit Tmux 2.4 (seit diesem Commit ) die Bindungssyntax geändert hat. Ich umschreibe diesen Github-Kommentar, um die Änderung kurz zusammenzufassen:
-t
mit-T
vi-<name>
mit<name>-mode-vi
send-keys -X
Ich hatte:
was ich ändern musste:
Aus dem Changelog :
quelle
Das
-temacs-copy
ist kein Tippfehler. Der führende Strich bedeutet, dass dies eine Option für denbind-keys
Befehl ist (zusammen mit einem Argument für die Option). Es ist äquivalent zu-t emacs-copy
, wenn Sie das besser mögen.Der Kopiermodus verwendet einen anderen Satz von Bindungen und Befehlen 1 als der „normale Modus“. Der
copy-pipe
Befehl ist nur in den alternativen "Modus" -Bindungstabellen verfügbar. Wenn dies der Fallmode-keys
istemacs
, verwendet deremacs-copy
Kopiermodus die Tabelle, sodass Sie Mwcopy-pipe
in dieser Tabelle binden müssen .Achten Sie darauf, dass Sie zu viele "No Prefix" -Bindungen erstellen. Sie erschweren die Eingabe dieser gebundenen Schlüssel in ein Programm, das in tmux ausgeführt wird (z. B. wenn Sie Cy in eine tty-mode-Instanz von Emacs eingeben möchten, die in tmux ausgeführt wird ). Sie können immer (Präfix) einen Schlüssel binden, der dies tut
send-keys C-y
, aber das könnte die Eingabe umständlicher machen, wenn Sie ihn oft genug benötigen.1 Es sind nur Bewegungs- und Bearbeitungsbefehle verfügbar. Mit Ausnahme von nehmen
copy-pipe
diese Befehle keine Argumente an (dies bedeutet, dass in der Manpage "Ein Befehl akzeptiert ein Argument" steht; das "Ein" ist wahrscheinlich ein Tippfehler oder ein Bearbeitungsfehler).quelle
Während andere Antworten hilfreich sein können, gehe ich wie folgt vor:
quelle