it-swarm-ru.tech

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

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

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

Вопрос изначально читал:

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

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

118
RomanSt

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

enter image description here

145
Stephen Irons

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

В системах на основе Debian пакет ncurses-term (версия 5.7 + 20081213-1) включает файлы определений terminfo для PuTTY , PuTTY-256color и PuTTY-vt100 терминал типы. Если у вас установлен этот пакет, вы можете установить «Строка типа терминала» в «PuTTY» вместо «xterm» по умолчанию в конфигурации сеанса PuTTY (Соединение -> Данные).

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

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

42
quack quixote

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

Например, на моем ящике нажатие клавиши Home сгенерирует следующую строку на моем терминале:

^[[1~

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

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

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

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

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

К вашему сведению, мой файл 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: более привязываемые команды (например, предыдущая история: перемещаться "вверх" по списку истории) доступны на этой странице ссылки .

19
Damien Garrido

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

Вот список сочетаний клавиш Bash

14
Iain

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

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

Вы можете увидеть это, нажав Ctrl+V затем Home,.

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

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

9
Dennis Williamson

Ни один из этих вариантов не работал для меня. Я использую старую систему 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
TruCK

Я не мог заставить его работать с другими методами. Однако я создал этот скрипт 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
Ciantic