つまり、基本的に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。これにより、文字どおりのエスケープ文字が挿入され、その後にキーが送信するエスケープ シーケンスの残りが続きます。たとえば、^[[4~
(^[
先頭の は実際にはエスケープ文字であり、^
が続くわけではありません[
) と表示されます。再設定する他のカーソル キーについても同じ操作を行います。
で.kshrc
、KEYBDトラップファンクションキーのエスケープシーケンスを、キーで呼び出すコマンドのバインディングに変換します。たとえば、(エスケープシーケンスを調整する必要があるかもしれません。$'…',
\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