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表示されました。それでも、何も機能しませんでした。

これらのキーを機能させる方法を誰か知っていますか?

また、これらのキーを押すたびに が出力されます~。 、 または も使用できることはわかっていますCtrldCtrla、これらは使用したくありません。

答え1

その答え特定の端末エミュレータに固有のものなので、Solaris 以外では一般化できないと思います。

ksh では、Ctrl+を押してVから を押しますEnd。これにより、文字どおりのエスケープ文字が挿入され、その後にキーが送信するエスケープ シーケンスの残りが続きます。たとえば、^[[4~(^[先頭の は実際にはエスケープ文字であり、^が続くわけではありません[) と表示されます。再設定する他のカーソル キーについても同じ操作を行います。

.kshrcKEYBDトラップファンクションキーのエスケープシーケンスを、キーで呼び出すコマンドのバインディングに変換します。たとえば、(エスケープシーケンスを調整する必要があるかもしれません。$'…',\e` 内の文字はエスケープ文字を意味することに注意してください)

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

関連情報