Dlaczego Ctrl-Arrow nie działa w bash na OS X?

15

Używam Ctrl- i Ctrl- na każdym systemie Linux, na którym pracuję, ale te kombinacje klawiszy nie działają w trybie bash na moim Macbooku Pro. Działa pod systemem Snow Leopard, a ja korzystam z wbudowanej aplikacji Terminal.

Kombinacje klawiszy nie są przechwytywane przez nic przed ani przez Terminal, ponieważ jeśli ssh na jednym z moich serwerów Linux, mogę użyć Ctrl- /, aby przejść do następnego / poprzedniego słowa w wierszu poleceń. Jednak gdy wypróbowuję tę kombinację klawiszy w bash na moim Macbooku, po prostu dostaję „C” dla prawej strzałki i „D” dla lewej strzałki.

Jakieś pomysły na to, jak sprawić, by te klucze działały w Darwin Bash?

Ryan Olson
źródło
2
Jeśli używasz Spacji, Ctrl + strzałka domyślnie zamienia spacje.
mark4o
1
Podobne
wstrzymane do odwołania.

Odpowiedzi:

13

System OS X używa klucza emacs, wiążąc mój domyślny. To prawda, że ​​praktycznie każda aplikacja na OS X jest raczej przyjemna. Oznacza to, że rzeczy takie jak Ca i Ce zaczynają się / kończą linii. Dostajesz także sprytne zabójstwo na słowo z M-backspace, och, i zabójstwo z Ck.

Powinno to oznaczać, że w twoim terminalu słowo do przodu / do tyłu jest powiązane odpowiednio z Mf i Mb (M = Meta = alt / opcja), jednak tak nie jest. W systemie OS X słowo forward / backword są domyślnie powiązane z M- → i M- ←.

Możesz zmienić to zachowanie, zmieniając sposób, w jaki biblioteka GNU Readline jest skonfigurowana dla twojego konta. Odbywa się to w twoim ~/.inputrcpliku. Możesz uzyskać dużą listę możliwych do powiązania poleceń, man readlinea także w dokumentacji online takiej jak tutaj. .

Aby odpowiedzieć na twoje pytanie, chcesz ponownie przypisać to, co robi Readline, gdy widzi C- → i C- ←, aby zrobić to, co robi na serwerze Linux.

Składnia ~/.inputrcpliku jest bardzo prosty, co chcesz zrobić: key-sequence: action.

To powinno być to, czego potrzebujesz, aby uzyskać pożądane zachowanie:

"\e[5C": forward-word
"\e[5D": backward-word

Oto kolejna strona z dodatkowymi przydatnymi powiązaniami.

(Prawdopodobnie możesz uniknąć kopiowania / etc / inputrc z twojego Linux-a do OS X ~ / .inputrc)

Tim Bielawa
źródło
Uwaga: Jeśli często używasz Tmuxa z Xterm-Keys, będziesz także potrzebować, \e[1;5Ca \e[1;5Dtakże uruchamiać forward-wordi backward-word.
Arne
3
Kolejna uwaga: jeśli nadal nie działa, może to wynikać z konfliktu skrótów z kontrolą misji / przestrzeniami. Preferencje systemowe -> Klawiatura -> Skróty -> Kontrola misji, Przenieś w lewo / w prawo spację
bhh1988
Nie rozumiem „OS X domyślnie używa powiązania klucza emacs”. „Ctrl-arrow” to także powiązanie z klawiszem Emacsa.
Greg
3

wstaw ~/.inputrcnastępujące wiersze:

"\e[5C": forward-word
"\e[5D": backward-word
Tig
źródło
0

Obecnie wydaje się, że zmieniły się sekwencje specjalne, które Ctrl-Arrows wyświetla w terminalu. Oto, co działa dla mnie na dzień dzisiejszy (koniec 2018 r.):

"\e[1;5C": forward-word "\e[1;5D": backward-word

Uwaga: rzeczywiste sekwencje specjalne można zawsze ustalić, wpisując cat -vTerminal i naciskając Ctrl-Strzałka w lewo lub Ctrl-Strzałka w prawo. Oto przykładowe dane wyjściowe dla mojej własnej strzałki Ctrl-Strzałka w lewo:

^[[1;5C ^[[1;5C

Przekładać się na .inputrcslangu, wymienić znak ucieczki ^[z \ei trzymać wynik wewnątrz podwójnych cudzysłowów.

DomQ
źródło
0

Jak wspomniano @ bhh1988, konfiguracja Mission Control uniemożliwia klawiszom Ctrl pracę z klawiszami strzałek w bash. Nie chciałem ingerować w te skróty, więc zamiast tego używam klawisza Option (tj. Alt). Obecnie na mojejve używam niemieckiej klawiatury (nie wiem, czy to jest istotne). Wstawiam poniższe, .inputrcaby używać opcji-strzałka w lewo i opcja-strzałka w prawo do przemieszczania się między słowami.

"\e\e[C": forward-word
"\e\e[D": backward-word
Peter Evans
źródło
0

AKTUALIZACJA Sty 2020

W najnowszych wersjach OSX domyślną powłoką jest zsh. Dlatego magiczne zaklęcie, aby ctrl-arrowleft i ctrl-arrowright działało zgodnie z oczekiwaniami, jest następujące:

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

(włóż to do swojego .zshrc)

Fergie
źródło