Kopieren und Einfügen mit einer Maus mit tmux

44

Ich benutze tmuxund OSX. Beim Kopieren und Einfügen vom Terminal mit kann tmuxich gedrückt halten Optionund Text auswählen. Ich kann den Text jedoch nicht dazu bringen, innerhalb des Fensters zu bleiben. Wenn ich also Text kopieren möchte, muss ich entweder den Bereich ganz nach links verschieben oder den Bereich vergrößern oder verkleinern (siehe Abbildung unten).

Dies ist zusätzlich zu dem Bedürfnis, die OptionTaste gedrückt zu halten, ein Schmerz. Ich weiß, dass ich in den visuellen Modus wechseln und Vim-Bewegungen verwenden kann, aber ich hätte lieber eine Möglichkeit, meine Maus zu verwenden. Hat jemand eine Problemumgehung dafür gefunden?

Bildbeschreibung hier eingeben Bildbeschreibung hier eingeben

Mbigras
quelle
"Allerdings kann ich den Text nicht dazu bringen, im Fenster zu bleiben." Was meinst du damit?
Blaszard

Antworten:

36

Fügen Sie diesen Codeblock in Ihren Code ein ~/.tmux.conf. Dadurch wird die Mausintegration aktiviert, sodass Sie mit der Maus aus einem Bereich kopieren können, ohne zoomen zu müssen.

set -g mouse on
bind -n WheelUpPane if-shell -F -t = "#{mouse_any_flag}" "send-keys -M" "if -Ft= '#{pane_in_mode}' 'send-keys -M' 'select-pane -t=; copy-mode -e; send-keys -M'"
bind -n WheelDownPane select-pane -t= \; send-keys -M
bind -n C-WheelUpPane select-pane -t= \; copy-mode -e \; send-keys -M
bind -t vi-copy    C-WheelUpPane   halfpage-up
bind -t vi-copy    C-WheelDownPane halfpage-down
bind -t emacs-copy C-WheelUpPane   halfpage-up
bind -t emacs-copy C-WheelDownPane halfpage-down

# To copy, drag to highlight text in yellow, press Enter and then release mouse
# Use vim keybindings in copy mode
setw -g mode-keys vi
# Update default binding of `Enter` to also use copy-pipe
unbind -t vi-copy Enter
bind-key -t vi-copy Enter copy-pipe "pbcopy"

Starten Sie danach Ihre tmux-Sitzung neu. Markieren Sie Text mit der Maus, aber lassen Sie die Maus nicht los. Drücken Sie die Eingabetaste, während der Text markiert und die Maus gedrückt ist. Der markierte Text verschwindet und wird in Ihre Zwischenablage kopiert. Lassen Sie nun die Maus los.

Abgesehen davon gibt es auch einige coole Dinge, die Sie mit der Maus tun können, wie nach oben und unten scrollen, das aktive Fenster auswählen usw.

Wenn Sie eine neuere Version von tmux unter macOS verwenden, versuchen Sie Folgendes anstelle der obigen:

# macOS only
set -g mouse on
bind -n WheelUpPane if-shell -F -t = "#{mouse_any_flag}" "send-keys -M" "if -Ft= '#{pane_in_mode}' 'send-keys -M' 'select-pane -t=; copy-mode -e; send-keys -M'"
bind -n WheelDownPane select-pane -t= \; send-keys -M
bind -n C-WheelUpPane select-pane -t= \; copy-mode -e \; send-keys -M
bind -T copy-mode-vi    C-WheelUpPane   send-keys -X halfpage-up
bind -T copy-mode-vi    C-WheelDownPane send-keys -X halfpage-down
bind -T copy-mode-emacs C-WheelUpPane   send-keys -X halfpage-up
bind -T copy-mode-emacs C-WheelDownPane send-keys -X halfpage-down

# To copy, left click and drag to highlight text in yellow, 
# once you release left click yellow text will disappear and will automatically be available in clibboard
# # Use vim keybindings in copy mode
setw -g mode-keys vi
# Update default binding of `Enter` to also use copy-pipe
unbind -T copy-mode-vi Enter
bind-key -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel "pbcopy"
bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "pbcopy"

Wenn Sie iTerm unter macOS verwenden, gehen Sie zu iTerm2> Einstellungen> Registerkarte „Allgemein“ und aktivieren Sie im Abschnitt „Auswahl“ die Option „Anwendungen im Terminal können auf die Zwischenablage zugreifen“.

Und wenn Sie Linux und eine neuere Version von tmux verwenden, dann

# Linux only
set -g mouse on
bind -n WheelUpPane if-shell -F -t = "#{mouse_any_flag}" "send-keys -M" "if -Ft= '#{pane_in_mode}' 'send-keys -M' 'select-pane -t=; copy-mode -e; send-keys -M'"
bind -n WheelDownPane select-pane -t= \; send-keys -M
bind -n C-WheelUpPane select-pane -t= \; copy-mode -e \; send-keys -M
bind -T copy-mode-vi    C-WheelUpPane   send-keys -X halfpage-up
bind -T copy-mode-vi    C-WheelDownPane send-keys -X halfpage-down
bind -T copy-mode-emacs C-WheelUpPane   send-keys -X halfpage-up
bind -T copy-mode-emacs C-WheelDownPane send-keys -X halfpage-down

# To copy, left click and drag to highlight text in yellow, 
# once you release left click yellow text will disappear and will automatically be available in clibboard
# # Use vim keybindings in copy mode
setw -g mode-keys vi
# Update default binding of `Enter` to also use copy-pipe
unbind -T copy-mode-vi Enter
bind-key -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel "xclip -selection c"
bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "xclip -in -selection clipboard"

(Sie können auch https://github.com/gpakosz/.tmux für viele andere tmux-Optionen besuchen.)

GMaster
quelle
1
Endlich etwas, das tatsächlich funktioniert! Kopieren und Einfügen ist die nervigste Sache beim Testen von tmux. Ich habe es schon früher aufgegeben und die Konfigurations-Snippets, die ich ausprobiert habe, haben sich inkonsistent verhalten, vielen Dank.
Breno Salgado
1
Ich habe iterm auf einem Mac verwendet und musste iTerm2> Einstellungen> Registerkarte „Allgemein“ aktivieren und im Abschnitt „Auswahl“ unter „Anwendungen im Terminal können auf die Zwischenablage zugreifen“. Referenz: rushiagr.com/blog/2016/06/16/…
Rujoota Shah
@RujootaShah Ja, das ist richtig. Das musst du machen. Danke für das Teilen.
GMaster
1
Vielen Dank! Klappt wunderbar. Ich musste allerdings installieren sudo apt-get install -y xclip(Ubuntu Linux).
Petr
funktioniert einwandfrei, danke @GMaster
Luja Shrestha