実際に記録された位置で、「\ e」は.inputrcのAltキーを表します。

実際に記録された位置で、「\ e」は.inputrcのAltキーを表します。

数日前に使用できることがわかりました。

"\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

AltEscape(ASCII 033、)のキーマッピングは"\e"ターミナルエミュレータによって行われ、readlineライブラリ(処理~/.inputrc)は含まれていません。

問題は、端末で実行されているプログラムに実際のキーイベントを送信する方法がないことです。ターミナルはこれをプログラムがttyで読み取ることができる一連のバイトに変換します。

Alt/Meta キーの場合、次の 2 つの方法でこれを行うことができます。

  1. これをEscape(ASCII 033/0x1b)にマップします。押すとAlt-K実際に送信されます"\ek"Alt-Shift-K "\eK"これはほとんどの端末エミュレータのデフォルト設定ですが、設定可能な場合が多く、まだ設定していない場合はデフォルトに設定する必要がある十分な理由があります。

  2. キーのASCII値の上位7ビットをオンにします。キーを押すと、Alt-K実際に対応する0x6b | 0x80 = 0xebバイトである0x6bASCII値が送信されます"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-metaenable-meta-keyinput-meta

そうすることができても、人々が実際に入力したいと思うように、関係のないものとして扱われるキーを認識しないので、まだ問題があるかもしれませ"ë""ó"Alt-KAlt-S

おすすめ記事