Jaki jest najmniej konfliktowy prefiks / sekwencja ucieczki dla screena lub tmuxa?

96

Ekran idzie w parze z Ctrl+ A. Z drugiej strony tmux - jak rozwinięto w ekranie - używa Ctrl+ B. Oba naciśnięcia klawiszy są jednak również używane w edytorach, powłokach itp. Zatem wybór jednego z nich obniża komfort użytkowania i funkcjonalność tych narzędzi, gdy są używane w tmuxie lub ekranie.

Jaki prefiks najmniej koliduje z skrótami klawiszowymi innych programów i powłok?

Scott
źródło
6
„który z nich najmniej koliduje z innymi programami?” nie ma nic wspólnego z opinią.
iconoclast
Po zmianie ~/.tmux.confnie zapomnij zrestartować serwera tmux, aby zmiany odniosły skutek ( superuser.com/q/188491/105108 ).
ks1322
Alternatywa dla używania prefiksu: Niektóre terminale oferują teraz integrację tmux poprzez „tmux -CC” (tj. ITerm2 dla macOS). W ten sposób okna tmux pojawiają się w terminalach jako zakładki. Następnie można użyć powiązań klawiszy do zarządzania kartami, które nie powodują konfliktu z żadnym programem terminalowym, tj. Za pomocą klawisza cmd (inaczej superklucz, klawisz Windows).
cjay

Odpowiedzi:

48

Myślę, że ^\(aka ^|) jest najlepszy, jeśli jest w dogodnej pozycji na układzie klawiatury. Jego zastosowania w innych programach są dość rzadkie:

  • wysyłanie SIGQUITdo procesu
  • przerywanie dla pętli lub podczas pętli w powłoce podczas ^Cprzechwytywania
  • toggle-input-method w emacs

Nie znam żadnych innych zastosowań. Uważaj, aby przypadkowo nie zabić procesów poza tmuxlub screenpo przyzwyczajeniu się do nich. Ale zdarzyło mi się to tylko raz na kilka lat.

~/.tmux.conf

unbind-key C-b
set -g prefix 'C-\'
bind-key 'C-\' send-prefix

~/.screenrc

escape ^|^|
cjay
źródło
Próbowałem tego, ale tmux narzeka na użycie C-`. Can I escape the znaku `?
Jason
2
Aby poinformować kogoś innego, powinieneś napisać 'C-\'zamiast `C- \` w konfiguracji tmux.
gns-ank
2
Nie zapomnij o 'tmux source-file /path/to/tmux.conf', kiedy skończysz, aby wypróbować nowe ustawienia
user72923
12
ale potem przyzwyczajam się do tego polecenia i kiedy zapomnę, że jestem na ekranie, przypadkowo wysyłam SIGQUIT ...
Kache
3
„jeśli jest w dogodnej pozycji na układzie klawiatury” domyślnie tak nie jest, czy sugerujesz, że używasz popularnego odwzorowania, które sprawia, że ​​C- \ jest wygodny?
storypixel
53

Dla osób, które chcą użyć backsticka jako ucieczki w tmux, możesz dodać:

unbind C-b
set -g prefix `
bind-key ` send-prefix

Ten ostatni jest ważny, w przeciwnym razie nie możesz wpisać backsticka do innych celów :-)

Ned Ruggeri
źródło
Backtick wydaje się dobrym pomysłem, dopóki nie wkleisz kodu SQL ...
Synchro
3
@ Synchro na tmux 1.8 nie jest już problemem dzięki domyślnie włączonej opcji zakładania-wklejenia (ustawiona na 1ms). Zobacz tutaj: sourceforge.net/p/tmux/tmux-code/ci/…
sickill
Znalazłem to pytanie, szukając alternatyw dla backticka, ponieważ zaczęło powodować problemy po tym, jak przyzwyczaiłem się do używania backticka zamiast $()w powłokach. To także staje się bólem, kiedy zaczniesz pisać dużo Markdown. Używam go od kilku lat, ale niestety muszę go teraz zmienić.
kirelagin
4
W .tmux.conf też mam bind-key C-a set-option -g prefix C-a. Ilekroć muszę używać backsicków, uderzam, `-Ctrl-aco ustawia mój prefiks na C-a. I mam, bind-key C-b set-option -g prefix `więc mogę uderzyć, C-a-C-bby wrócić
Boris
Co jeśli piszesz przecenę? Jak uciec przed prefiksem?
OJFord
21

