Szukam rozwiązania ALT + LeftArrowKey w zsh

131

Niedawno przerzuciłem się z bash na zsh, jednak brakuje mi Alt+ LeftArrowKeyi Alt+, RightArrowKeyaby przechodzić tam i z powrotem po jednym słowie.

W tej chwili, jeśli naciśnę Alt+ LeftArrowKey, cofnę się o kilka liter i utknę. Nie cofnę się dalej i nie wrócę do końca linii z Alt+, RightArrowKeyjak bym się spodziewał. Nie mogę nawet użyć klawiszy strzałek, aby przejść do końca linii, tylko do przedostatniej. Nie można również wprowadzić nowych znaków w linii lub nawet usunąć.

Jak mogę odzyskać mój ukochany skrót?

Jestem na Mac OS X i używam terminala, jeśli to ważne.

Mads Ohm Larsen
źródło

Odpowiedzi:

244

Uruchom, cata następnie naciśnij klawisze, aby zobaczyć kody wysyłane przez Twój skrót.
(Naciśnij Ctrl+, Caby zabić, catkiedy skończysz.)
Dla mnie (ubuntu, konsole, xterm) naciśnięcie Alt+ wysyła ^[[1;3D, więc wstawiłbym mój .zshrc

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

(Właściwie wolę używać Ctrl+ strzałka, aby przesuwać słowo po słowie, jak w zwykłym polu tekstowym pod Windows lub linux gui.)

Powiązane pytanie: Napraw ustawienia klawiszy (Home / End / Insert / Delete) w .zshrc podczas uruchamiania Zsh w emulatorze terminatora Terminator

lolesque
źródło
16
Jesteś moim wybawcą! Na moim Macu "Alt + <-" dało "^ [b" i -> dało "^ [f", więc dodałem te. Działa jak marzenie. Ctrl + strzałki są zarezerwowane do przełączania między pulpitami na Macu.
Mads Ohm Larsen
1
Jedna uwaga jest taka, że ​​dla ctrl + <- cat raportował ^[[Dza mnie, podczas gdy ctrl + v raportował ^[OD. Sugestia Ctrl + v zadziałała, ale cat nie. Co więcej, ctrl + v zgłaszało to samo zarówno dla alt + <- jak i alt + ->. Udało mi się dodać te dwa, patrząc na wyjście kota i zastępując dowolne „[” przez „O”
Mike S,
10
moje wyjście w cat jest ^[^[[Cdla słowa do przodu i ^[^[[Ddla słowa do tyłu, ale aktualizacja dla tych w .zshrc nie działała z jakiegoś powodu.
Yunti
2
@Yunti - Umieszczenie bindkey "^[^[[D" backward-wordi bindkey "^[^[[C" forward-wordw ~ / .zprofile zadziałało dla mnie!
Fernando Espinosa
Człowiek! Uratował mi życie! dzięki za udostępnienie!
Joao Henrique
187

Dla każdego, kto używa iTerm, niezależnie od powłoki

Wszystkie oferowane tutaj rozwiązania są moim zdaniem podejściem wstecznym. Zasadniczo mówisz powłoce, aby nasłuchiwała jakiejś sekwencji esc lub innego powiązania klawiszy, które ustawiłeś w swoim terminalu, powodując problemy ze zgodnością podczas przełączania powłok (jeśli używasz SSH do innej powłoki, przełącz się z BASH na ZSH itp. I przegrywasz niektóre, jeśli nie wszystkie, przypisania klawiszy).

Większość powłok ma zestaw domyślnych sekwencji, które są wstępnie powiązane. Co więcej, chociaż nie są w 100% spójne, są wystarczająco blisko. Tak więc najłatwiejszym sposobem na utworzenie przypisania klawiszy dla określonej akcji w powłoce jest poinformowanie aplikacji terminala, aby powiązała się z domyślnymi przypisaniami klawiszy, które są spójne w różnych powłokach.

Napisałem ściskanie rozwiązanie dla coraz terminal odpowiedzieć tak blisko rodzimych skróty klawiszowe mac tutaj

Otwórz preferencje iTerm + ,i przejdź do Profileszakładki ( Keyszakładka może być używana, ale dodanie przypisania klawisza do twojego profilu umożliwia zapisanie twojego profilu i zsynchronizowanie go z wieloma komputerami) i keyspod-zakładki i wprowadź następujące informacje:

Przesuń kursor o jedno słowo w lewo

+ Wyślij kody szesnastkowe:0x1b 0x62

Przesuń kursor o jedno słowo w prawo

+ Wyślij kody szesnastkowe:0x1b 0x66

Powinno to zapewnić pożądane zachowanie nie tylko w ZSH, ale także jeśli łączysz się przez SSH z serwerem z systemem BASH, irb / pry, węzłem itp.

Travis
źródło
1
Miałem problem z zaakceptowanym rozwiązaniem, ponieważ zsh działało poprawnie, ale nie irb i inne konsole. Kasowanie poprzednich ustawień (zgodnie z sugestią w profilu iTerm) działa jak urok!
llekn
1
Rozwiązanie bindkey spowodowałoby denerwujący dźwięk błędu na komputerze Mac. To powinien być właściwy sposób.
Weishi Zeng
@Lev Prawdopodobnie dlatego, że Twoja powłoka nie jest mapowana do domyślnej konfiguracji. Uruchom, bindkey | grep forward-wordktóry powinien zostać "^[f" forward-wordzwrócony, ale jeśli nie, masz 2 opcje. mapować do jednego z innych zwróconych lub dodać "^[f" forward-worddo swojego .zshrc.
Travis
Zwrócę uwagę, że "^[f"wydaje się , że jest to najbardziej konsekwentnie używane powiązanie forward-wordużywane w różnych powłokach i jedyne ustawione domyślnie w mojej wersji basha.
Travis
Jakoś działało z przyciskiem polecenia dla mnie zamiast opcji. Dzięki. :)
Vaibhav Jain
72

Dodanie następującego pliku do ~ / .zshrc działało dla mnie na OSX Mountain Lion.

bindkey -e
bindkey '[C' forward-word
bindkey '[D' backward-word
Rob Sawyer
źródło
4
To rozwiązanie uruchamia „dzwonek” w iTerm 2 przy każdym użyciu, więc przeskakiwanie między słowami może być naprawdę denerwujące.
Matthew Morek,
1
ktoś wymyśli, jak to wyłączyć ^ @MatthewMorek
Daniel Kobe
18
'\ e \ e' zapobiega dzwonkowi. Moja konfiguracja na El Capitan z iTerm 2 w trybie zgodności terminala to bindkey "\e\e[D" backward-word bindkey "\e\e[C" forward-word
Johannes Gontrum
Dziękuję, to rozwiązało problem w macOs Sierra. Nie słychać żadnych dźwięków dzwonka ani na Terminalu, ani na iTerm2.
Raspo
Jak ustawić go tak, aby przesuwał się od końca słów, a nie od początku lub od nich?
Mafro34
23

Na MacOS High Siera 10.13.6 lub Mojave 10.14.2 i przy użyciu iTerm2 z ZSH Aby przejść od słów, muszę umieścić w ten sposób:

bindkey "\e\e[D" backward-word
bindkey "\e\e[C" forward-word

Inne rozwiązania nie działają dla mnie

Vetalll
źródło
1
To jedyne rozwiązanie, które również zadziałało. Dziękuję Ci! Mac OS Mojave
jamescampbell
Działa również na OS Catalina!
Reed Richards
7

Chociaż nie jest to ścisła odpowiedź na Twoje pytanie, domyślne wiążące dla forward-wordi backward-wordto alt-fodpowiednio. alt-b.

Działa to wszędzie, nie wymaga opuszczania wiersza głównego i ma ładną właściwość mnemoniczną (f = do przodu, b = do tyłu), a jednocześnie jest spójne z ctrl-fi ctrl-bbędąc forward-characteri backward-character.

Wyrwij swoje klawisze strzałek!

0x89
źródło
4
nie działa dla mnie w zsh / iterm2, wypisuje ƒ i ∫ (działa cb cf).
Davorin,
2

Żeby to zadziałało, użyłem tej odpowiedzi , jednak musiałem zamienić kody (lewy <-> prawy)

⌥ + ← Wyślij kody szesnastkowe: 0x1b 0x66
⌥ + → Wyślij kody szesnastkowe: 0x1b 0x62

i dodaj do my ~/.zshrc

bindkey -e
bindkey "^[b" forward-word
bindkey '^[f' backward-word
iRonin
źródło
Prawdopodobnie byłoby mniej zagmatwane, gdybyś bindkeyzamiast tego zmienił swoje , łączył ^[fsię forward-word, a nie łączył backward-word.
Nickolay
1

Na Mavericks (10.9.4) kod to 1; 5 ... więc do powiązania alt ze strzałkami mam mój plik .zshrc, używając tego:

bindkey "^[[1;5C" forward-word
bindkey "^[[1;5D" backward-word

Możesz użyć CTRL + V, a następnie polecenia, którego chcesz użyć

w Yosemite użyj rozwiązania Roba

ZeoS
źródło
1
bindkey "[C" forward-word bindkey "[D" backward-word
Farkie
1

W zsh możesz użyć bindkeypolecenia, aby wyświetlić skróty klawiaturowe.

Służy bindkeydo odkrywania opcji dostępnych bez niestandardowych skrótów klawiszowych.

Mianowicie, ^[b aby cofnąć słowo i ^[fprzejść o jedno słowo do przodu.

MCI
źródło