Alt-Left, aby pominąć słowa nie działa w emulatorach terminali

16

Na maszynie Debian Wheezy przy poprzednim zadaniu przyzwyczaiłem się do klawiszy Alt + Left i Alt + Right, aby przeskakiwać między słowami w aktywnym wierszu poleceń (w skrócie).

Ponieważ jednak w domu uaktualniłem do Jessie (Debian 8.0, gałąź testowa), to już nie działa: zamiast przejść do poprzedniego słowa, Alt-Left drukuje coś w stylu Dlub [D. OTOH, jeśli otworzę ssh i połączę się z moją bezgłową Debian Wheezy, działa to idealnie.

Ponadto właśnie zainstalowałem Fedorę 20 w moim nowym zadaniu i tutaj zachowanie jest takie samo. Dotyczy to bash, csh i ksh (rozpoczęte pod env -i), a także rxvt-unicode i xfce4-terminal, więc musi to być coś poza tym poziomem.

Gdzie jeszcze na stosie powinienem szukać różnicy?

Alois Mahdal
źródło
4
Sugerowałbym wypróbowanie klawiszy alt-b i alt-f (jak również pozostałych klawiszy readline), ponieważ są one bardziej uniwersalne i sporo programów wiersza poleceń honoruje wiązania readline.
skromny

Odpowiedzi:

21

Prawdopodobnie zdefiniowano plik lokalny ~/.inputrclub globalny /etc/inputrc, który został utracony podczas aktualizacji. Łatwym rozwiązaniem jest utworzenie ~/.inputrcpliku z następującymi liniami:

## enable Alt-arrows 
"\e[1;3D": backward-word ### Alt left
"\e[1;3C": forward-word ### Alt right

Będą pracować xtermi terminatora gnome-terminaljednak może być konieczne manipulowane dla innych terminali. Niestety, każdy emulator terminala może używać innej składni. Aby uzyskać więcej informacji, zobacz moją odpowiedź tutaj .

terdon
źródło
Naprawdę miałem na myśli Alt i nadal działa na zdalnej maszynie. Ctrl + Strzałka w lewo / w prawo jest już zajęte w Rxvt, aby przesunąć kartę w lewo i prawo (Shift + Strzałka w lewo / w prawo, przełączanie kart i Shift + Strzałka w dół otwieranie nowej).
Alois Mahdal
1
Nawiasem mówiąc, podczas gdy Ctrl + lewy / prawy jest powszechny w edytorach GUI, terminale to zupełnie inny świat, w którym jeszcze nie widziałem tej kombinacji.
Alois Mahdal
10

terdon ustawił mnie we właściwym kierunku: plik inputrc .

Winowajcą jest to, że całkiem nieintuicyjnie, readline6 faktycznie używa ~ / .inputrc zamiast / etc / inputrc, który to readline (3) nie podkreśla ani nie obala:

Nazwa tego pliku pochodzi od wartości zmiennej środowiskowej INPUTRC. Jeśli ta zmienna nie jest ustawiona, wartością domyślną jest ~ / .inputrc. Jeśli ten plik nie istnieje lub nie można go odczytać, ostateczną wartością domyślną jest / etc / inputrc.

Tak więc, w obu maszynach Debiana / etc / inputrc jest identyczna jak ta przewidziana przez libreadline6 opakowaniu (wersja jest taka sama, jak również), na nowszym komputerze ~ / .inputrc istnieje z jednej linii: set bell-style none. Po usunięciu tego pliku wszystko działa dobrze (patrz uwagi poniżej).

Nie mogę sprawdzić Fedory do jutra, ale myślę, że to ten sam problem. Aktualizacja: W Fedorze ~ / .inputrc nie istniało, tutaj / etc / inputrc jest po prostu inny, więc może tego nie zdefiniować. Jako poprawkę po prostu zapisałem inputrc Debiana jako moje ~ / .inputrc.


Uwagi:

Tajemnica, jak to się zmieniło podczas aktualizacji 7> 8, pozostaje nierozwiązana, ale częściowo można to przypisać mojej złej pamięci i niezamierzonemu żonglowaniu plikami kropkowymi. (BTW, to nie była aktualizacja APT, ale raczej ponowna instalacja i ręczne przenoszenie pliku kropkowego, więc może ~ .inputrc jakoś temu przeszkodziło.)

Ponadto, gdy mówię OK, mam na myśli, że działa z Ctrl wszędzie oprócz Rxvt (OK, sprawdziłem tylko xfce4-terminal, ale wiemy, że Rxvt jest zwykłym buntownikiem), gdzie jest to mapowane na Alt, prawdopodobnie dlatego, że Ctrl jest pobierany przez Rxvt -specyficzna funkcjonalność - przenieś aktywną kartę na listę.

Jak wspomniała strona man, za pomocą bash możesz użyć wbudowanego polecenia bind, aby sprawdzić, co aktualnie masz.

Alois Mahdal
źródło
Niezły chwyt, +1. W rzeczywistości jest bardziej intuicyjny niż myślisz. Domyślnym zachowaniem jest, aby pliki dot specyficzne dla użytkownika miały pierwszeństwo przed wartościami domyślnymi dla całego systemu. W przeciwnym razie użytkownicy nie będą mogli zmienić swojego ustawienia.
terdon
Zobacz zaktualizowaną odpowiedź, aby dowiedzieć się, jak konkretnie włączyć strzałki Alt +.
terdon
2
Jest to normalne, musisz $include /etc/inputrcna górze, ~/.inputrcjeśli chcesz to również przeczytać.
Chris Down
@terdon idealnie ma sens preferować ustawienia użytkownika przed całym systemem, ale bardziej intuicyjne byłoby to, że ~ / .initrc zostałoby „scalone” w / etc / initrc (tj. / etc / initrc byłoby $included domyślnie).
Alois Mahdal
1
Patrz: 1. opcje zakodowane na stałe, 2. / etc / initrc, 3. ~ / .initrc --vs-- 1. opcje zakodowane na stałe 2. / etc / initrc OR ~ / .initrc. Pierwszy sposób jest znacznie bardziej elastyczny, ponieważ można go z łatwością rozszerzyć na niższy poziom (np. Na projekt, przyznaję, że ten przykład nie ma większego sensu z readline, ale masz rację).
Alois Mahdal