Использование клавиш ctrl-стрелка с PuTTY и экраном

33

Я искал и не мог найти решение для этого нигде. Я использую PuTTY из Windows для подключения к различным серверам, на которых я запускаю bash и screen. Кажется, bash отлично работает с клавишами со стрелками Ctrl для перехода между словами в командной строке, но на экране это не работает. Вне экрана ctrl-left отправляет «^ [OC, а ctrl-right - это« ^ [OD »». На экране вместо этого я получаю «^ [[C» и «^ [[D» », которые, по-видимому, являются кодами просто клавиши со стрелками влево / вправо. Есть ли способ заставить экран распознавать клавиши со стрелками ctrl при использовании PuTTY? (К вашему сведению, я не помню, чтобы эта проблема возникала при использовании gnu-терминала в linux вместо PuTTY).

ОБНОВЛЕНИЕ: Кажется, проблема заключается в PuTTY, так как он не отправляет управляющие коды, необходимые для того, чтобы это работало. Я сейчас сдаюсь и использую Cygwin + mintty.

kbosak
источник
Ничего себе, mintty великолепна - уже давно ищу достойный эмулятор терминала для Windows. Спасибо за это.
синеватый
Тем не менее, я получаю ^[[1;5ACtrl-Up, который представляется более правильным, согласно code.google.com/p/mintty/wiki/Keycodes#Cursor_keys
blueyed

Ответы:

13

Редактировать:

Вот что сработало для меня:

  • Мои ~/.bashrcнаборы TERM=xterm(мои, оказывается, TERM=xterm-256colors) переопределяющие экраныTERM=screen
  • Я установил PuTTY> Терминал> Возможности> Отключить режим клавиш курсора приложения на отмеченный
  • Я ввожу tput smkxв приглашении Bash
  • Теперь клавиши Ctrl-Arrow переходят слово за словом

  • В информационных целях, если я делаю:
    tput smkx | hexdump -c
    я получаю
    0000000 033 [ ? 1 h 033 =
    и
    tput rmkx | hexdump -c
    дает мне
    0000000 033 [ ? 1 l 033 >

Я думаю, что есть способ превратить это во что-то немного лучше, но это то, что у меня так далеко, и, похоже, это работает.

Оригинальный ответ:

От info screen:

Каждое окно в сеансе `screen 'эмулирует терминал VT100 с некоторыми дополнительными функциями. Эмулятор VT100 жестко запрограммирован, другие типы терминалов не могут быть эмулированы.

А у VT100 нет кодов клавиш Ctrl-Arrow.

Приостановлено до дальнейшего уведомления.
источник
set -o vi(если вы такой человек :)
MikeyB
1
@MikeyB: Как это помогает (кстати, нет)?
Приостановлено до дальнейшего уведомления.
Спасибо. Не тот ответ, на который я надеялся, но теперь я могу двигаться дальше и жить с этим ограничением или использовать другую привязку ключа.
kbosak
1
@ Денис: Ну, это дает вам еще один способ справиться с перемоткой вперед / назад, если вы - тип человека, который может обернуть голову вокруг него. set -o viвключает режим командной строки vi, чтобы вы могли нажимать ESCи использовать клавиши vi для перемещения и редактирования командной строки.
MikeyB
1
@kbosak: я тоже не доволен этим ответом. Вот почему я это исправил . :-)
Пауза до дальнейшего уведомления.
23

Как упомянуто здесь , вы можете поместить в ~ / .inputrc:

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

Это сработало для меня.

Фейер Майкл
источник
5
Это сработало для меня и было намного проще, чем принятый ответ.
Петрус Терон
Это сработало и для меня, в то время как принятый ответ не сработал
Скиавини
+1 Краткий ответ, который просто работает.
Адам Кэвнесс
3
Убедитесь, что $include /etc/inputrcв верхней части .inputrcфайла есть, иначе readline не будет читать общесистемные привязки, а ключи, такие как Home и End, сломаются.
Джеймс
1
Это должен быть принятый ответ!
Шайлен
4

Я несколько удивлен, что вы заставили Putty отправлять ctrl-стрелки правильно, даже не используя screen, поскольку это никогда не работало для меня. Мое решение состояло в том, чтобы переключиться на использование alt-arrowkeys (meta-arrowkeys), которые, по моему мнению, имеют одинаковую привязку вперед / назад в bash по умолчанию, хотя мне пришлось выполнить пару дополнительных команд, чтобы zsh распознал их:

bindkey "^ [^ [[C" forward-word # Meta-RightArrow
bindkey "^ [^ [[D" обратное слово # Meta-LeftArrow
Zed
источник
Я тоже могу пойти по этому пути. Левая клавиша ctrl намного проще, чем клавиши meta или alt (по крайней мере, на моей клавиатуре). Ну что ж.
kbosak
4

В случае, если другие найдут этот старый вопрос, как я, более свежее решение:

Ctrl и клавиши со стрелками не работают в замазке! Что я делаю?

putty инвертирует смысл режима клавиши курсора на Ctrl, что для tmux довольно сложно правильно определить. Чтобы правильно настроить клавиши ctrl, измените настройки terminfo, чтобы kUP5 (Ctrl-Up и т. Д.) Были настроенными версиями, и отключите smkx / rmkx, чтобы tmux не изменил режим. Например, с этой строкой в ​​.tmux.conf (при условии, что для TERM установлено значение xterm):

установить -g терминал-переопределения "xterm *: kLFT5 = \ eOD: kRIT5 = \ eOC: kUP5 = \ eOA: kDN5 = \ eOB: smkx @: rmkx @"

Обратите внимание, что это будет работать только в tmux 1.2 и выше.

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

Коллин Грейди
источник
0

Вы должны заглянуть в документацию terminfo, ncurses, screen и putty, если хотите правильно отладить / настроить. Также ярлыки bash могут быть настроены с помощью inputrc. Загляните в справочные страницы bash и найдите inputrc.

Мирча Вуцовичи
источник
Я не думаю, что проблема в том, что в inputrc. Я уже пробовал несколько возможных решений, которые включали ввод записей в inputrc безуспешно. Опять же, похоже, что неправильный код отправляется на экран для клавиш со стрелками Ctrl. Я также не хочу тратить на это гораздо больше времени, чем у меня уже есть, так как на самом деле это всего лишь небольшое неудобство.
kbosak
0

У вас есть правильная кодировка символов в Putty? Если вы подключаетесь к серверу в UTF-8 и ваша шпаклевка находится в стандартной кодировке, в vim пишутся клавиши со стрелками. Если Putty находится в UTF-8, вы можете перемещать курсор. Может быть, это то же самое в вашем случае ...

Дом
источник
Это совсем не проблема vi / vim, и я видел только один вариант в PuTTY для набора символов, который не помог.
kbosak
Попробуйте разные варианты в Терминале-> Клавиатура-> Функциональные клавиши и клавиатура. Кстати, для меня Ctrl-Arrow тоже не работает в bash, он работает так же, как и без нажатия Ctrl.
Профессор Мориарти
Да, я перепробовал столько вариантов и комбинаций вариантов без всякой удачи. К вашему сведению, есть некоторые записи, которые вы можете поместить в inputrc, чтобы помочь с клавишами ctrl-стрелки в bash, но они не помогают при использовании экрана.
kbosak
0

В вашей конфигурации замазки в Терминале -> Возможности есть несколько флажков «отключить». Возможно, вы захотите попробовать отключить клавиши курсора приложения или режим клавиатуры приложения - иногда замазка пытается быть «слишком умной» и отправляет управляющие символы, которые не совместимы с сервером.

tylerl
источник
0

Я использую Терминал> Клавиатура> Функциональные клавиши> Xterm R6, который помогает с функциональными клавишами htop (поиск f4 и т. Д.) Работать должным образом.

Я обнаружил, что вместо использования CTRL + стрелка, ALT + стрелка переходит слова вместо.

Дэн
источник