Copia la selezione negli appunti in tmux


24

Se seleziono il testo con un mouse in tmux in iTerm2 su macOS, il testo selezionato viene copiato negli appunti. Non devo fare clic su pulsanti extra: basta selezionare il testo desiderato e il gioco è fatto.

Ho provato tmux in terminal.app su macOS ma non funziona lì - devo premere yper copiare la selezione negli appunti.

Ho pensato che ci fosse un mouse binding (qualcosa di MouseOnSelectionsimile a MouseDown1Pane) ma non sono riuscito a trovare nulla di utile sul web e man tmux.

Mi chiedo se c'è un modo per avere un comportamento simile su Ubuntu 16.10 - preferibilmente nel terminale Gnome.

I miei tmux dotfile sono disponibili qui (link) .

Risposte:


46

Tmux 2.4+ con collegamenti in modalità copia vi e xclip :

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"

Per le versioni precedenti di tmux, i collegamenti alla modalità di copia di emacs (impostazione predefinita) o le piattaforme non X (ovvero, senza xclip), vedere la spiegazione di seguito.


Spiegazione: Per prima cosa dobbiamo abilitare l'opzione mouse in modo che tmux acquisisca il mouse e ci permetta di associare gli eventi del mouse:

set-option -g mouse on

Gnome-terminal non supporta l'impostazione degli appunti usando sequenze di escape xterm, quindi dovremmo assicurarci che l' set-clipboardopzione sia disattivata:

set-option -s set-clipboard off

Questa opzione potrebbe essere supportata e abilitata per impostazione predefinita su iTerm2 (vedi set-clipboardnel manuale di tmux), il che spiegherebbe il comportamento lì.

Possiamo quindi associare il MouseDragEnd1Pane"tasto" della modalità di copia , ovvero quando il primo pulsante del mouse viene rilasciato dopo aver fatto clic e trascinato in un riquadro, a un comando tmux che accetta la selezione della modalità di copia corrente (effettuata dall'associazione predefinita per MouseDrag1Pane) e la pipe a un comando shell. Questo comando tmux era copy-pipeprecedente a tmux 2.4 e da allora è cambiato in send-keys -X copy-pipe[-and-cancel]. Per quanto riguarda il comando shell, abbiamo semplicemente bisogno di qualcosa che imposterà il contenuto degli Appunti di sistema su qualsiasi cosa venga convogliata ad esso; xclip è usato per fare questo nei seguenti comandi. Alcuni sostituti equivalenti per "xclip -selection clipboard -i"le piattaforme non X di seguito sono "wl-copy"(Wayland), "pbcopy"(macOS), "clip.exe"(Windows, WSL) e "cat /dev/clipboard"(Cygwin, MinGW).

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"

Tmux da 2.2 a 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"

Prima di tmux 2.2:

Copia dopo il supporto del trascinamento del mouse è stato originariamente aggiunto in Tmux 1.3 impostando la nuova mode-mouseopzione su on. Tmux 2.1 ha cambiato il supporto del mouse con le associazioni dei tasti del mouse familiari, ma non aveva DragEndassociazioni, che sono state introdotte in 2.2. Quindi, prima della 2.2, credo che l'unico metodo per impostare gli appunti di sistema sul trascinamento del mouse fosse attraverso l'uso incorporato delle sequenze di escape xterm (l' set-clipboardopzione). Ciò significa che è necessario aggiornare almeno a tmux 2.2 per ottenere il comportamento di trascinamento della copia per i terminali che non supportano set-clipboard, come GNOME Terminal.


3
Questa risposta di alta qualità è ciò che alla fine ha fatto tutto clic per me .. grazie!
cjauvin,

2
Per chiunque cercando di fare questo su un Mac, perché hanno cambiato la loro funzionalità terminale e il metodo predefinito come dichiarato dal PO non funziona più (sto usando Byobu che ha il suo buffer di copia): la sostituzione della xclip...dichiarazione con un semplice pbcopyfa il trucco.
Darrel Holt,

Nessuna delle soluzioni in questo thread funziona per me.
Yankee

1
Ciao Josh, quando ho sorgente-file ~ / .tmux.conf, si è scoperto:Unknown key: MouseDragEnd1Pane
Xifeng Li

@XifengLi Quale versione di tmux e sistema operativo stai usando? Credo che occorra almeno il minimo 2.2 per le DragEndchiavi.
Josh Brobst,

8

Come estensione della risposta accettata, le persone spesso trovano fastidioso quando si rilascia il pulsante del mouse per uscire dalla modalità copia (questo è ciò che accade copy-pipe-and-cancel). Vedi: https://github.com/tmux/tmux/issues/140 . Pertanto, nel nuovo tmux (io uso 2.6) possiamo usare copy-pipeinsieme clear selectionper copiare alla selezione ma non uscire dalla modalità copia:

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

2

Estensione di entrambe le risposte per copiare da msys2 negli Appunti di Windows (e cancellare la selezione):

# 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

Buon punto. Uso personalmente la modalità copia (stile emacs) e quindi avevo incollato la mia configurazione dopo il test. Ho aggiornato la risposta per includerli entrambi come nella risposta accettata.
Shawn Hoover,

0

Un'altra estensione riguarda l'utilizzo della Shiftchiave.

Tenere premuto Shiftdurante la selezione del testo con il mouse. Ora ottieni un menu di scelta rapida standard (tieni premuto o premi di Shiftnuovo) e puoi usare Ctrl+Shift+Ce Ctrl+Shift+Vcopiare e incollare. Il testo copiato sarà disponibile anche negli Appunti di sistema .

Testato Ubuntu 18.04.1con tmux 2.6.

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.