Copia / incolla le selezioni di testo tra tmux e gli appunti


15

Sto eseguendo l'ultima versione di tmux (dal repository git) e xclip (0.12), e vorrei essere in grado di utilizzare le associazioni di tastiera simili a Emacs per spostarmi all'interno del testo copy-mode, copiare ( M-w) le selezioni negli appunti e incolla ( C-y) da / verso il buffer di copia negli appunti.

Finora sono stato in grado di incollare testo C-ye spostarmi copy-modecon le associazioni di tasti simili a Emacs, ma non sono ancora in grado di copiare il testo da un buffer tmux (ad es. In copy-mode)

Ho trovato questo thread per copiare l'intero buffer negli appunti (e viceversa), ma non sembra funzionare per me.

Inoltre, nella tmux-usersmailing list mi è stato detto che le versioni recenti di tmux (solo nel repository git) forniscono un comando chiamato copy-pipe. La pagina man dice quanto segue su questo comando:

Un comando in accetta un argomento, copy-pipe, che copia la selezione e la reindirizza a un comando. Ad esempio, quanto segue assocerà 'C-q' per copiare la selezione in / tmp e il buffer di incollaggio:

       bind-key -temacs-copy C-q copy-pipe "cat >/tmp/out"

Sembra che copy-pipedebba essere utilizzato in parte per reindirizzare la selezione a un altro comando. Sembra che ci siano anche alcuni errori di battitura in questa descrizione e nel comando (che cos'è temacs-copy?)

In entrambi i casi, ciò che vorrei fare è:

Copiare:

  1. Entra in modalità copia
  2. Spostare il testo che voglio copiare utilizzando i comandi di navigazione Emacs (vale a dire C-f, C-b, M-f, M-b, C-a, C-eecc per spostare il cursore). Nessun prefisso per nessuno di questi.
  3. Copia il testo selezionato negli appunti con: M-w( nessun prefisso )

incollare:

  1. Vorrei essere in grado di digitare C-y( senza dover inserire copy-mode) per incollare il testo nel terminale ( nessun prefisso neanche)

Ho provato quanto segue per copiare senza fortuna:

bind-key -n M-w run "tmux save-buffer - | xclip -i -selection clipboard" 

Tuttavia, incollare funziona alla grande:

bind-key -n C-y run "xclip -o | tmux load-buffer - ; tmux paste-buffer"

La cosa strana è che so che la " xclip -i -selection clipboard" parte del comando copia sopra funziona bene, dal momento che posso copiare cose negli appunti nella riga di comando, ad esempio:

echo "Hello world. How are you?" | xclip -i -selection clipboard

Con tutto ciò, come posso copiare una selezione dalla modalità copia negli appunti?

Risposte:


19

Utilizzare quanto segue tmux.confcon copy-pipenelle nuove versioni di tmux (1.8+):

set -g mouse on
# To copy:
bind-key -n -t emacs-copy M-w copy-pipe "xclip -i -sel p -f | xclip -i -sel c "

# To paste:
bind-key -n C-y run "xclip -o | tmux load-buffer - ; tmux paste-buffer"
  1. prefix+[ in modalità copia
  2. seleziona il contenuto con il mouse (mantieni)
  3. M-w per copiare quella parte negli appunti di sistema
  4. C-yincollalo all'interno di tmux, C-vper incollarlo all'interno di un'altra normale applicazione come il browser web.

Questa risposta merita più voti, è la migliore per configurazioni basate su Linux.
Louis Kottmann,

In tmux 2.0 è run-shellinvecerun
roign

@LouisKottmann: perché solo basato su Linux?
schaiba,

Non posso commentare altri sistemi, ma credo che mac usi bpaste invece di xclip di solito
Louis Kottmann,

In tmux 2.8 ho dovuto cambiarli in 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" secondo questo impegno suggerito da Starfry
Azzamsa il

5

Si noti che, con Tmux 2.4 (da questo commit ), la sintassi di associazione è cambiata. Parafrasando questo commento di Github per riassumere brevemente la modifica:

  1. sostituire -tcon-T
  2. sostituire vi-<name>con<name>-mode-vi
  3. prefisso il comando con send-keys -X

Avevo:

bind-key -n -t vi-copy Enter copy-pipe 'xclip -i -sel p -f | xclip -i -sel c'
bind-key -n -t vi-copy MouseDragEnd1Pane copy-pipe 'xclip -i -sel p -f | xclip -i -sel c'

che dovevo cambiare in:

bind-key -n -T copy-mode-vi Enter send-keys -X copy-pipe 'xclip -i -sel p -f | xclip -i -sel c'
bind-key -n -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe 'xclip -i -sel p -f | xclip -i -sel c'

Dal log delle modifiche :

Le tabelle chiave hanno subito importanti cambiamenti. Le tabelle dei tasti modalità non sono più separate dalle tabelle dei tasti principali. Tutte le tabelle dei tasti modalità sono state rimosse, insieme al flag -t per bind-key e unbind-key.

Le tabelle emacs-edit, vi-edit, emacs-scelgono e vi-scelgono sono state sostituite da combinazioni di tasti fisse nel prompt dei comandi e scelgono le modalità. Rimangono le opzioni dei tasti modalità e dei tasti di stato.

Le tabelle emacs-copy e vi-copy sono state sostituite dalle tabelle copy-mode e copy-mode-vi. I comandi vengono inviati utilizzando i flag -X e -N per inviare le chiavi. Quindi il seguente:

bind -temacs-copy C-Up scroll-up
bind -temacs-copy -R5 WheelUpPane scroll-up

diventa:

bind -Tcopy-mode C-Up send -X scroll-up
bind -Tcopy-mode WheelUpPane send -N5 -X scroll-up

Queste modifiche consentono di utilizzare il parser di comandi completo (comprese le sequenze di comandi) e il set di comandi: ad esempio, il normale prompt dei comandi con modifica e cronologia viene ora utilizzato per la ricerca, il salto e così via anziché uno personalizzato. L'associazione Cr predefinita è ora:

bind -Tcopy-mode C-r command-prompt -p'search up' "send -X search-backward-incremental '%%'"

Ci sono anche alcuni nuovi comandi disponibili con send -X, come copy-pipe-and-cancel.


2

Non -temacs-copyè un errore di battitura. Il trattino iniziale indica che questa è un'opzione per il bind-keyscomando (insieme a un argomento per l'opzione). È equivalente a -t emacs-copy, se ti piace di più.

La modalità Copia utilizza un diverso set di associazioni e comandi 1 rispetto alla "modalità normale". Il copy-pipecomando è disponibile solo nelle tabelle di bind alternative "modalità". Quando mode-keysè emacs, la modalità di copia utilizzerà la emacs-copytabella, quindi è necessario associare Mw a copy-pipequella tabella.

bind-key -temacs-copy M-w copy-pipe "xclip -i -selection clipboard"

Fare attenzione a creare troppi collegamenti "senza prefisso". Renderanno difficile digitare quelle chiavi associate a un programma in esecuzione all'interno di tmux (ad esempio quando si desidera digitare Cy in un'istanza in modalità tty di Emacs in esecuzione all'interno di tmux ). Puoi sempre (prefisso) associare qualche chiave che lo fa send-keys C-y, ma ciò potrebbe rendere più complicato digitare se ne hai bisogno abbastanza spesso.


1 Sono disponibili solo i comandi di spostamento e modifica. Con l'eccezione di copy-pipe, questi comandi non accettano alcun argomento (questo è ciò che la pagina man indica con esso "Un comando in accetta un argomento"; "in" è probabilmente un errore di battitura o un errore di modifica).


2

Mentre altre risposte possono aiutare, ecco come faccio lo stesso:

  • Maiusc + seleziona il testo con il cursore.
  • Ctrl + Maiusc + C per copiare il testo negli Appunti.

Questa è una risposta giusta ma i problemi iniziano quando si hanno due o più riquadri disposti orizzontalmente.
Cjauvin,

Vedo, fammi sapere se trovi qualcosa di utile per quello.
Rishabh Agrahari,
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.