ALT + strzałka poruszająca się między słowami w Zsh i iTerm2

19

Zalogowałem się na jednym z serwerów dostawcy hostingu i zauważyłem, że klawisze ALT + w lewo i ALT + w prawo poruszają się między słowami w wierszu poleceń na ekranie GNU.

Jakie powiązania klawiszy muszę skonfigurować i skąd wziąć to zachowanie do mojego lokalnego OS X zsh działającego w iTerm2?

Mikko Ohtamaa
źródło
Osoby zainteresowane tym pytaniem mogą również wiedzieć, że słowa zsh nie są słowami bash. FOO=BARto jedno słowo do zsh i 2 słowa do bash. Podobnie, jeśli ustawisz kursor na końcu foo --bari zrobisz alt + backspace, w bash będziesz miał, foo --aw zsh będziesz miał foo . Zsh dodaje wiele funkcji do bash, ale ma również wiele szalonych ustawień domyślnych do zastąpienia.
weberc2,

Odpowiedzi:

28

Znalazłem rozwiązanie tutaj: https://coderwall.com/p/h6yfda . Skopiuje najważniejsze części, na wypadek, gdyby link przestał działać.

  1. Przejdź do Preferencji, profilu, kluczy.
  2. Ustaw lewy klawisz to, aby działał jako znak ucieczki.
  3. Znajdź bieżący skrót do ⌥ ← lub utwórz nowy, z następującymi ustawieniami:
    • Skrót klawiaturowy: ⌥ ←
    • Działanie: Wyślij sekwencję ucieczki
    • Esc +: b
  4. powtórz dla ⌥ → skrót klawiaturowy z następującymi ustawieniami:
    • Skrót klawiaturowy: ⌥ →
    • Działanie: Wyślij sekwencję ucieczki
    • Esc +: f
Willington Vega
źródło
1
Warto wspomnieć, że jest on specyficzny dla jednego konkretnego emulatora terminala - a nie ogólnie dla zsh.
Hi-Angel,
7

Szukasz słów kluczowych backward-wordi forward-word. Więc jeśli korzystasz z powłoki, w której skróty klawiszowe nie działają, spróbuj bindkey -L | grep backward-wordsprawdzić, czy są nawet skonfigurowane. Więcej informacji na ten temat znajduje się w zshzle (1) .

Możesz ręcznie ustawić przypisanie klawiszy, wpisując coś takiego:

słowo powiązania „ Ctrl+ v Alt+ Right

Bindkey „ Ctrl+ v Alt+ Left” słowo wstecz

Miałem też pewne problemy z przypisywaniem klawiszy i prawie zawsze problem polegał na tym, że klawisz Option / Alt wysyłał coś innego niż oczekiwany Meta / Escape.

Sebastian Stumpf
źródło
Możesz także użyć emacs-forward-wordi emacs-backward-word. Różnica polega na tym, że przeskakujesz do przodu do końca słowa i do tyłu do początku słowa zamiast skakać zawsze na początku słowa.
Aalex Gabi,
To jest najbardziej niezawodne i czyste rozwiązanie. Może dostosować się do różnego rodzaju mapowania kluczy i / lub wszelkiego rodzaju kombinacji ssh-tmux-zsh. Inne rozwiązania, które wymagają zakodowanej sekwencji ucieczki, rozwiązują tylko niektóre przypadki w określonym systemie.
HKTonyLee,
3

Nie mogę mówić w imieniu iTerm, ale są to skróty klawiszowe, których użyłem, aby rozwiązać ten problem w GNOME Terminal na Fedorze 19 z systemem ZSH 5.0.7 z Oh-my-zsh:

bindkey "\e[1;3C" forward-word
bindkey "\e[1;3D" backward-word

gdzie \e== Sekwencja klawiszy Escape (zgodnie z dokumentacją w sekcji 4.1.1 )

i [== O(wielkie litery O; jak udokumentowano w sekcji 4.2.1 ), w niektórych przypadkach. Na przykład w ramach tmuxtej substytucji jest dla mnie konieczna, jednak bez tmuxniej nie jest wymagana żadna zamiana i [==[

Kluczowe kody sekwencji można uzyskać, catnaciskając i naciskając żądaną sekwencję. Na przykład wyniki prasowania <Alt+Right>należy interpretować w następujący sposób:

$ cat
^[[1;3C

^[== \e== Sekwencja klawiszy Escape

[== [bez tmuxOR [== O(wielkie litery o) ztmux

1;3 == Nie jestem tego pewien, ale logicznie powinno to znaczyć <Alt>

C == Klawisz strzałki w prawo

Następnie ta sekwencja jest podana bindkeyw~/.zshrc pliku jako trwały jako pierwszy argument i jest związana , co oznacza, że ​​naciśnięcie klawisza w argumencie pierwszym spowoduje wykonanie określonego polecenia edytora (lub widgetu w kategoriach zsh) do widgetu, który w pierwszym wiersz powyższego przykładu to forward-word.

The ~/.zshrcNależy ponownie pochodzą od tych dwóch polecenia są dodawane do niego z:

$ source ~/.zshrc

Teraz jedną z irytacji w moim systemie jest to, że ta konkretna kombinacja spowodowała, że ​​emulator terminala wydawał sygnał dźwiękowy za każdym razem, gdy polecenie było wydawane, co naprawiłem, wyłączając

'Edit'->'Profile Preferences'->'Terminal Bell' pole wyboru.

rivanov
źródło
2

To, co działało mi najlepiej, jeśli chodzi o bardziej intuicyjną nawigację w wierszu poleceń iTerm2 (jestem młodym dorosłym, który nie dorastał w wierszu poleceń, ale spędziłem dużo czasu w edytorach tekstowych i IDE) do:

  • Przejdź do Preferencji -> Profil -> Klucze
  • Pod listą Key Mappings znajduje się pole do dodawania / usuwania lub ładowania Presetów (pole kombi)
  • Wybierz Natural Text Editingopcję z listy rozwijanej Ustawienia wstępne.

Spowoduje to ustawienie kluczy edytora w bardziej standardowy sposób, bez konieczności modyfikacji każdej opcji osobno.

loganjones16
źródło
0

Sugeruję, aby użyć zkbddo skonfigurowania skrótów klawiszowych. Używam go i Alt+ Left/ Alt+ Rightdziała dobrze na iTerm2. Zobacz zshcontrib(1)szczegóły na temat zkbd.

Daniel Serodio
źródło