Ctrl + A powoduje również problemy z Emacsem, w tym Bash w trybie Emacsa. Wygląda na to, że nie stanowi to dla ciebie problemu.

Ctrl + O to inna opcja, którą widziałem. Wygląda na to, że jest to ustawienie domyślne w RatPoison (jest to menedżer okien X, który nie potrzebuje myszy). Użyłem Ctrl + O podczas korzystania z zagnieżdżonych ekranów: Ctrl + O dla zewnętrznego i Ctrl + A dla wewnętrznych. Działało dobrze, ale trochę przestraszyło moich kolegów. :-)

Myślałem tylko i jeśli używasz vi zamiast Emacsa, istnieje kilka alternatyw. Ctrl + G nie jest na przykład używany.

statyka
źródło
8
Dla użytkowników Emacsa Ctrl + O wydaje się najlepszym wyborem: w Emacsie jest to tylko „otwarcie nowego wiersza przy kursorze”, a w skrócie „powtórzenie sekwencji poleceń”.
Flow
2
+1, jeśli nie masz nic przeciwko operacjom Ctrl po prawej stronie, wygląda to na dobrą kopię zapasową. Sam jestem
lewicą
9
Myślę, że Ctrl + O łamie vim
Mu Qiao
14
Zgadzam się z @MuQiao. Ctrl-o jest używany w Vimie do przeskakiwania do starszej pozycji kursora (odpowiednik przycisku Wstecz w wielu IDE), funkcji, której używam bardzo często podczas przeglądania kodu w Vimie. Ctrl-b jest synonimem PageUp w Vimie. W ogóle nie używam Ctrl-b na Vimie. Więc dla użytkowników Vima takich jak ja, Ctrl-b jest nadal lepszym wyborem niż Ctrl-o. Używam Cj jako mojego klucza prefiksu, ponieważ Cj jest synonimem j lub <Down> w Vimie i nikt nie używa Cj do przesunięcia jednej linii w Vimie. Mam to w moim ~ / .tmux.conf:set -g prefix2 C-j; bind-key C-j send-prefix -2
Susam Pal
C-jkonflikty z CtrlP. Przesuwanie w górę iw dół listy bufora używa C-ki C-jodpowiednio
blockloop
14

Mam CAPS-LOCKglobalnie zmapowany do ESC. Następnie używam M-Space(tj. CAPS-LOCK+ Space) Dla mojego prefiksu.

Nathan Speed
źródło
Próbuję to zrobić, ale jeśli przytrzymam CAPS-LOCK(myśląc o następnym poleceniu lub czymś innym) tmux - lub iTerm, nie jestem pewien, co to powoduje - otrzyma ESCpolecenie, które powoduje, M-Spaceże nie działa. Czy istnieje sposób na wyłączenie tego powtarzającego się kluczowego problemu? Na przykład działa, gdy szybko naciskam CAPS-LOCK + Space, ale nie, jeśli przytrzymuję CAPS-LOCKprzez około sekundę, a następnie naciśnięcie Spacenie rejestruje M-Spaceakordu ...
Bruno Ely,
12

Używam złożonego systemu do ekranu. Moja domyślna ucieczka jest ustawiona na \ 140 \ 140, co jest wsteczne. Ctrl-A komplikuje zarówno Emacsa, jak i edycję wiersza poleceń dla mnie w Zsh, a ja nie lubię Ctrl-O (operacje 2 rękami dla większości akcji na ekranie).

