Korn Shell: клавиши End, pgup, pgdown и delete не работают

Korn Shell: клавиши End, pgup, pgdown и delete не работают

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

Мои клавиши со стрелками работают, как и клавиша «Домой».

Эти клавиши работают, когда я кладу это в свой.kshrc

set -o emacs

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

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

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

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

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

решение1

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

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

В вашем .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

Связанный контент