Readlineライブラリは.inputrcファイルをどのように使用しますか?

Readlineライブラリは.inputrcファイルをどのように使用しますか?

彼のLinux実用ガイド、4e、Sobelは次のような部分を提供します。

$ cat ~/.inputrc 
set editing-mode vi 
$if mode=vi
      "\C-y": vi-next-word
   $else
      "\C-y": forward-word
$endif

このコードスニペットは、bashがviモードでもemacsモードにかかわらず、CONTROL-Yにカーソルを次の単語の先頭に移動させるように見えます。

私が混乱しているのは、このコードスニペットを使用してEmacsモードに入る方法です。私の現在の理解は次のとおりです。

  1. Readlineライブラリでいくつかの要素/ショートカット/トークン(用語がわかりません)を使用すると、bashはinput.rcを検索して何を意味するのかを確認します。

  2. 1)がtrueの場合(おそらくそうではなく、input.rcは新しいシェルを初期化するためにのみ使用されますが、この場合、$else上記のセクションが決して到着しないため、なぜ関連があるのか​​理解できませんか?set -o emacs)コマンドラインの指定された項目で前方スキップを使用すると、CONTROL-Yinput.rcを読み取らずに何かに切り替えることができますかediting-mode = vi

答え1

ほぼ当たったと思います。

set editing-modeどの Readline モードが使用されるかを決定します。基本的に。ただし、bashいつでもモードを切り替えることができます。 Readlineを使用する他のアプリケーションもそうすることができます。

キーを押すたびに実際のファイルを読むことは.inputrc非効率的であるため、実際に何が起こるのかはおそらく次のようになります。

プログラムがReadlineライブラリを初期化すると、ライブラリはこのファイルを.inputrc読み取り、必要な設定を準備します。2つのモードset editing-modeどのモードがユーザーに最初に表示されるかはすぐに決定されますが、ユーザーが後でモードを切り替えたい場合は、両方のモードが設定されます。

条件がない場合、可能な場合はキーバインディングが両方のモードに適用されます。$if mode=条件付き構文を使用すると、キーバインディングを特定のモードにのみ適用できます。

他の条件付き構成もあります。$if term=現在の端末が特定の種類の場合にのみキーバインディングを設定でき$if application=ます.inputrc

関連情報