Ponownie wiążę „s” z ekranem 1, aby nowe sesje były tworzone od lewej do prawej na klawiaturze, zaczynając od 1. To pozwala mi zarezerwować ekran 0 dla tego, co uważam za trwałe lub okno odniesienia. Jest to bardzo szybki gest jedną ręką na (backtick) 1, (backtick) 2, (backtick) 3, aby przełączać się między oknami.

Problem z użyciem backticka w środowisku uniksowym polega na próbie wycinania i wklejania kodu skryptu shell / perl. Z tego powodu łączę klawisz F11 / F12, aby przełączać się między znakiem ucieczki.

bindkey -d -k F1        escape ^O^O # bound to F11
bindkey -d -k F2        escape \140\140 # bound to F12

Spowoduje to zamianę przejścia do Ctrl-O, gdy wykonuję operacje wycinania i wklejania. Odkryłem, że uderzenie podwójnym tikiem jest proste i stanowi dobrą kompromis dla większości operacji na ekranie.

Powtórzenie tej odpowiedzi za pomocą nowszego rozwiązania, które pozwala przełączać tryb, naciskając klawisz F12 i używając podpisu, aby wskazać tryb.

## command characters
escape \140\140                 # default is `

## sets caption and escape toggle
bindkey -d -k F2 process a     # bound to F12

## initial caption
caption always '%{= kW}%?%F%{+b KW}%:%{= kK}%? %= %?%F%{-b .c}>>>%{-}%? | %-w%{mW}%n* %t%? @%u%?%{-}%+w '

## registers to toggle bindkeys
register a "\140:eval 'bindkey -d -k F2 process b' 'process c' 'escape \\017\\017'^M"
register b "\017:eval 'bindkey -d -k F2 process a' 'process d' 'escape \\140\\140'^M"

