Korzystam z najnowszej wersji tmux (z repozytorium git) i xclip (0.12), i chciałbym móc używać powiązań klawiatury podobnych do Emacsa do poruszania się po tekście copy-mode
, kopiowania ( M-w
) do schowka i paste ( C-y
) z / do bufora kopiowania do schowka.
Do tej pory byłem w stanie wkleić tekst C-y
i poruszać się po nim, korzystając copy-mode
z powiązań klawiatury podobnych do Emacsa, ale nadal nie mogę skopiować tekstu z bufora tmux (np. W copy-mode
)
Znalazłem ten wątek do kopiowania całego bufora do schowka (i viceversa), ale wydaje się, że nie działa dla mnie.
Ponadto na tmux-users
liście mailowej powiedziano mi, że najnowsze wersje tmux (tylko w repozytorium git) zawierają polecenie o nazwie copy-pipe
. Strona podręcznika mówi o tym poleceniu:
Jedno polecenie akceptuje argument kopiuj potok, który kopiuje zaznaczenie i potokuje go do polecenia. Na przykład, następujące polecenie powiąże „C-q”, aby skopiować zaznaczenie do / tmp, a także do bufora wklejania:
bind-key -temacs-copy C-q copy-pipe "cat >/tmp/out"
Wygląda na copy-pipe
to, że ma być częściowo użyty do potokowania zaznaczenia do innego polecenia. Wydaje się, że w tym opisie i poleceniu są też literówki (co to jest temacs-copy
?)
Tak czy inaczej, chciałbym to zrobić:
Biurowy:
- Wejdź w tryb kopiowania
- Przenieś do tekstu Chcę skopiować za pomocą poleceń nawigacyjnych Emacsa (czyli
C-f
,C-b
,M-f
,M-b
,C-a
,C-e
itd., Aby przesunąć kursor). Brak przedrostka dla któregokolwiek z nich. - Skopiuj zaznaczony tekst do schowka za pomocą:
M-w
( bez prefiksu )
Wklejanie:
- Chciałbym móc pisać
C-y
( bez konieczności wprowadzaniacopy-mode
), aby wkleić tekst w terminalu ( bez prefiksu )
Próbowałem skopiować następujące elementy bez powodzenia:
bind-key -n M-w run "tmux save-buffer - | xclip -i -selection clipboard"
Jednak wklejanie działa świetnie:
bind-key -n C-y run "xclip -o | tmux load-buffer - ; tmux paste-buffer"
Dziwne jest to, że wiem, że xclip -i -selection clipboard
powyższa część polecenia kopiowania działa dobrze, ponieważ mogę kopiować rzeczy do schowka w wierszu poleceń, np .:
echo "Hello world. How are you?" | xclip -i -selection clipboard
W związku z tym, jak mogę skopiować zaznaczenie z trybu kopiowania do schowka?
run-shell
zamiastrun
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"
zgodnie z tym zatwierdzeniem sugerowanym przez starfryZauważ, że w Tmux 2.4 (od tego zatwierdzenia ) składnia wiązania uległa zmianie. Parafrazuję ten komentarz Github, aby krótko podsumować zmianę:
-t
z-T
vi-<name>
z<name>-mode-vi
send-keys -X
Miałem:
który musiałem zmienić na:
Z dziennika zmian :
źródło
To
-temacs-copy
nie jest literówka. Wiodący myślnik oznacza, że jest to opcja dlabind-keys
polecenia (wraz z argumentem dla opcji). Jest to równoważne-t emacs-copy
, jeśli bardziej ci się to podoba.Tryb kopiowania używa innego zestawu powiązań i poleceń 1 niż „tryb normalny”.
copy-pipe
Polecenie jest dostępne tylko w trybie „alternate” wiązań tabelach. Kiedymode-keys
jestemacs
, tryb kopiowania użyjeemacs-copy
tabeli, więc musisz powiązać Mwcopy-pipe
z tą tabelą.Bądź ostrożny, tworząc zbyt wiele powiązań „bez prefiksu”. Utrudniają wpisywanie tych powiązanych kluczy do programu działającego w tmux (np. Gdy chcesz wpisać Cy do instancji Emacsa działającej w tmux w trybie tty ). Zawsze możesz (przedrostek) powiązać jakiś klucz, który to robi
send-keys C-y
, ale może to utrudnić pisanie, jeśli będziesz go potrzebować wystarczająco często.1 Dostępne są tylko polecenia ruchu i edycji. Z wyjątkiem
copy-pipe
tych poleceń nie przyjmują żadnych argumentów (to znaczy, że strona podręcznika oznacza, że „Jedno polecenie akceptuje argument”; „in” jest prawdopodobnie literówką lub błędem edycyjnym).źródło
Podczas gdy inne odpowiedzi mogą pomóc, oto jak robię to samo:
źródło
prefix
+z
powiększa wybrany panel, aby poziome podziały nie stanowiły problemu przy pomijaniu wyboru kopii tmux przez przytrzymanieshift
.