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, я не хочу использовать их.

Ответы:


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 Извините, теперь была исправлена ​​опечатка (дополнительные скобки в каждой строке).
Жиль "ТАК - перестань быть злым"

Вот Это Да! Огромное спасибо. У меня была эта проблема некоторое время.
Шикс
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.