Verwenden Sie die System-Zwischenablage im Vi-Copy-Modus in tmux

50

Ich führe tmux 1.6 aus und versuche, es so zu konfigurieren, dass es vi-artige Tastenkombinationen verwendet und beim Kopieren im interaktiven Modus die System-Zwischenablage verwendet:

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\""

Einfach ausgedrückt, ich möchte in der Lage sein, C+ zu tun [und dann mit vzu beginnen, Text zum Kopieren auszuwählen. Wenn ydann gedrückt wird, kopiere die Auswahl in die tmux-Auswahl und exportiere sie dann mit in die System-Zwischenablage xclip.

Wenn ich das versuche, sehe ich leider Folgendes:

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

Gibt es eine Möglichkeit, dies in der tmux-Konfiguration zu tun?

Naftuli Kay
quelle

Antworten:

86

Dies wurde auch hier beantwortet , aber ich brauchte eine Weile, um zu verstehen, wie man es benutzt, und erkläre es allen anderen, die verwirrt waren.

Dies ist im Grunde die Einstellung, die Sie anstreben:

(für tmux versionen <2.5 )

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

(für tmux versionen> = 2.5 )

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

Drücken Sie dann Ctrl+b [, um den Kopiermodus aufzurufen. Drücken Sie dann, Spacegefolgt von den Bewegungstasten vi, um eine Auswahl zu treffen. Anstatt zu schlagen Enter, drücken Sie yund die Auswahl wird in die Zwischenablage kopiert.

Hinweis: Dies setzt voraus, dass Sie die Standardbindungen von tmux mit vi-Schlüsseln verwenden.

Tmux hat verschiedene Tastenbindungstabellen für verschiedene Modi. So bind-key -t vi-copy ysetzt die Aktion für den ySchlüssel im Kopiermodus. Anfangs war ich verwirrt, weil ich es gewohnt war, Enternach einer Auswahl zu schlagen . Enterist eigentlich nur die Standardtastenbelegung für den copy-selectionBefehl (im Kopiermodus). Mit dem copy-pipeBefehl können wir einen neuen Schlüssel binden, um die Auswahl an einen Befehl weiterzuleiten. In diesem Fall ist dies der Fall xclip.

Sie können alle Tastenzuordnungen für den Kopiermodus anzeigen, indem Sie ausführen list-keys -t vi-copy.

Ben Davis
quelle
Vielen Dank, ich musste tmux 1.9a herunterladen und kompilieren, aber es war nicht so schwierig und jetzt funktioniert es einfach ™!
Naftuli Kay
3
Wenn es nicht funktioniert, überprüfen Sie, ob xclipes tatsächlich auf Ihrem System installiert ist (es ist nicht standardmäßig auf Ubuntu installiert, Sie müssen sudo apt-get install xclipes
herunterladen
3
Für OSX, ersetzen xclipmit pbcopy. Ersetzen Sie Cygwin unter Windows durch putclip(aus dem cygutils-extraPaket).
SchnarchenFrog
5
Die folgende Bindung aus diesem Blogeintrag funktioniert auch unter Tmux 2.6 hervorragend und hat nicht den Nachteil, dass beim Kopieren scheinbar zufällige Zeichen auf dem Bildschirm angezeigt werden: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
Das war nicht für mich arbeiten , bis ich diese Zeile aus .tmux.conf entfernt: set -g mouse on. Dies soll den "Mausmodus" aktivieren, aber auch nach dem Entfernen funktioniert alles in Bezug auf meine Maus
einwandfrei
11

Die aktualisierte Version von Ben Davis beantwortet

kompatibel mit tmux 2.4

bind -T copy-mode-vi y send -X copy-pipe "xclip -selection c"
jruz
quelle
4
Ich finde, es funktioniert ein bisschen besser copy-pipe-and-cancelals copy-pipe. Dies ist auf tmux 2.5
wreckgar23
6

Sie stoßen auf einige technische Probleme:
Die Bindungen im Spezialmodus (z. B. vi-copy)…

  1. Verwenden Sie einen anderen Befehlssatz (dh run-shellaka runist nicht verfügbar) und
  2. Sie haben nicht die Möglichkeit, mehrere Befehle zu binden (die normalerweise durch getrennt werden können ;- das &&Befehlstrennzeichen der Shell ist nicht verfügbar).

tmux 1.8 hat copy-pipe, was aber helfen könnte:

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

(Eine solche Bindung ist in den FAQ aufgeführt .)

Chris Johnsen
quelle
1
Ich habe tmux 1.8 und das scheint nicht zu funktionieren. (edit) Ugh, ich hasse Texteingaben, die bei Enter eingehen. Wie auch immer, ich habe diese Schlüsselbindung hinzugefügt, aber wenn ich <Präfix> -y tippe und [Leertaste] drücke, wird der Inhalt nicht in die Zwischenablage kopiert.
Ben Davis
Hab es einfach rausgefunden. Ich habe nicht verstanden, wie die "vi-copy" -Tastatur funktioniert.
Ben Davis
5

Schauen Sie sich das tmux-yank-Plugin für tmux an. https://github.com/tmux-plugins/tmux-yank

Es bietet eine automatisierte Möglichkeit zum Kopieren / Einfügen von tmux in die Zwischenablage des Systems. Es funktioniert auf OSX / Linux / Cygwin-Systemen.

bergercookie
quelle
Das hat bei mir super geklappt, danke für den Link!
Bryan Henry
2

Für macOS können Sie diese Zeile hinzufügen .tmux.conf

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

bumaociyuan
quelle
macOS Benutzer, für tmux> = 2.5:bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel 'pbcopy'
Dai
1

Dies ist, was endete für mich mit tmux 2.2 arbeiten und xclip installiert haben. Fügen Sie für das Kopieren im Vim-Stil Folgendes zu .tmux.conf hinzu

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"

Hier startet PREFIX v im Kopiermodus die Auswahl und kopiert PREFIX y in die Zwischenablage. Mit PREFIX p kann das Terminal eingefügt werden.

OrigamiEye
quelle