Używanie klawiszy strzałek ctrl z PuTTY i screenem

33

Szukałem i nigdzie nie mogłem znaleźć rozwiązania tego problemu. Używam PuTTY z Windows do łączenia się z różnymi serwerami, na których uruchamiam bash i screen. Wygląda na to, że bash działa poprawnie z klawiszami strzałek ctrl, aby przeskakiwać słowo w słowo w linii poleceń, ale na ekranie nie działa. Nie na ekranie, ctrl-lewy wysyła „^ [OC, a ctrl-prawy to” ^ [OD ”. Na ekranie zamiast tego dostaję„ ^ [[C ”i„ ^ [[D ”), które wydają się kodami tylko lewy / prawy klawisz strzałki. Czy jest jakiś sposób, aby ekran rozpoznał klawisze Ctrl-strzałka podczas korzystania z PuTTY? (FYI, nie pamiętam tego problemu, gdy używam terminalu GNU w Linuksie zamiast PuTTY).

AKTUALIZACJA: Wygląda na to, że problem stanowi PuTTY, ponieważ nie wysyła kodów specjalnych niezbędnych do działania. Na razie się poddaję i używam Cygwin + mintty.

kbosak
źródło
Wow, mintty jest świetna - od jakiegoś czasu szukałem dobrego emulatora terminali dla Windows. Dziękuję za to.
blueyed
Jednak dostaję ^[[1;5ACtrl-Up, który wydaje się być bardziej poprawny, zgodnie z code.google.com/p/mintty/wiki/Keycodes#Cursor_keys
niebiesko

Odpowiedzi:

13

Edytować:

Oto, co zadziałało dla mnie:

  • Moje ~/.bashrczestawy TERM=xterm(moje bywają TERM=xterm-256colors) zastępują ekranyTERM=screen
  • Ustawiam PuTTY> Terminal> Funkcje> Wyłącz tryb klawiszy kursora aplikacji na zaznaczone
  • Wchodzę tput smkxpo znaku zachęty Bash
  • Teraz klawisze Ctrl-Arrow przeskakują słowo po słowie

  • W celach informacyjnych, jeśli mam zrobić:
    tput smkx | hexdump -c
    Mam
    0000000 033 [ ? 1 h 033 =
    i
    tput rmkx | hexdump -c
    daje mi
    0000000 033 [ ? 1 l 033 >

Myślę, że istnieje sposób, aby przerobić to na coś nieco lepszego, ale do tej pory mam to i wydaje się, że działa.

Oryginalna odpowiedź:

Od info screen:

Każde okno w sesji ekranowej emuluje terminal VT100, z kilkoma dodatkowymi funkcjami. Emulator VT100 jest zakodowany na stałe, nie można emulować żadnych innych typów terminali.

A VT100 nie mają kodów klawiszy Ctrl-Arrow.

Wstrzymano do odwołania.
źródło
set -o vi(jeśli jesteś tego typu osobą :)
MikeyB
1
@MikeyB: Jak to pomaga (nawiasem mówiąc, nie pomaga)?
Wstrzymano do odwołania.
Dzięki. Nie była to odpowiedź, na którą liczyłem, ale teraz mogę przejść dalej i żyć z tym ograniczeniem lub użyć innego klucza.
kbosak
1
@Dennis: Cóż, daje to inny sposób radzenia sobie z przewijaniem do przodu / do tyłu, jeśli jesteś typem osoby, która może owinąć głowę wokół niego. set -o viwłącza tryb wiersza polecenia vi, dzięki czemu możesz naciskać ESCi używać klawiszy vi, aby poruszać się i edytować linię poleceń.
MikeyB,
1
@kbosak: Nie jestem też zadowolony z tej odpowiedzi. Dlatego to naprawiłem . :-)
Wstrzymano do odwołania.
23

Jak wspomniano tutaj , możesz umieścić ~ / .inputrc:

"\eOD": backward-word
"\eOC": forward-word

To zadziałało dla mnie.

Fayer Michael
źródło
5
To działało dla mnie i było o wiele łatwiejsze niż zaakceptowana odpowiedź.
Petrus Theron,
To również zadziałało dla mnie, a zaakceptowana odpowiedź nie
Schiavini
+1 Zwięzła odpowiedź, która po prostu działa.
Adam Caviness,
3
Upewnij się, że znajduje się $include /etc/inputrcu góry .inputrcpliku, w przeciwnym razie readline nie przeczyta powiązań ogólnosystemowych, a klucze takie jak Home i End się zepsują.
James
1
To powinna być zaakceptowana odpowiedź!
Shailen
4

Jestem nieco zaskoczony, że Putty poprawnie wysyła klawisze strzałek ctrl, nawet bez korzystania z ekranu, ponieważ to nigdy nie działało dla mnie. Moim rozwiązaniem było przejście na używanie klawiszy strzałek alt (meta-strzałki), które, jak sądzę, mają domyślnie to samo wiązanie słów do przodu / do tyłu w bash, chociaż musiałem wydać kilka dodatkowych poleceń, aby zsh je rozpoznał:

bindkey "^ [^ [[C" słowo do przodu # Meta-RightArrow
bindkey "^ [^ [[D" słowo wstecz # Meta-LeftArrow
Zed
źródło
Mogę też iść tą drogą. Lewy klawisz Ctrl jest o wiele łatwiejszy do naciśnięcia niż klawisze meta lub alt (przynajmniej na mojej klawiaturze). No cóż.
kbosak
4

W przypadku, gdy inni znajdą to stare pytanie, tak jak ja, nowsze rozwiązanie:

Ctrl i klawisze strzałek nie działają w kitach! Co ja robię?

putty odwraca sens trybu klawisza kursora na ctrl, co jest nieco trudne do prawidłowego wykrycia przez tmux. Aby poprawnie ustawić klawisze Ctrl, zmień ustawienia terminfo, aby KUP5 (Ctrl-Up itp.) Były dostosowanymi wersjami i wyłącz smkx / rmkx, aby tmux nie zmienił trybu. Na przykład z tą linią w .tmux.conf (zakładając, że TERM jest ustawiony na xterm):

ustaw -g terminala-nadpisuje "xterm *: kLFT5 = \ eOD: kRIT5 = \ eOC: kUP5 = \ eOA: kDN5 = \ eOB: smkx @: rmkx @"

Zauważ, że będzie to działać tylko w tmux 1.2 i nowszych.

http://stuff.mit.edu/afs/athena/project/bsd/src/tmux-1.3/FAQ

Collin Grady
źródło
0

Powinieneś zajrzeć do dokumentacji terminfo, ncurses, screen i putty, jeśli chcesz poprawnie debugować / konfigurować. Również skróty bash można skonfigurować za pomocą inputrc. Przejrzyj strony podręcznika bash i wyszukaj inputrc.

Mircea Vutcovici
źródło
Nie sądzę, że problem jest w inputrc. Próbowałem już kilku możliwych rozwiązań, które polegały na wprowadzaniu wpisów do inputrc bez powodzenia. Ponownie wydaje się, że niepoprawny kod jest wysyłany na ekran w poszukiwaniu klawiszy strzałek ctrl. Nie chcę też poświęcać na to dużo więcej czasu, niż mam, ponieważ to naprawdę niewielka niedogodność.
kbosak
0

Czy masz odpowiednie kodowanie znaków w Putty? Jeśli łączysz się z serwerem w UTF-8, a twój kit jest w standardowym zestawie znaków, w vimie klawisze strzałek są zapisywane. Jeśli Putty jest w UTF-8, możesz przesunąć kursor. Może w twoim przypadku jest tak samo ...

Dom
źródło
To wcale nie jest problem z vi / vim i widziałem tylko jedną opcję w PuTTY dla zestawu znaków, co nie pomogło.
kbosak
Wypróbuj różne opcje w Terminal-> Klawiatura-> Klawisze funkcyjne i klawiatura. BTW, dla mnie Ctrl-Arrow też nie działa w bashu, robi to samo co bez naciskania Ctrl.
Prof. Moriarty,
Tak, próbowałem tyle opcji i kombinacji opcji bez powodzenia. Do waszej dyspozycji jest kilka pozycji, które można wprowadzić w inputrc, aby pomóc w klawiszach ctrl-strzałek w bash, ale nie pomagają one podczas korzystania z screena.
kbosak
0

W konfiguracji kitu w obszarze Terminal -> Funkcje znajduje się kilka pól wyboru „wyłącz”. Możesz spróbować wyłączyć klawisze kursora aplikacji lub tryb klawiatury aplikacji - czasami kit próbuje być „zbyt inteligentny” i wysyła znaki sterujące, które nie są kompatybilne z serwerem.

tylerl
źródło
0

Używam terminala> Klawiatura> Klawisze funkcyjne> Xterm R6, który pomaga przy klawiszach funkcyjnych htop (wyszukiwanie f4 itp.) Działających zgodnie z oczekiwaniami.

Odkryłem, że zamiast używać CTRL + strzałka, ALT + strzałka skacze zamiast słów.

Dan
źródło