Вопрос: Как настроить PuTTY так, чтобы Home / End / PgUp / PgDn работал правильно в bash?


Клавиши Home, End, PageUp, PageDown все типа a ~ в моей сессии bash вместо перемещения курсора / просмотра. Почему это происходит и какие настройки мне нужно изменить?

GNU bash, version 4.0.28(1)-release (x86_64--netbsd)
PuTTY v0.60

Первоначально вопрос:

В PuTTY, почему нажатие клавиши «Home» на оболочке (bash) типа «~»? Вернее, как мне заставить его переместить курсор в начало введенной мной команды?

(Я думал, что причина в том, что ~ это Главная каталог, но ответы говорят, что это не так.)


108
2018-01-11 16:48


Источник




Ответы:


Измените строку «Тип терминала» на вкладке «Соединение»> «Данные» с по умолчанию «xterm» на «linux». Это сработало для меня.

enter image description here


132
2018-02-02 22:54



Благодаря! У меня была эта проблема после того, как я начал использовать Ctrl Left / Right, используя этот метод (superuser.com/a/103097/45410). - Edwin Yip
Акцент: не Terminal -> Keyboard «Функциональные клавиши и клавиатура». - Elazar
Он работает, но создает другие проблемы, такие как отключение поддержки мыши. поэтому, это не приемлемое решение для меня - Anton
Это решение также позволяет umlauts внутри шпатлевки при подключении к OS X! - lorem monkey


Это происходит потому, что у вас нет правильного типа терминала PuTTY, или потому, что на вашем сервере не установлены правильные определения terminfo.

В системах на базе Debian Ncurses срок пакет (версия 5.7 + 20081213-1) содержит файлы определения terminfo для шпатлевка, шпатлевка-256-цветные а также шпатлевка-VT100 терминальных типов. Если у вас установлен этот пакет, вы можете установить строку «Тип терминала» в «putty» вместо стандартного «xterm» в конфигурации сеанса Putty (Connection -> Data).

Стивен Айронс также упоминает «linux» как другой тип терминала, который работает; Я считаю, что это правильно из предыдущего опыта, но не проверял его в последнее время.

В моих системах это позволяет Home и End работать правильно, хотя PageUp / PageDown не прокручивают окно консоли. (Они работают правильно в приложениях ncurses, таких как уместность, и Shift-PgUp / Shift-PgDn прокрутите окно консоли.)


39
2018-02-03 00:21



Да, используя TERM=putty или TERM=putty-256color является самым мудрым, хотя, к сожалению, в данный момент, похоже, не работает правильно для цветов 8-15 (которые должны быть яркими версиями 0-7). Другие «решения», как правило, могут вывернуться, иногда делают это с их вопиющим пренебрежением различиями между задействованными терминалами. - SamB
yum install ncurses-term сортировал его для меня на CentOS 7 со шпателем на следующем входе в систему, спасибо. - Wandering Zombie
установить тип терминала putty работает, но ломает xterm-подобную поддержку мыши (например, для Midnight Commander) - Anton
установка «ncurses-term» работала для меня на тестировании Debian. - hochl
ни один из них не работает для меня, я на шпаклере подключается к centos и не могу запустить yum install ncurses-term, потому что я не root. - Herman Toothrot


Если вы хотите проверить, какой код отправлен PuTTY на ваш терминал, когда вы нажимаете клавишу или комбинацию клавиш, вам просто нужно выпустить Ctrl+V и затем нажмите нужную клавишу.

Например, на моей коробке, нажав Главная key будет генерировать следующую строку на моем терминале:

