powiąż prefiks tmux z kluczem cmd OS X (lub dowolnym innym wiązaniem)


21

Jestem przyzwyczajony do iTerm2 (lub Terminal.app w tym przypadku) w OS X. Ale chcę przejść do korzystania z tmux (lub ekranu, ale problem jest podobny do obu aplikacji).

Więc moim pomysłem jest posiadanie jednej zakładki iTerm z sesją tmux otwartą z wieloma zakładkami. Aby dokonać przejścia, mam podstawową funkcję, którą muszę skonfigurować na tmux: przełącz kartę „n” za pomocą cmd + n (jak Firefox, Chrome, sam iTerm2 itp.)

Jednak nie mogę znaleźć sposobu mapowania klawisza cmd na klawiaturze Mac. Najpierw próbowałem zaimplementować cmd jako klucz prefiksu, ale bez powodzenia. Próbowałem ustawienie

set-option -g prefix M-a (hoping for Meta-a)

set-option -g prefix ^a (hoping for ^ to work)

ale nic nie działa. czy to możliwe? Naprawdę nie muszę wiązać prefiksu z cmd, ale chcę mieć możliwość zmiany zakładek tmux za pomocą cmd + n.

Dziękuję Ci


1
karabiner-elements ma specyficzne wiązanie dla tmux pqrs.org/osx/karabiner/complex_modifications/#modifier-keys
Fabrizio Bertoglio

Odpowiedzi:


8

Chcesz wywołać sekwencję naciśnięć klawiszy (najpierw Ctrl-b, a następnie n od 0 do 9).

Najlepiej jest użyć do tego narzędzia skrótu klawiaturowego, takiego jak Butler lub Keyboard Maestro .


Za pomocą Butlera :

Wybierz + »Inteligentny element» Klawisze , skonfiguruj skrót Cmd-1 . Naciśnij Ctrl-B, a następnie 1dla klawiszy . Skonfiguruj, aby działał tylko w Terminalu (lub iTerm). Ostrzeże Cię, że innym aplikacjom może się to nie podobać, ale już o tym wiesz.


Korzystanie z Keyboard Maestro :

Utwórz nową grupę po lewej stronie, która jest dostępna tylko w Terminalu (lub iTerm).

Dodaj nowy element uruchamiany przez skrót klawiszowy ( Cmd-1) i dodaj dwa naciśnięcia klawiszy do jego akcji: Ctrl-Bi 1.


Możesz także rzucić okiem na ten temat - jednak nie używa Commandi nie działał dla mnie przy użyciu terminalu.


Z dokumentacji tmux :

Przypisz klawisz do komendy. Klucze mogą być określone przedrostkiem „C-” lub „ˆ” dla klawiszy ctrl lub „M-” dla klawiszy alt (meta). Flaga −r wskazuje, że ten klawisz może się powtarzać, patrz opcja powtarzania czasu.

Nie obsługują trzeciego klawisza modyfikującego.


O mój Boże, co za niesamowity hack! to też działa! użyłem Keyboard Maestro, ponieważ Butler wydaje się przesadny. Dziękuję Ci!
rubenfonseca

Klawiatura Maestro działa w tym celu wspaniale
Sam Selikoff,

19

W iTerm2 można mapować skróty na kody szesnastkowe wysyłane do terminala. Idź do Preferencje iTerm2 -> Klucze. W Globalnych klawiszach skrótów kliknij + i dodaj wpisz żądany skrót, taki jak cmd + 1, który zostanie przechwycony. Następnie wybierz „Wyślij kod szesnastkowy”. W wyświetlonym polu wpisz kody szesnastkowe, które chcesz wysłać do tmux, oddzielając je spacjami. Ctrl-B to 0x02, więc dla „Ctrl-B 1” wpisz „0x02 0x31”. Zobacz tutaj więcej kodów szesnastkowych: http://www.nthelp.com/ascii.htm

Odwzorowałem Cmd na h, j, k, l do poruszania się między panelami tmux, a Cmd na% i "do tworzenia podziałów. Prawdopodobnie zrobię coś podobnego, aby przechodzić między podziałami vim za pomocą jednego klawisza sterującego.


To zdecydowanie najlepsza odpowiedź dla osób korzystających z iTerm2. Dzięki!
newUserNameHere

1
Z jakiegoś powodu to nie działa w mojej wersji iTerm2 3.0.2
jasonszhao

Jeśli to nie działa, przyczyną może być to, że iTerm2 domyślnie przypisuje klawisz cmd do przełącznika. Twój modyfikator może kolidować. Musiałem zmienić klawisz tabulacji swith, aby opcja działała na CMD + n
Surfrdan

2

Za pomocą Terminal.app można tworzyć specjalne skróty. Właśnie dowiedziałem się innego dnia, ale mogło to być możliwe przed lwem.

Przejdź do Preferencje> Ustawienia i kliknij kartę „Klawiatura”. Teraz musisz dodać nowy skrót klawiaturowy, klikając ikonę plusa pod polem. Teraz chcesz ustawić kombinację klawiszy, która „Wysyła ciąg znaków do powłoki”.

Przykład: Powiedzmy, że chcę ustawić mapowanie M-LeftArrow na prefix-p(poprzednie okno).

Key: Left Arrow 
Modifier: Option 
Action: send string to shell

Teraz po prostu wpisz w prefix-ppolu wprowadzania, gdzie prefixjest wszystko, co ustawiłeś dla tmux (używam cntrl-a, aby wyświetlało się okno \001p). Pamiętaj, że jeśli popełnisz błąd, zamiast faktycznego usuwania znaków zostaną wstawione znaki, więc naciśnij przycisk „Usuń jeden znak”, aby przejść wstecz, na wypadek, gdybyś się bałaganił.

Znaki specjalne, które ustawiłem, aby ułatwić życie:

M-Left  > Previous Window
M-Right > Next Window
M-Up    > Enter scrolling mode
M-Down  > Next Pane

Możesz także modyfikować cntrl-cokolwiek i shift-cokolwiek, ale pamiętaj, że mogą one zakłócać działanie twojego $ EDITOR lub innych programów, więc uważaj na to, jakie funkcje specjalne mogą stać się bezużyteczne.

Zauważ też, że nie mogłem wymyślić, jak powielić tę funkcjonalność w iTerm2.


1

Możesz także rozważyć natywną (ale bardzo eksperymentalną) integrację, którą iTerm2 oferuje z tmux: http://code.google.com/p/iterm2/wiki/TmuxIntegration

W ten sposób, gdy naciśniesz Cmd-D, aby podzielić ekran, iTerm2 podzieli zakładkę za ciebie. Jest to świetne, ponieważ podział jest rodzimy, więc możesz przeciągnąć krawędź na środku, aby ponownie dopasować szerokości, lub możesz wybrać panel, klikając. To samo dotyczy nowych kart / okien (ale skróty są nieco inne - inaczej nie byłoby możliwości dodania kart innych niż tmux).

I podobnie jak tmux, jeśli odłączysz się i ponownie połączysz, wszystko zostanie dla ciebie zapisane.

Istnieją jednak dwa zastrzeżenia: * jest to dla mnie bardzo eksperymentalna funkcja i bardzo niestabilna. * musisz sam zbudować tmux (korzystając z archiwum gdzieś na powyższym linku).

-Chris


Wiem, że minęły dwa lata, ale masz pomysł, czy to nadal działa? Postępowałem zgodnie z instrukcjami cmd+Dpodanymi w twoim linku, ale dzieli panel iTerm2, a nie tmux.
Sam Selikoff,

1
@SamSelikoff Musisz zacząć tmux -CC.
jasonszhao

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.