ターミナルショートカットをCTRL-Mから別の組み合わせにマッピングする方法

ターミナルショートカットをCTRL-Mから別の組み合わせにマッピングする方法

別の投稿で、ターミナルで キーの代わりにCtrlJまたは を入力できると読みましたが、これは素晴らしいことです。しかし、私がやりたいのは、これを別の組み合わせ、たとえば に変更することです。キーの再マッピングを試みましたが、うまくいきませんでした。CtrlMReturnCtrlspacebarF1

これは可能ですか?

答え1

具体的に何をしたいかによります。

端末には 2 つの主要モードがあり、どちらも追加設定で微調整できます。

  1. クックド/カノニカル モード。このモードでは、端末には内部行エディタが付属しており、^H(または^?)、、^W(^Uまたは@)、^V(または\) 文字を使用して行を編集できます。文字が受信されるまで、端末デバイスから読み取るアプリケーションには何も送信されません^J
  2. モードでは、入力された文字はすぐに端末デバイスを読み取るアプリケーションに読み取られるか、遅延後、または入力された文字数に応じて一定数入力された後に読み取られます。時間そしてパラメータですが、いずれにしても、その内部行エディタではそうではありません。

どちらの場合も、^M(CR) 文字は自動的に (LF) に変換されます^J(または、Enter キーを押すと CR と LF の両方を送信する端末の場合は無視されます)。

最初のモードは、ターミナルのデフォルト モードです。2 番目のモードは、行編集を制御するzshbashまたはなどのアプリケーションによって使用されます。vi

最初のモードでは、行を受け入れるために使用される文字を変更することはできません。

しかし、このキーやあのキーを押すと端末に^J文字を送信するように指示できるかもしれません。たとえば、 ではxterm、X11 リソースを使用してtranslationsキーマッピングを変更し、特定のキーを押すと任意の文字を送信するように指示できます。端末がキーボードの再マッピングをサポートしていない場合でも、GNU を使用して変換を行うことができます。たとえば、を押すとscreen端末が文字シーケンスを送信する場合は、^[OPF1

bindkey \033OP "\012"

~/screenrc押すとLFを送信するように指示しますF1

2番目のケース、つまりアプリケーションが入力を制御する場合、上記と同じアプローチを使用できますが、各アプリケーションが、押すたびにこれを実行するように設定することもできます。F1

たとえば、 ではzsh、LF 文字がウィジェットにバインドされますaccept-line zsh。次のように実行できます。

bindkey "^[OA" accept-line

F1同じウィジェットにバインドします。

通常は、またはCtrl+Spaceとして参照できる NUL 文字を送信することに注意してください。\0^@

関連情報