`\C-`と `\e'の代わりにALT(メタ)または他の制御キーをプレフィックスとして使用してReadlineキーバインディングを設定するにはどうすればよいですか?

`\C-`と `\e'の代わりにALT(メタ)または他の制御キーをプレフィックスとして使用してReadlineキーバインディングを設定するにはどうすればよいですか?

Control(\C-)またはEscape()をプレフィックスとして使用して\eReadlineキーバインディングを設定する例のみを見つけることができます。

私の場合、macOSではその\C-スペースが主キーバインディングで完全に埋められており、\eTouch BarがあるMacbookではそのスペースは実用的ではありません。

入力"\M-f": kill-word結果~/.inputrcは次のとおりです。

bind -P | grep -F "\M-"
kill-word can be found on "\e[3;5~" "\ed".

ただし、またはプレフィックスをkill-word使用して実行することはできません。 Readlineはこれを無視します。OptionCommandfn

この問題はmacOSに固有のものですか?どうすれば解決できますか?

また、キーバインディング(たとえば、より長いキーバインディングのプレフィックス)が実行される前に発生する「タイムアウト」をどのように制御できますか?

@add(@laktak):bind '"^[f": kill-word'機能しませんが、ƒ端末で生成されます。 ここに画像の説明を入力してください。

答え1

私はあなたが間違っているとは思わない。 Terminal.appに「Meta」に「Option」キーを使用するように指示します。ターミナル(+ ,)の環境設定に移動してプロフィールだから鍵盤[基本プロファイル]タブをクリックし、[オプションをメタキーとして使用]を選択します。

Terminal.appプロフィール→キーボード設定スクリーンショット

それ以外の場合、Option +キーは、+がOption生成fするのと同じ特殊文字を生成する基本的なmacOSアクション(ほとんどのキーマップから)を取得します。フック付きの小文字「f」スクリーンショットから(すべて参照ここ)。

存在するi 2学期, 私は左 Option キーが既に基本的に合理的な作業を行っていると思いますが、もし備えてこれを変更する方法は次のとおりです。

iTerm 2 オプションキーの動作

OptionをEscapeに再マップする場合は、システム環境設定のキーボード設定ウィンドウの下部近くにある「修飾子キー...」ボタンをクリックして実行できます。

macOSシステム設定キーボード準備パネル

次に、利用可能なオプションから必要に応じて再マッピングします。

macOS キーボード準備パネルで修飾子キーを再マッピングする

ControlキーがMacキーボード上の厄介な位置にあるため、Caps LockをControlに再マップできるように、新しいMacを使用して最初の5分でこの設定ウィンドウを開きました。

答え2

ユーティリティは次のとおりです。

showkey (1)          - examine the codes sent by the keyboard

しかし、これはmac-osではないようです...ここに「キーコード」があります...?

または、ctrl-V(qouted insert)と入力し、いくつかの特殊キーを入力します。 Bashは^[OPxtermキーと^[[[AF1キーを使ってコンソールに印刷します。

行変数を読む:

keyseq-timeout (500)

半分完了したシーケンスに使用されるタイムアウト。

その下には、キーをシンボルに変換する一種のキーマップファイルが必要です。これは/usr/share/kbd/keymaps/mac/Linuxから来たものです:

keycode 51 = Delete  Remove
        alt keycode 51 = Meta_Delete
        shift alt keycode 51 = Meta_Delete
        control keycode  51 = Remove
keycode 53 = Escape
        alt keycode 53 = Meta_Escape
        shift alt keycode 53 = Meta_Escape
keycode  54 = Control
keycode  55 = Alt         # Command/Apple key
keycode  56 = Shift
keycode  57 = Caps_Lock
keycode  58 = AltGr       # Alt/Option key

柔軟性が見えますか!メタ削除記号は殺害の単語になることができます…


バインディング '"^ [f":単語を削除する

またはctrl-Vの後にEscapeを入力する ^[必要があります。 1バイトは曲折記号と角括弧ではありません。\e


次のように言うのと同じです。 ^CはShift-6を押してからShift-cを押すのではなく、control-Cを意味します。シェルまたはvimでctrl-vを押してから、Escと入力してください^[。しかし、一歩後退すると、文字は一つだけです。 readlineのこれらのメタフラグオプションと一緒に複雑になることがあります...チェーン全体を説明します。

キーマップ「default.map」(スキャンコードと修飾子をキーシンボルに変換)

keycode 105 = Left F150 F151
  string F150 = "\033[150"
  string F151 = "\033[151"
keycode 106 = Right F154 F155
  string F154 = "\033[154"
  string F155 = "\033[155"

デフォルトでは、「左」の後ろのF150とF151は、ShiftとCtrlの左矢印を表します。 2番目のステップでは、文字列(この場合はエスケープシーケンス)を定義します。ここでは\e動作しませんが、8進数033はascii 27で、control- [はEscapeです。このキーマップはLinux専用ですが、X Windowsにも同様のロジックがあります。

.inputrcから:

"\e[150": backward-word 
"\e[151": shell-backward-word 
"\e[154": forward-word 
"\e[155": shell-forward-word 

これはLinuxコンソールで非常にうまく機能します。 X Windows(Xorg)のxtermでは:まったくなし:Xorg自体がキーを検索します。

backward-word can be invoked via "\e[150", "\e[1;2D", "\e[1;3D", "\eb".

中央の2つのセミコロンは、VTxxxスタイルで装飾された左矢印です。これは事前設定されており、backward-word自動的にバインドされます。

答え3

あなたの質問を正しく理解した場合:

bind '"^[f": kill-word'

Option+F呼び出しを定義しますkill-word

答え4

別のオプションは、ボタンをEscクリックした後にd同じキーバインディングをシミュレートすることです。

前のコマンドの最後の引数()を貼り付けるのと同じです。最初にクリックしてからもう一度クリックして置き換えることができますM-.Esc.

MacBookのTouch Barバージョンを使用するためにCaps Lock ⇪再マップしました。⎋ Escape

Caps Lockの再マッピング

関連情報