特にコマンドを入力するときに端末技術を向上させ、効率を高めたいと思います。たとえば、コマンドを入力するときにバックスペースを5回押すのではなく、カーソルの左側にある単語を削除したいとします。
私はこれがどのように機能するかをすでに知っています。端末アプリケーションは、たとえばキーボードショートカットをキャプチャし、Ctrl-backspace
特殊なキーコードをシェルに送信できます。シェルにはこのタイプの編集のための機能が組み込まれており、キーコードを認識して必要な操作を実行できます。私は正しく説明しましたか?
機能し、機能も素晴らしいですが、可能な項目のリストはどこで見つけることができますか?まさに今日、私はこれが0x1f
「取り消し」を意味することに気づきました。私はこれが可能であることを全く知らなかったし、それが好きです!他に何ができるか見たいのですが、何を探すべきかわかりません! 1時間半くらい試してからあきらめました。
私はデフォルトのZsh 5.8シェルであるMacosとiTerm2アプリケーションを使用しています。
答え1
これらのキーボードショートカットはシェルマニュアルに文書化されています。シェルがzshなので、この章をお読みください。「Zshラインエディタ」マニュアルでローカルで利用可能ですman zshzle
。
ControlキーとESCキーバインディングとキーボードキーの対応関係については、以下を参照してください。キーバインディングテーブル?そしてキーボード入力とテキスト出力はどのように機能しますか?いくつかの背景。具体的には、Ctrl+を押しVてからキーを押すと、送信されるエスケープシーケンスが表示されます。 Mac端末でデフォルトでOptionキーを押すとESCが送信され、その後にキーを押すと転送される内容(通常)が送信されます。
答え2
答えを見つけました。私が説明した機能はコマンドによって制御されますbindkey
。オプションなしでバインディングキーを実行すると、現在のバインディングが印刷されます。例は次のとおりです。
"^@" set-mark-command
"^A" beginning-of-line
"^B" backward-char
"^D" delete-char-or-list
"^E" end-of-line
"^F" forward-char
"^G" send-break
"^H" backward-delete-char
"^I" expand-or-complete
"^J" accept-line
"^K" kill-line
...
これが「キーバインディング」と呼ばれるかどうかわからなかったので、Googleで答えが見つかりませんでした。
可能性のリストがあるので、iTerm2を使用している人に実際に役に立つ答えを作成するためにこれを16進数に変換するだけです。