Auswahl in eine Zwischenablage in tmux kopieren


22

Wenn ich Text in tmux in iTerm2 unter macOS mit der Maus auswähle, wird der ausgewählte Text in meine Zwischenablage kopiert. Ich muss keine zusätzlichen Schaltflächen anklicken - wähle einfach den gewünschten Text aus und du bist fertig.

Ich habe tmux in terminal.app auf macOS getestet, aber es funktioniert dort nicht - ich muss drücken, yum die Auswahl in meine Zwischenablage zu kopieren.

Ich dachte, dass es eine Mausbindung gibt (so MouseOnSelectionähnlich wie MouseDown1Pane), aber ich konnte im Internet nichts Nützliches finden und man tmux.

Ich frage mich, ob es eine Möglichkeit gibt, ein ähnliches Verhalten unter Ubuntu 16.10 zu erzielen - vorzugsweise im Gnome-Terminal.

Meine tmux dotfiles finden Sie hier (link) .

Antworten:


44

Tmux 2.4+:

set-option -g mouse on
set-option -s set-clipboard off
bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "xclip -se c -i"

Vor tmux 2.4:

set-option -g mouse on
set-option -s set-clipboard off
bind-key -t vi-copy MouseDragEnd1Pane copy-pipe "xclip -se c -i"

Erläuterung: Zuerst müssen wir die Mausoption aktivieren, damit tmux die Maus erfasst und uns Mausereignisse binden lässt:

set-option -g mouse on

Gnome-Terminal unterstützt das Einstellen der Zwischenablage mithilfe von xterm-Escape-Sequenzen nicht, daher sollten wir sicherstellen, dass die set-clipboardOption deaktiviert ist:

set-option -s set-clipboard off

Diese Option wird auf iTerm2 möglicherweise standardmäßig unterstützt und aktiviert (siehe set-clipboardim tmux-Handbuch), was das Verhalten dort erklären würde.

Wir können dann den Kopiermodus MouseDragEnd1Pane"key", dh wenn die erste Maustaste nach dem Klicken und Ziehen in einem Bereich losgelassen wird, an einen tmux-Befehl binden, der die aktuelle Auswahl des Kopiermodus (die durch die Standardbindung für vorgenommen wurde MouseDrag1Pane) übernimmt und diese per Pipeline weiterleitet zu einem Shell-Befehl. Dieser tmux Befehl war copy-pipevor tmux 2,4, und hat sich seitdem geändert zu send-keys -X copy-pipe[-and-cancel]. Was den Shell-Befehl betrifft, brauchen wir einfach etwas, das den Inhalt der System-Zwischenablage auf das setzt, was auch immer dazu geleitet wird. In den folgenden Befehlen wird dazu xclip verwendet.

Tmux 2.4+:

# For vi copy mode bindings
bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "xclip -selection clipboard -i"
# For emacs copy mode bindings
bind-key -T copy-mode MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "xclip -selection clipboard -i"

Vor tmux 2.4:

# For vi copy mode bindings
bind-key -t vi-copy MouseDragEnd1Pane copy-pipe "xclip -selection clipboard -i"
# For emacs copy mode bindings
bind-key -t emacs-copy MouseDragEnd1Pane copy-pipe "xclip -selection clipboard -i"

3
Diese hochqualitative Antwort hat mich zum Klicken gebracht. Danke!
Cjauvin

2
Für jeden , der versucht dies auf einem Mac zu tun , weil sie ihre Terminal - Funktionalität und die Standardmethode , wie angegeben durch die OP nicht mehr funktioniert (ich verwende Byobu , die seine eigene Kopie Puffer hat) geändert haben: die Ersetzung xclip...Anweisung mit einem einfachen pbcopytut der Trick.
Darrel Holt

Keine der Lösungen in diesem Thread funktioniert für mich.
Yankee

1
Hallo Josh, als ich die Quelldatei ~ / .tmux.conf habe, stellte sich heraus:Unknown key: MouseDragEnd1Pane
Xifeng Li

8

Als Erweiterung zu der akzeptierten Antwort wird der Kopiermodus oft als störend empfunden, wenn die Maustaste losgelassen wird (dies passiert mit copy-pipe-and-cancel). Siehe: https://github.com/tmux/tmux/issues/140 . Daher können wir in neuerem tmux (ich benutze 2.6) copy-pipezusammen mit clear selectionkopieren, um die Auswahl zu treffen, aber den Kopiermodus nicht verlassen:

bind-key -T copy-mode-vi MouseDragEnd1Pane send -X copy-pipe "xclip -selection clipboard -i" \; send -X clear-selection

2

Erweitern beider Antworten zum Kopieren von msys2 in die Windows-Zwischenablage (und Deaktivieren der Auswahl):

# For vi copy mode bindings
bind -Tcopy-mode-vi MouseDragEnd1Pane send -X copy-pipe "cat > /dev/clipboard" \; send -X clear-selection
# For emacs copy mode bindings
bind -Tcopy-mode MouseDragEnd1Pane send -X copy-pipe "cat > /dev/clipboard" \; send -X clear-selection

Guter Punkt. Ich benutze selbst den Kopiermodus (Emacs-Stil) und habe daher nach dem Testen meine eigene Konfiguration eingefügt. Ich habe die Antwort so aktualisiert, dass beide in der akzeptierten Antwort enthalten sind.
Shawn Hoover

0

Bei einer weiteren Erweiterung geht es um die Verwendung von Shiftkey.

Halten Sie gedrückt, Shiftwährend Sie Text mit der Maus auswählen. Jetzt erhalten Sie ein Standard-Rechtsklick-Menü (gedrückt halten oder Shifterneut drücken ) und können mit Ctrl+Shift+Cund Ctrl+Shift+Vkopieren und einfügen. Der kopierte Text ist auch in der Systemzwischenablage verfügbar .

Getestet am Ubuntu 18.04.1mit tmux 2.6.

Quelle: https://forum.upcase.com/t/tmux-ctrl-shift-c-and-ctrl-shift-v-bindings/1208 .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.