skopiuj (do schowka X) skrót do pliku .tmux.conf

22

Aby skopiować tekst do schowka X w tmux, aktualnie robię to:

  • przejdź do trybu wyboru za pomocą prefix[
  • rozpocznij wybór za spacepomocą (używając mode-keys vibtw)
  • wybierz tekst i naciśnij enter
  • skopiuj bufor tmux do schowka X za pomocą prefixctrl+c

(Mam mapowanie jako bind C-c run "tmux show-buffer | xclip -selection clipboard -i"

Próbuję wyeliminować niektóre z tych kroków, tworząc mapowanie dla trybu wyboru. Próbowałem:

bind-key -t vi-copy C-c run "tmux show-buffer | xclip -selection clipboard -i"

co daje mi błąd:

.. usage: bind-key [-cnr] [-t key-table] key command [arguments]

(Nie mogłem skopiować błędu)

jak mogę to naprawić?

EDYCJA: Zdałem sobie sprawę, że mogę wybierać i kopiować do bufora tmux (pierwsze 3 kroki) za pomocą myszy, podobnie jak zwykłe zaznaczanie (chociaż podświetlanie nie trwa, to nadal zaznacza tekst), a następnie użyj następującego wiązania, aby skopiować do schowka x :

bind-key -n C-c run "tmux show-buffer | xclip -selection clipboard -i"

(Użyłem tej metody do skopiowania tego tekstu i było to łatwe;)

zwróć uwagę, że -noznacza „bez prefiksu”, dlatego nie ma potrzeby zmiany znaczenia. jeśli nie zmieszają Cię znikające podświetlenia, jest to analogiczne do zwykłego (zwykłego interfejsu użytkownika) kopiowania.

to najlepsze, jakie do tej pory wymyśliłem ...

EDIT2: okazało się, że ctrl+cnakłada się na proces przerywania procesu, więc zmieniłem się ctrl+alt+cna teraz. (nie bardzo to lubił)

EDIT3: tmux 1.8 lub tak dodano obsługę dodawania skrótów klawiszowych w trybie kopiowania, więc teraz moja pierwsza oryginalna intencja jest możliwa przy użyciu czegoś takiego:

bind-key -tvi-copy y copy-pipe "xclip -selection clipboard -i"
bind-key -tvi-copy enter copy-pipe "xclip -selection clipboard -i"

Te dwa wiązania umożliwiają kopiowanie tekstu do schowka, gdy go używałem enterlub kończę ykopiowanie.

Nadal trzymam ten wiersz na wypadek, gdy kopiuję za pomocą myszy i postanawiam pobrać zawartość bufora tmux do schowka później:

bind-key y run "tmux show-buffer | xclip -selection clipboard -i"
Żaden
źródło
1
Możesz zmienić przerwanie z ctrl-c na coś innego używając stty. Na przykład, użycie klawiszy Ctrl-Z: stty intr=^Z. Ostrożnie z tym poleceniem, możliwe jest ustawienie zwykłego znaku na znak przerwania (jeśli to zrobisz, użyj kombinacji klawiszy ctrl-v, aby wprowadzić go do momentu ustalenia ustawienia). I nie myl się z tym, który klucz jest używany (np. Ctrl-z jest zwykle klawiszem zawieszenia).
ash
@ash zanotował, dzięki .. ale myślę, że zachowam ^cjako klucz przerwania, ponieważ używam go częściej niż kopiowanie. Zaktualizowałem również odpowiedź, aby odzwierciedlić moje obecne rozwiązanie tego problemu.
brak
Brzmi dobrze. Zauważ też, że wiele uruchomień xmodmap może sprawić, że będzie to zabawny stan, który jest trudny do poprawienia, dlatego polecam zacząć od nowa z nową sesją X, jeśli wpływ poleceń wydaje się nieprawidłowy.
ash
prowadzenie na bind-key -t vi-copy C-c run "tmux show-buffer | xclip -selection clipboard -i"żywo daje:Unknown command: run
Alexej Magura
1
Jednak bieganie bind-key C-c run "tmux show-buffer | xclip -selection clipboard -i"działa dobrze.
Alexej Magura

Odpowiedzi:

13

Ta odpowiedź nie odpowiada bezpośrednio na twoje pytanie dotyczące tworzenia skrótu. Ale oto co robię.

Możesz tymczasowo zawiesić przekazywanie zdarzeń klawiszy / myszy do tmux przez przytrzymanie shift. Możesz więc nacisnąć i przytrzymać Shift i zwykłe skróty użytkownika terminala / X, aby wykonać kopię. W moim przypadku używając Terminatora, naciskam shift, podświetlam myszą cokolwiek chcę, kopiujęCtrl+Shift+C

W przypadku podzielonych paneli możesz powiększyć bieżący panel za pomocą klawisza przełączania zoomu Prefix + zi wykonać operację kopiowania. (testowany na tmux v1.8)

Muneeb
źródło
Nie mogłem tego użyć z powodu poziomych podziałów, ale sztuczka z powiększaniem brzmi świetnie, dzięki za wskazówkę.
brak
Z pewnością działa to w terminalu gnome; ale czy dotyczy wszystkich emulatorów terminali? Prawdopodobnie nie
jpaugh
W terminalu wsl to działa. Oszczędź mój dzień!
Qinsi