Як налаштувати PuTTY так, щоб Home / End / PgUp / PgDn працював належним чином у bash?


122

Клавіші Home, End, PageUp, PageDown всі наберіть ~в моєму сеансі баш, а не переміщуючи курсор / перегляд. Чому це відбувається і які параметри мені потрібно змінити?

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

Питання спочатку було прочитано:

Чому в PuTTY чому натискання клавіші "Головна" на оболонці (bash) вводить "~"? А точніше, як змусити його перемістити курсор на початок команди, яку я набрав?

(Я думав, що причина полягає в тому, що ~ домашній каталог, але у відповідях сказано, що це не так.)

Відповіді:


149

Змініть рядок типу термінала на вкладці З'єднання> Дані з "xterm" за замовчуванням на "linux". Це працювало для мене.

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


2
Дякую! У мене виникла ця проблема після того, як я намагався змусити Ctrl працювати зліва / справа за допомогою цього методу ( superuser.com/a/103097/45410 ).
— Едвін Іп

4
Акцент: не Terminal -> Keyboard"Функціональні клавіші та клавіатура".
— Елазар

2
Це працює, але створює інші проблеми, як відключення підтримки миші. значить, для мене це неприйнятне рішення
— Антон

Це рішення також дозволяє вмикати внутрішні шпаклівки під час підключення до OS X!
— мавпа lorem

42

Це відбувається тому, що тип терміналу PuTTY у вас неправильно встановлений або через те, що на вашому сервері не встановлені правильні визначення терміна.

У системах на базі Debian пакет ncurses-term (версія 5.7 + 20081213-1) включає файли визначення терміна для типів putty , putty-256color та терміналів putty-vt100 . Якщо у вас встановлений цей пакет, ви можете встановити "рядок типу терміналів" на "putty" замість типового "xterm" у налаштуваннях сеансу Putty (З'єднання -> Дані).

Стівен Айронс також згадує "linux" як інший тип терміналу, який працює; Я вважаю, що це правильно з попереднього досвіду, але останнім часом його не перевіряли.

У моїх системах це дозволяє Home and End працювати належним чином, хоча PageUp / PageDown не прокручують вікно консолі. (Вони працюють належним чином у ncurses додатках, таких як здатність , і Shift-PgUp / Shift-PgDn прокручують вікно консолі.)


Так, використання TERM=puttyабо TERM=putty-256colorнаймудріше, хоча, на жаль, наразі останній, здається, не підходить для кольорів 8-15 (які повинні бути яскравими версіями 0-7). Інші "рішення", ймовірно, іноді відшаровуються, коли вони ставляться до їх очевидного ігнорування відмінностей між задіяними терміналами.
— СамБ

yum install ncurses-termсортував його для мене на CentOS 7 із шпаклівкою при наступному вході, дякую.
— Блукаючі зомбі

1
налаштування типу терміналу puttyпрацює, але перерває підтримку миші, схожу на xterm (наприклад, для Midnight Commander)
— Антон,

встановлення 'ncurses-term' працювало для мене на тестуванні Debian.
— hochl

нічого з цього не працює для мене, я на шпаклівці, що підключається до centos, і не можу запустити yum встановити ncurses-термін, тому що я не root.
— Герман Зубний

20

Якщо ви хочете перевірити, який код надсилається PuTTY до вашого терміналу, коли ви натискаєте клавішу або комбінацію клавіш, вам просто потрібно видати Ctrl+Vклавішу a і натиснути потрібну клавішу.

Наприклад, у моєму вікні натискання клавіші « Головна » генерує наступний рядок на моєму терміналі:

^[[1~

Це означає, що PuTTY надсилає символ втечі ^ [, за яким слідує рядок [1 ~ .

Ви можете створити ~/.inputrcфайл у своїй $HOMEпапці або альтернативно - /etc/inputrcфайл залежно від вашої системи. Потім заповніть цей файл кодами PuTTY і відповідними Bash діями, які ви бажаєте запустити Bash.

Примітка. Замініть кожен ^ [ символ на еквівалентний рядок \ e

У своєму прикладі я додам рядок із кодом головного ключа та дією початку рядка (яка за замовчуванням прив’язана до Ctrl+ABash):

"\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: Більше команд, що зміщуються (як-от попередня історія: Переміщення "вгору" через список історії), доступних на цій довідковій сторінці .


ТАК ! Нарешті! Рядок термінального типу Putty нічого не зробив для зворотного слова та прямого слова. Це чудово !
— Cimbali

1
Це єдине прийнятне рішення, оскільки TERM=linuxабо TERM=puttyпорушується підтримка миші, схожа на xterm. Дякую!
— Антон

14

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

Ось список комбінацій клавіш Bash


13
Це чудово, і все, але Home / End - провідний мозок у моєму мозку, і оскільки я керую сервером лише один раз у синій місяць, шанси відкрутити проводку невеликі.
— RomanSt

9

Що насправді надсилає, це те, ^[[1~що є термінальною послідовністю відходу, що складається з:

  • ^ [- втеча
  • [- ліва квадратна дужка
  • 1 - один
  • ~ - тильда

Ви можете бачити це, натискаючи Ctrl+ і Vпотім Home.

Можливо, ви зможете виправити свою проблему, змінивши налаштування клавіатури PuTTY для клавіш Home та End на rxvt (що робить послідовність виходу ^[[Hабо зміну $ TERM, який ви використовуєте (або редагуючи ~/.inputrc).

До речі, між тильдом, який ви отримуєте при натисканні, немає Homeі тильдом, який представляє домашній каталог. Наприклад, у моїй установці Page-Downвиробляється, ^[[6~яка також надрукувала б тильду, якби вона не була правильно інтерпретована.


Дякую! rxvt зафіксував домашній ключ; тепер клавіша завершення створює динг. PgUp / Down дійсно вводяться ~, і жоден з параметрів клавіатури PuTTY не змушує їх працювати. Чи мій баш заплутався, чи це "нормально"?
— RomanSt

Що ви отримуєте під час введення echo $TERM?
— Денніс Вільямсон

xterm(15 символів обмежено argh)
— 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

не працює для мене,
— бампер

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

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


Це було б зіпсовано з основною причиною, на яку я дивлюся на це:, screenякий із налаштуваннями за замовчуванням розбиває Ctrl-A, оскільки він використовує його як символ втечі ....
— Герт ван ден Берг,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.