web-dev-qa-db-ja.com

Korn Shell:End、pgup、pgdown、およびDeleteキーが機能しない

だから基本的に私の End、 Pageup/Pagedown、および Delete キーがksh93で機能していません。ちなみに私はFreeBSDを実行しています。

矢印キーが機能しているので、ホームキーも機能しています。

これらのキーは、これを.kshrcに入れると機能します

set -o emacs

これを.kshrcに入れて、 [〜#〜] this [〜#〜] を実行してみました。作るために End キーワーク。

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

私はvimを開いて押しました Ctrlv、および入力 5。そして、^Eが現れました。それでも、何も機能しませんでした。

とにかくそれらの鍵を機能させる方法を知っている人はいますか?

また、これらのキーを押すと、~が出力されます。私も使用できることを知っています Ctrld、または Ctrla、私はこれらを使いたくありません。

8
shix

その答え は特定のターミナルエミュレータに固有であり、Solarisの外部で一般化できるとは思いません。

Kshで、を押します Ctrl+V その後 End。これにより、リテラルのエスケープ文字が挿入され、その後にキーが送信する残りのエスケープシーケンスが挿入されます。たとえば、^[[4~が表示される場合があります(最初の^[は実際にはエスケープ文字であり、^の後に[が続きます)。再構成する他のカーソルキーについても同じようにします。

.kshrcで、 KEYBD trap を設定して、ファンクションキーからのエスケープシーケンスを、キーで呼び出すコマンドのバインディングに変換します。たとえば(エスケープシーケンスを調整する必要がある場合があります。$'…',\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