## registers to change captions
register c "\140:caption string '%{= kW}%?%F%{+b mW}%:%{= kK}%? %= %?%F%{.c}ALT%{-}%? | %-w%{KW}%n* %t%? @%u%?%{-}%+w '^M"
register d "\017:caption string '%{= kW}%?%F%{+b KW}%:%{= kK}%? %= %?%F%{.c}>>>%{-}%? | %-w%{mW}%n* %t%? @%u%?%{-}%+w '^M"
Darren Hall
źródło
Kreatywne rozwiązanie. Jestem pod wrażeniem.
staticsan
bind-key -n F11 zestaw -g prefiks `bind-key -n F12 zestaw -g prefiks Co Aktualizacje dla tmux na wypadek, gdyby inni chcieli to dostosować.
milkypostman
1
Czy istnieje sposób na ustawienie pewnego minimalnego limitu czasu dla kombinacji prefiksu + komendy other_key w tmux, więc po wklejeniu kodu nie uruchamia żadnego polecenia, ale robi to przy wpisywaniu klawisza Ctrl + Klawisz z klawiatury, ponieważ przerwa między kliknięciem Cofnij a drugim klawiszem była dłuższa ?
sickill
11

Używam Ctrl-Qw tmuxi to działa dobrze. Muszę jednak wspomnieć, że jest to sprzeczne z kontrolą przepływu powłoki. Domyślnie Ctrl-Qsłuży do ponownego włączenia wyjścia po zatrzymaniu go Ctrl-S. Zaskoczony zablokowaną skorupą kilka razy po przypadkowym trafieniu Ctrl-S, nauczyłem się nie naciskać Ctrl-S.

(Można również całkowicie wyłączyć kontrolę przepływu stty -ixonlub przypisać różne klawisze do stty starti stty stop.)

# tmux.conf
unbind C-b
set -g prefix C-q
simonair
źródło
Przyjąłem tę oprawę i uważam ją za bardzo wygodną. Dzięki!
aymericbeaumet
Moje ulubione też, ponieważ zawsze wyłączam kontrolę przepływu terminala.
Jack O'Connor
2
Używany w emacs dla quote-inserted. Przykładowe użycie (w emacs): jeśli chcę wyszukać znak następnej karty -<Ctrl-s>+<Ctrl-q>+<TAB>
nhed
6

Lubię rezerwować ^Spacedla bardzo specjalnych / typowych operacji, ponieważ uważam, że jest to najłatwiejszy do wpisania przedrostek, ale teraz próbuję go zmapować jako prefixin tmux .

Twoje palce mogą od razu przejść do polecenia, które chcesz wpisać. Spróbuj.

taras
źródło
3
To nie trwało długo - wracam do ^ j. ^ Przestrzeń jest zbyt podobna do poleceń, których używam do wywoływania aplikacji na poziomie OSX (Spotlight, QuickSilver, DTerm).
taras
Ja też używam Cj. Właśnie tego używam w moim ~ / .tmux.conf:set -g prefix2 C-j; bind-key C-j send-prefix -2
Susam Pal
1
Używam również C-Space, nie jest używany prawie nigdzie indziej.
mahdix
1
C-space jest dla mnie idealny, ponieważ jestem na Chromebooku: D
Eric Nguyen
6

Spóźniona sugestia: ctrl-s. ctrl-sma wiele zalet:

  1. W wierszu głównym.
  2. Wciąż blisko ctrl-a(w rzeczywistości dla większości maszyn używa dwóch tych samych palców, z których korzystali ctrl-a), więc zmiana pamięci mięśni z ctrl-ana ctrl-sjest banalna - dla mnie stała się drugą naturą w ciągu około godziny od pierwszego wypróbowania.
  3. Zwalnia ctrl-adla operacji typu „powrót do początku linii” w stylu emacsa lub operacji „liczby przyrostowej” w stylu vima. Lub hej, do uruchamiania ekranu w panelu tmux bez konieczności martwienia się o ucieczkę przedrostków w celu sterowania instancją osadzonego ekranu. (Często robię to za pomocą lokalnego tmuxa z panelami zawierającymi sesje ssh na zdalnych serwerach, na których uruchamiam screen)
  4. Nie zastępuje ani nie dodaje wymagań zmiany znaczenia do żadnych innych często używanych funkcji terminali. nic, z czego ogromna większość ludzi korzysta obecnie, jest na ctrl-s!

Oczywiście powodem, dla którego nic nie jest na ctrl-s, jest to, że w terminalu tradycyjnie jest używany do kontroli przepływu, sięgający czasów sprzed narzędzi stronicowania, takich jak morei lessbyły powszechne. Jestem pewien, że jakiś program terminalowy GUI gdzieś nadal ma domyślnie włączoną funkcję kontroli przepływu, ale tak naprawdę nie wpadłem na nią; programy w terminalach GUI, które wypróbowałem, wydają się całkowicie domyślnie ignorować, co sprawia, że ​​ta wygodna kombinacja klawiszy jest dostępna dla bardziej produktywnych zastosowań.

Więc jeśli tak naprawdę nie używasz screen / tmux z (na przykład) surowego terminala Linuksa, ale raczej z terminala opartego na GUI, to polecam ctrl-sspróbować; zipowanie w tmuxie i ekranie jest dla mnie o wiele wygodniejsze.

Trevor Powell
źródło
4
Ctrl-s to wyszukiwanie do przodu, bo kiedy idę za daleko z Ctrl-r :)
Jack O'Connor
Ctrl-S jest wspólne do zatrzymywania wyjścia konsoli (inaczej „zamrażanie” go). To mnie ugryzło, kiedy próbowałem go odwzorować.
Dave
5

Kluczem bez konfliktu może być C-z, ponieważ zwykle jest używany do wysyłania programu do tła, aby kontynuować kolejną czynność w powłoce, która go uruchomiła. Nie robię tego, gdy mam tmux.

Josuah Demangeon
źródło
Jedyny problem, jaki miałem z używaniem Cz, to fakt, że większość ludzi używa Cb, więc moja pamięć mięśni jest wyłączona podczas programowania w parach na czyimś komputerze. Skończyło się na tym, że musiałem fgdużo biegać po błędnym wpisaniu Cz.
Steve Jorgensen
Świetna myśl o Cz jest taka, że ​​zakładając, że nie chcesz używać Ca, jest bardzo blisko lewego klawisza Ctrl, który jest obecnie jedynym klawiszem kontrolnym na większości klawiatur komputerów przenośnych. Również blisko Caps Lock, jeśli masz mapowane na Ctrl. Mapuję Caps Lock na Esc, ponieważ często używam klawiatury Kinesis Freestyle Solo, która ma klawisz Esc w niewygodnym miejscu.
Steve Jorgensen
4

Słyszałem o używaniu `(backtick), a następnie musisz go wpisać dwa razy, aby uzyskać prawdziwy backtick. Może być lepszy dla użytkowników vi, którzy są przyzwyczajeni do tej akcji (chyba że wykonasz funkcję Caps Lock).

