パテを使用してRed Hat Linuxサーバーに接続しています。 Linuxでは、私のシェルはKornシェルです。画面を消去するには、「Ctrl + l」の組み合わせを使用することに慣れています。このコンボがKshで動作しないいくつかの理由。 kshに「」と入力すると、ctrl + l
新しい行に移動します。
頑張った
alias "^L"=clear
それでも同じ結果です。
私も試しました
bind -m '^L'=clear'^J'
しかし、バインドコマンドが見つからないと思います。コンピュータに新しいものをインストールできません。
この問題を解決する方法を提案できますか?ありがとうございます。
答え1
Red Hatはコマンドなしの「ksh-93」を提供しますbind
。これは特殊機能によってトリガーされるKEYBD
名前を提供します。trap
マニュアルページによると、修正に使用できます。Emacs編集モード。
例は次の場所にあります。[Korn Shell] Home、End、pgup、pgdown、削除キーを修正^L
画面をきれいにする方法を示す便利な出発点です。デフォルトでは、metacontrolL(^[^L
)は画面消去機能にバインドされており、一般は^L
変更したい次の行です。
^L Line feed and print current line.
M-^L Clear the screen.
要求した内容を実行するには、例に1行を追加するだけです。
set -o emacs
keybd_trap () {
case ${.sh.edchar} in
$'\f') .sh.edchar=$'\e\f';; # clear-screen (THIS QUESTION)
$'\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
何らかの理由でviモードはksh
。
キーが実際に機能にどのようにマッピングされるかについてのドキュメントはあいまいです。この例では、機能はsrc/cmd/ksh93/edit/emacs.c
スイッチ/ケースステートメントの一部として実装されています。
#ifdef _cmd_tput
case cntl('L'): /* clear screen */
sh_trap("tput clear", 0);
draw(ep,REFRESH);
return(-1);
#endif
エスケープ機能(つまり、「メタ」処理)から。したがって、カスタマイズ可能な組み込みの動作です。
追加資料:
Q4.キーバインディングはどのように行われますか? A4。 ksh93 は、キーを押すたびに実行される KEYBD トラップを提供します。 キーボードで入力されます。この罠を使って共犯者 ksh93の配列機能は、キーバインディング機能を簡単に作成できます。 入力されたキーシーケンスを別のキーシーケンスにマッピングします。
- 10.3。カスタム編集モード(Korn Shellを学ぶ)