Korn Shell: не работает ключ end, pgup, pgdown и delete

8

Так что в основном мои End, Pageup/ Pagedown, и Deleteключ не работают в ksh93. Кстати, я использую FreeBSD.

Мои клавиши со стрелками работают, как и моя домашняя клавиша.

Эти ключи работают, когда я помещаю это в мой .kshrc

set -o emacs

Я пытался делать ЭТО , помещая это в моей .kshrc. Чтобы Endключ работал.

alias __Y=`echo "\005"`     # end = ^e = end of line

Я открыл vim, нажал Ctrlvи набрал 005. И тот ^Eпоявился. Тем не менее, ничего не сработало.

Кто-нибудь знает, как заставить эти ключи работать?

Кроме того, когда я нажимаю эти клавиши, он печатает ~. Я также знаю, что я мог бы использовать Ctrld, или Ctrla, я не хочу использовать их.

shix
источник

Ответы:

7

Этот ответ специфичен для определенных терминальных эмуляторов, я не думаю, что его можно обобщить за пределами Solaris.

В ksh нажмите Ctrl+ Vпотом End. Это вставит буквенный escape-символ, за которым следует остальная часть escape-последовательности, которую посылает ключ. Например, вы можете увидеть ^[[4~( ^[в начале это символ перехода, ^за которым не следует [). Сделайте то же самое для других клавиш курсора, которые вы хотите перенастроить.

В вашей .kshrc, установите ловушку KEYBD для преобразования escape-последовательностей из функциональных клавиш в привязки для команд, которые вы хотите, чтобы клавиша вызывала. Например (вам может понадобиться настроить escape-последовательности - обратите внимание, что внутри $'…',\ e` означает escape-символ):

keybd_trap () {
  case ${.sh.edchar} in
    $'\e[1~') .sh.edchar=$'\001';; # Home = beginning-of-line
    $'\e[4~') .sh.edchar=$'\005';; # End = end-of-line
    $'\e[5~') .sh.edchar=$'\e>';; # PgUp = history-previous
    $'\e[6~') .sh.edchar=$'\e<';; # PgDn = history-next
    $'\e[3~') .sh.edchar=$'\004';; # Delete = delete-char
  esac
}
trap keybd_trap KEYBD
set -o emacs
Жиль "ТАК - перестань быть злым"
источник
Спасибо вам за помощь. Но теперь я получаю сообщение об ошибке .kshrc: строка 6: синтаксическая ошибка: ')' неожиданно
shix
Прямо там, где keybd_trap () {часть.
Шикс
1
@shix Извините, теперь была исправлена ​​опечатка (дополнительные скобки в каждой строке).
Жиль "ТАК - перестань быть злым"
Вот Это Да! Огромное спасибо. У меня была эта проблема некоторое время.
Шикс