bluehavana
źródło
Jak zdefiniować backtick dla tmux?
Alexandre Nizoux,
Coś w stylu: unbind Cb; set -g prefix ' '; bind '' send-prefix; patrz odpowiedź Darrena Halla powyżej.
bluehavana
Jestem z backtickiem przez około rok i nigdy nie wrócę do prefiksu dwóch klawiszy / kombinacji. Spróbuj.
sickill 15.01.2013
4

Polecam C-j, co nie koliduje z vi ani emacsem. Zasadniczo zgadzam się z komentarzem Susam Pal, który wydaje się godny przedstawienia się jako odpowiedź, ponieważ wszyscy inni wydają się mieć znaczące konflikty z mojej perspektywy.

Używam Cj jako mojego klucza prefiksu, ponieważ Cj jest synonimem j lub w Vimie i nikt nie używa Cj, aby przesunąć jedną linię w dół w Vimie. Mam to w moim ~ / .tmux.conf:

set -g prefix2 C-j; bind-key C-j send-prefix -2

nealmcb
źródło
1
Zgodnie z twoją rekomendacją używam Cj od dłuższego czasu i jedynym konfliktem, jaki znalazłem, jest wtyczka vim CtrlP. Cj i Ck służą do przechodzenia odpowiednio w dół i w górę opcji.
blockloop
3

W przypadku układu klawiatury programisty Dvorak całkiem fajnie jest używać klawisza minus (myślnika) jako prefiksu, tj . ctrl+ -.
Klawisz minus znajduje się na pozycji klucza pojedynczego cudzysłowu w układzie qwerty. Mam również klawisz Caps Lock jako klawisz Ctrl. Oto conf tmux, aby ustawić go jako prefiks:

unbind C-b
set -g prefix C-_
bind C-_ send-prefix
bind - last-window

Można się zastanawiać, dlaczego zamiast znaku minus stosuje się podkreślenie? Odwołaj się do Tmux: jak połączyć się z C— (kontrola-minus)?
W przypadku qwerty możesz zastosować Jak powiązać klucz prefiksu tmux z C-? rozwiązanie, aby zachować ten sam skrót.

Powiedziałbym, że jest to idealny prefiks, jeśli używasz Vim / Neovim. Ponieważ prefiksy, takie jak ctrl+ alub ctrl+ b, powodują cień (nakładają się) na funkcjonalność Vima, w dowolny sposób.

Vladimir Bauer
źródło
2

Osobiście bjest Ctrldla mnie zbyt daleko . Kiedy używam tmux, zawsze zmieniam wiązanie z Cb na Ca. Głównym konfliktem z Ca jest wybranie wszystkich, ale nie znalazłem problemu z programami, z którymi korzystam z tmux.

DaveParillo
źródło
faktycznie używam domyślnej (na ekranie, nigdy nie próbowałem tmux) i jeszcze nie znalazłem potrzeby jej zmiany.
quack quixote
2

Jako użytkownik GNU emacs, zsh i MS Windows używam Control-T. (np. w .screenrc :)

