Як налаштувати 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.