^[[1~

Это означает, что PuTTY отправляет escape-символ ^ [ за которым следует строка [1 ~,

Вы можете создать ~/.inputrc файл в вашем $HOME или, альтернативно, /etc/inputrc файл в зависимости от вашей системы. Затем заполните этот файл кодами PuTTY и соответствующими действиями Bash, которые вы хотите активировать Bash.

Примечание. Заменяйте каждый ^ [ символа эквивалентным \ е строка

В моем примере я добавлю строку с моим Главная ключевой код и начало-строки действие (которое по умолчанию связано с Ctrl+A в Баше):

"\e[1~": beginning-of-line

FYI, мой файл inputrc имеет следующее содержимое:

set meta-flag on
set input-meta on
set convert-meta off
set output-meta on
"\e[1~": beginning-of-line     # Home key
"\e[4~": end-of-line           # End key
"\e[5~": beginning-of-history  # PageUp key
"\e[6~": end-of-history        # PageDown key
"\e[3~": delete-char           # Delete key
"\e[2~": quoted-insert         # Insert key
"\eOD": backward-word          # Ctrl + Left Arrow key
"\eOC": forward-word           # Ctrl + Right Arrow key

От @Cimbali: больше связываемых команд (например, предыдущая история: перемещение вверх по списку истории) на этой странице справки,


17
2017-09-26 21:59



ДА ! В заключение ! Строка терминального типа Putty ничего не сделала для обратного слова и форвардного слова. Отлично ! - Cimbali
Это единственное приемлемое решение, потому что TERM=linux или TERM=putty сломать xterm-подобную поддержку мыши. Благодаря! - Anton


Crtl + A приведет вас к началу строки

Вот список быстрых клавиш Bash


13
2018-01-11 17:02



Это здорово и все, но Home / End жестко связаны в моем мозгу, и, поскольку я управляю сервером только один раз в голубой луне, шансы разобраться в жесткой проводке тонкие. - RomanSt


То, что на самом деле отправляет ^[[1~которая является терминальной управляющей последовательностью, состоящей из:

  • ^ [- побег
  • [- левая квадратная скобка
  • 1 - один
  • ~ - тильда

Вы можете видеть, что нажав Ctrl+В тогда Главная,

Возможно, вы сможете исправить свою проблему, изменив настройку клавиатуры PuTTY для ключей Home и End на rxvt (что делает escape-последовательность ^[[H или путем изменения $ TERM, который вы используете (или путем редактирования ~/.inputrc).

Кстати, нет никакой связи между тильдой, которую вы получаете, когда вы нажимаете Главная и тильда, которая представляет домашний каталог. Например, в моей настройке Листать вниз производит ^[[6~ который также печатает тильду, если она не будет надлежащим образом истолкована.


9
2018-01-11 16:58



Благодаря! rxvt зафиксировал ключ «Домой»; теперь клавиша End производит динг. PgUp / Down действительно типа ~, и ни один из настроек клавиатуры PuTTY не заставит их работать. Мой баш испортился, или это «нормальный»? - RomanSt
Что вы получаете при вводе echo $TERM? - Dennis Williamson
xterm (Ограничение на 15 символов argh) - RomanSt
Вы можете попробовать добавить "\eOw": end-of-line (это заглавная буква O) для вашего ~/.inputrcфайл. - Dennis Williamson
Конечный ключ зафиксирован; Я понимаю. На самом деле, такие хаки не нужны, хотя ... - RomanSt


Не все эти варианты работали для меня. Я запускаю старую систему AIX. Мне пришлось добавить следующие псевдонимы в мой .profile

alias __A=$(print '\0020') # ^P = up = previous command
alias __B=$(print '\0016') # ^N = down = next command
alias __C=$(print '\0006') # ^F = right = forward a character
alias __D=$(print '\0002') # ^B = left = back a character

2
2018-01-22 22:22



не работает для меня, облом - Herman Toothrot


Я не мог заставить его работать с другими методами. Однако я создал этот скрипт AutoHotkey, который работает, если ваша оболочка Bash:

#IfWinActive ahk_class PuTTY
PgUp::Send +{PgUp}
PgDn::Send +{PgDn}
Home::Send ^a   ; beginning of line
End::Send ^e    ; end of line
+^Del::Send ^k  ; delete whole line after cursor
+End::Send ^k   ; delete whole line after cursor
+Home::Send ^u  ; delete whole line before cursor
^Del::Send !d   ; delete word after cursor
^BS::Send ^w    ; delete word before cursor
^Left::Send !b  ; jump word left
^Right::Send !f ; jump word right
#IfWinActive

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


1
2018-04-01 20:41



Это будет связано с основной причиной, по которой я смотрю на это: screen, который с настройками по умолчанию разбивает Ctrl-A, потому что он использует его как escape-символ .... - Gert van den Berg