uciec „^ T ^ T”

Tak, Control-T ma coś z tym związane, jak rozwijane menu w umiejętnościach Ubuntu lub transponowanie postaci w Emacsie.

Zlekceważyłem Co, ponieważ wymaga to dla mnie dwóch rąk.

piyo
źródło
2

Myślę, że najlepszym rozwiązaniem jest ^ C. Emacs używa ^ C jako klucza prefiksu i stwierdzam, że kiedy muszę wpisać ^ C w powłoce, prawie zawsze i tak wpisuję dwa. :-)

unbind-key C-b
set -g prefix C-c
bind-key C-c send-prefix
użytkownik114905
źródło
1

Możesz użyć wstecznego. Niektóre starsze wersje tmux nie obsługują funkcji backtick, więc możesz wykonać następujące czynności w celu obejścia problemu (spowoduje to dodanie C-`, C- @ i C-space jako meta jednocześnie):

# meta prefix - @ - backtick
unbind C-b
set -g prefix C-@
bind C-@ send-prefix
bind C-@ last-window

Zwykle zmieniam mapowanie CapsLock na Ctrl, więc ma to jeszcze większy sens z backstick.

Alex
źródło
Ja też tego używam. C-Space jest dość łatwy do pisania.
kzh
Cofnięcie jest całkiem niezłe. Jak się jednak okazuje, nie jest przyjazny dla terminalu. Z pewnością nie możesz się pomylić z Xterm na Linuksie, ale terminale takie jak Putty i iTerm2 (macos) mają problemy z prawidłową emulacją. Na szczęście w iTerm2 można to obejść w konfiguracji. Nie używam dużo okien / szpachli, więc ctrl-space wydaje się możliwym obejściem. :)
Alex
1

Większość odpowiedzi tutaj używa Ctrl jako części kombinacji klawiszy.
Kiedy użyłem Ctrl, mój mały palec zaczął boleć, ponieważ zawsze musiałem rozłożyć go na Ctrl.
Używam tego, Alt-jco piszę lewym kciukiem i prawym palcem wskazującym, i jest to bardzo wygodne. Do tej pory nie znalazłem też żadnych kolizji z żadnym innym programem.

unbind C-b
set-option -g prefix M-j
wullxz
źródło
1

W przypadku ekranu GNU, odwzorowując lewy przycisk ucieczki, dla mnie działa to w ~ / .screenrc.

escape ``
użytkownik1056720
źródło
0

Podoba mi się sugestia wiązania ctrl- \ jako przedrostka , ale aby to działało na Linux Mint 12, musiałem uciec z miejsca wiązania na dole. W przeciwnym razie nie zajmie to. Zobacz mój .tmux.conf tutaj: Używanie tmux z emacsem i vimem

justingordon
źródło
Nie należy odnosić się do odpowiedzi jako „powyżej” i „poniżej”, ponieważ kolejność może ulec zmianie. Zamiast tego połącz odpowiedź. Dzięki za odpowiedź :)
Flow
0

Myślę, że użytkownicy komputerów Mac będą §wygodniejsi niż backtick.

Na klawiaturze innej niż Mac , backstick jest ustawiony mniej więcej na tym samym klawiszu, co §na klawiaturach Mac. Tak więc, aby doświadczyć takiej samej wygody, jak osoby, które sugerują użycie strzałki wstecznej, użyj znaku akapitu na klawiaturze komputera Mac.

Używanie strzałki w tył na klawiaturze Mac jest trudne, ponieważ znajduje się bardzo blisko lewego (⇧) shift, (⌃) kontroli i (⌥) Alt-klawisze. Na MacBookach nawet w pobliżu lewego fnklawisza.

nanitous
źródło
Zdefiniuj klawiaturę Mac ;-)
Arjan
Dobra, masz rację tutaj, miałem na myśli układ klawiatury Apple Mac US, choć bez względu na pełną klawiaturę rozszerzoną lub klawiaturę Macbook.
nanitous