Usa gli appunti di sistema in modalità vi-copy in tmux


51

Sto eseguendo tmux 1.6 e sto provando a configurarlo per utilizzare le combinazioni di tasti in stile vi e utilizzare gli Appunti di sistema durante la copia in modalità interattiva:

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

In poche parole, vorrei poter fare C+ [e quindi utilizzare vper iniziare a selezionare il testo per la copia, quindi quando yviene premuto, copiare la selezione nella selezione tmux e quindi esportarla negli Appunti di sistema utilizzando xclip.

Sfortunatamente, quando provo a farlo, vedo quanto segue:

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

C'è un modo per farlo nella configurazione di tmux?

Risposte:


87

Anche qui è stata data una risposta , ma mi ci è voluto un po 'di tempo per capire come usarlo, quindi spiegherò per chiunque fosse confuso.

Questa è sostanzialmente l'impostazione che stai cercando:

(per versioni tmux <2.5 )

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

(per versioni tmux > = 2.5 )

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

Quindi premi Ctrl+b [per accedere alla modalità copia. Quindi premi Spaceseguito da qualunque tasto di movimento vi per effettuare una selezione. Quindi, invece di colpire Enter, premi ye la selezione verrà copiata negli appunti.

Nota: questo presuppone che tu stia utilizzando i binding predefiniti di tmux con i tasti vi.

Tmux ha diverse tabelle di associazione dei tasti per diverse modalità. Quindi, bind-key -t vi-copy yimposta l'azione per la ychiave in modalità copia. Inizialmente, ero confuso perché ero abituato a colpire Enterdopo aver fatto una selezione. Enterè in realtà solo il bind chiave predefinito per il copy-selectioncomando (in modalità copia). Il copy-pipecomando ci consente di associare una nuova chiave per reindirizzare la selezione a un comando, che in questo caso è xclip.

Puoi vedere tutti i collegamenti chiave per la modalità di copia eseguendo list-keys -t vi-copy.


Grazie mille, ho dovuto scaricare e compilare tmux 1.9a, ma non è stato così difficile e ora funziona e basta ™!
Naftuli Kay,

3
Se non funziona basta ricontrollare che xclipsia effettivamente installato nel sistema (non è installato di default su Ubuntu, è necessario sudo apt-get install xclipottenerlo)
ecerulm,

3
Per OSX, sostituire xclipcon pbcopy. Per Cygwin su Windows, sostituirlo con putclip(dal cygutils-extrapacchetto).
SnoringFrog,

5
Il seguente legame da questo post di blog funziona benissimo anche su Tmux 2.6 e non ha il rovescio della medaglia di mettere sullo schermo personaggi apparentemente casuali durante la copia: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
Questo è stato non funziona per me fino a quando ho rimosso questa linea da .tmux.conf: set -g mouse on. Questo dovrebbe abilitare la "modalità mouse", ma anche dopo averlo rimosso tutto ciò che riguarda il mio mouse funziona bene (la rotellina del mouse funziona, la selezione del mouse funziona) ...
ndemou

11

La versione aggiornata di Ben Davis risponde

compatibile con tmux 2.4

bind -T copy-mode-vi y send -X copy-pipe "xclip -selection c"

4
Trovo che funzioni un po 'meglio con copy-pipe-and-cancelpiuttosto che copy-pipe. Questo è su tmux 2.5
wreckgar23,

6

Stai riscontrando un paio di problemi tecnici: i
binding della "modalità speciale" (ad es. vi-copy) ...

  1. utilizzare un diverso set di comandi (ovvero run-shellaka runnon è disponibile) e
  2. non hanno la possibilità di associare più comandi (che normalmente possono essere separati da ;—il &&separatore di comandi della shell non è disponibile).

tmux 1.8 ha copy-pipe, che potrebbe aiutare però:

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

(C'è un legame come questo elencato nelle FAQ .)


1
Ho tmux 1.8 e questo non sembra funzionare. (modifica) Ugh, odio gli input di textarea che inviano su Enter. Comunque, ho aggiunto questa associazione di tasti, ma quando faccio <prefix> -y e premo [spazio], il contenuto non viene copiato negli appunti.
Ben Davis,

Ho appena capito. Non ho capito come funzionava la tabella di associazione dei tasti "vi-copy".
Ben Davis,


2

Per macOS è possibile aggiungere questa riga a .tmux.conf

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


utenti macOS, per tmux> = 2.5:bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel 'pbcopy'
Dai

1

Questo è ciò che ha funzionato per me usando tmux 2.2 e avendo installato xclip. Per la copia in stile Vim aggiungere quanto segue a .tmux.conf

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"

Qui in modalità copia PREFIX v avvia la selezione e PREFIX y copia negli Appunti. PREFIX p può essere utilizzato per incollare nel terminale.

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.