Użyj schowka systemowego w trybie kopiowania vi w tmux


50

Korzystam z Tmux 1.6 i próbuję go skonfigurować, aby używał skrótów klawiszowych w stylu vi, a także używał schowka systemowego podczas kopiowania w trybie interaktywnym:

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

Mówiąc najprościej, chciałbym móc zrobić C+, [a następnie użyć, vaby rozpocząć zaznaczanie tekstu do kopiowania, a następnie po ynaciśnięciu skopiuj zaznaczenie do zaznaczenia tmux, a następnie wyeksportuj go do schowka systemowego za pomocą xclip.

Niestety, gdy próbuję to zrobić, widzę następujące informacje:

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

Czy jest na to sposób w konfiguracji tmux?

Odpowiedzi:


86

Zostało to również odpowiedzi tutaj , ale zajęło mi trochę czasu, aby zrozumieć, jak go używać, więc wytłumaczę dla nikogo innego, który był zmieszany.

Jest to w zasadzie ustawienie, którego szukasz:

(dla wersji tmux <2,5 )

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

(dla wersji tmux > = 2,5 )

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

Następnie naciśnij, Ctrl+b [aby przejść do trybu kopiowania. Następnie naciśnij, Spacea następnie dowolne klawisze ruchu vi, aby dokonać wyboru. Następnie, zamiast uderzać Enter, naciśnij, ya wybór zostanie skopiowany do schowka.

Uwaga: zakłada się, że używasz domyślnych powiązań tmux z kluczami vi.

Tmux ma różne tabele powiązań klawiszy dla różnych trybów. Tak, bind-key -t vi-copy yustawia akcję dla yklucza w trybie kopiowania. Początkowo byłem zdezorientowany, ponieważ byłem przyzwyczajony do bicia Enterpo dokonaniu wyboru. Enterjest właściwie tylko domyślnym powiązaniem klawiszy dla copy-selectionpolecenia (w trybie kopiowania). copy-pipeKomenda pozwala nam powiązać nowy klucz do rur zaznaczenie do komendy, która w tym przypadku jest xclip.

Można wyświetlić wszystkie powiązania klawiszy dla trybu kopiowania, uruchamiając list-keys -t vi-copy.


Dzięki bardzo, musiałem pobrać i skompilować Tmux 1.9a, ale to nie było takie trudne, a teraz po prostu działa ™!
Naftuli Kay

3
Jeśli to nie działa, sprawdź dokładnie, czy xclipfaktycznie jest zainstalowany w twoim systemie (nie jest domyślnie instalowany na Ubuntu, musisz sudo apt-get install xclipgo zdobyć)
ecerulm

3
Dla OSX, wymienić xclipz pbcopy. W przypadku Cygwin w systemie Windows zamień go na putclip(z cygutils-extrapakietu).
SnoringFrog,

5
Poniższe powiązanie z tego wpisu na blogu działa również świetnie na Tmux 2.6 i nie ma wad polegających na umieszczaniu pozornie przypadkowych postaci na ekranie podczas kopiowania: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
Było to dla mnie nie działa aż usunąłem tę linię od .tmux.conf: set -g mouse on. Ma to umożliwić „tryb myszy”, ale nawet po usunięciu wszystko działa poprawnie z myszą (kółko przewijania, wybór myszy) ...
ndemou

11

Zaktualizowana wersja odpowiedzi Bena Davisa

kompatybilny z tmux 2.4

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

4
Uważam, że działa nieco lepiej copy-pipe-and-cancelniż copy-pipe. To jest na Tmux 2.5
wreckgar23

6


Występuje kilka problemów technicznych: powiązania „trybu specjalnego” (np. vi-copy)…

  1. użyj innego zestawu poleceń (tzn. run-shellaka runnie jest dostępna), i
  2. nie mają możliwości wiązania wielu poleceń (które normalnie można oddzielić ;- &&separator poleceń powłoki nie jest dostępny).

tmux 1.8 ma copy-pipe, co może pomóc:

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

(Istnieje takie powiązanie, jak to wymienione w FAQ ).


1
Mam tmux 1.8 i to nie działa. (edytuj) Nienawidzę danych tekstowych przesyłanych przez Enter. W każdym razie dodałem to powiązanie klawiszy, ale kiedy zrobię <prefix> -y i nacisnę [spacja], zawartość nie zostanie skopiowana do schowka.
Ben Davis,

Właśnie to rozgryzłem. Nie rozumiałem, jak działa tabela skrótów klawiszowych „vi-copy”.
Ben Davis,


2

W systemie macOS możesz dodać tę linię do .tmux.conf

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


Użytkownicy systemu macOS, dla tmux> = 2,5:bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel 'pbcopy'
Dai

1

To właśnie skończyło się dla mnie działaniem przy użyciu tmux 2.2 i zainstalowaniem xclip. Aby kopiować w stylu Vima, dodaj .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"

Tutaj, w trybie kopiowania, PREFIX v rozpoczyna zaznaczenie, a PREFIX y kopiuje do schowka. PREFIKS p może być użyty do wklejenia w terminalu.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.