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

123

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

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

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

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

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

RomanSt
источник

Ответы:

150

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

введите описание изображения здесь

Der Hochstapler
источник
2
Спасибо! У меня была эта проблема после того, как я попытался заставить работать Ctrl влево / вправо, используя этот метод ( superuser.com/a/103097/45410 ).
Эдвин Ип
4
Акцент: не Terminal -> Keyboard«Функциональные клавиши и клавиатура».
Элазар
2
Это работает, но создает другие проблемы, такие как отключение поддержки мыши. так что это не приемлемое для меня решение
Антон
Это решение также позволяет umlauts внутри замазки при подключении к OS X!
Lorem Monkey
42

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

В системах Debian основы, тот Ncurses срок пакет (версия 5.7 + 20081213-1) включает в себя Terminfo файлов определения для шпаклевки , замазки-256 - цветных и шпатлевка-VT100 типов терминалов. Если у вас установлен этот пакет, вы можете установить "строку типа терминала" в "putty" вместо значения по умолчанию "xterm" в конфигурации сеанса Putty (Соединение -> Данные).

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

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

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

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

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

^[[1~

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

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

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

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

"\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: Более привязываемые команды (например, предыдущая история: Переместить «вверх» по списку истории) доступны на этой странице ссылок .

Дэмиен Гарридо
источник
ДА ! В заключение ! Строка терминала типа Putty ничего не сделала для обратного слова и прямого слова. Это здорово !
Цимбали
1
Это единственное приемлемое решение, потому что TERM=linuxили TERM=puttyнарушить поддержку мыши как у xterm. Спасибо!
Антон
14

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

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

Iain
источник
13
Это здорово, и все, но Home / End запрограммированы в моем мозгу, и, поскольку я управляю сервером только один раз в синюю луну, шансы отучить аппаратное соединение невелики.
RomanSt
9

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

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

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

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

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

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

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

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

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