
数日前に使用できることがわかりました。
"\ej": history-search-backward
"\ek": history-search-forward
矢印キーを使用したくない場合。これで魅力的に動作している間、.inputrcの詳細を学ぶためにbashドキュメントを読み始めました。このページを見てください(特にキーバインディングのあるセクション)。 https://www.gnu.org/software/bash/manual/html_node/Readline-Init-File-Syntax.html#Readline-Init-File-Syntax \e は「エスケープ文字」として知られています。英語が私の母国語ではありませんが、これがAltをマッピングするために使用できるとは決して考えません。これはドキュメントと私が取り組んでいるプロジェクトです。私にとって、それは説明的ではなく実証的です。問題は、他の人が最初に見つけてヒントを提供できるように、このコンテンツが実際にどこに記録されているかということです。
答え1
Alt
Escape
(ASCII 033、)のキーマッピングは"\e"
ターミナルエミュレータによって行われ、readlineライブラリ(処理~/.inputrc
)は含まれていません。
問題は、端末で実行されているプログラムに実際のキーイベントを送信する方法がないことです。ターミナルはこれをプログラムがttyで読み取ることができる一連のバイトに変換します。
Alt/Meta キーの場合、次の 2 つの方法でこれを行うことができます。
これをEscape(ASCII 033/0x1b)にマップします。押すと
Alt-K
実際に送信されます"\ek"
。Alt-Shift-K
"\eK"
これはほとんどの端末エミュレータのデフォルト設定ですが、設定可能な場合が多く、まだ設定していない場合はデフォルトに設定する必要がある十分な理由があります。キーのASCII値の上位7ビットをオンにします。キーを押すと、
Alt-K
実際に対応する0x6b | 0x80 = 0xeb
バイトである0x6b
ASCII値が送信されます"k"
。
後者は"\M-k"
readlineバインディングで認識されます。
もちろんいいえen_US.UTF-8
すべてのマルチバイトロケール(ほとんどの最新システムのデフォルト)で動作し、正しく機能しません。これらのシステムでは、ターミナルエミュレータは生の0xeb
バイト(有効なUTF-8シーケンスではなくバイナリゴミ)を送信できませんが、ISO-8859-1からUTF-8に変換"\xc3\xab" = "ë"
できe
ますAlt-K
。押すと送信されます。
しかし readline は、などのような数多くのオプションを"ë"
いくら操作しても再マッピングする方法がわかりません。"\M-k"
convert-meta
enable-meta-key
input-meta
そうすることができても、人々が実際に入力したいと思うように、関係のないものとして扱われるキーを認識しないので、まだ問題があるかもしれませ"ë"
ん"ó"
。Alt-K
Alt-S
答え2
\e
あなたはそれを見つける必要がありますこれESC
代わりにエスケープ文字(そのうちの1つだけが文字コード27が頻繁に作成されることを意味します)一つエスケープ文字(複数の文字のいずれかを表す)
この場合、文書はESC文字を2つ書き込むこと\e
ができるようにESC文字のインスタンスを表すと言っているようです。\e\e
ALTを意味しません。