Readline .inputrc は各行をデフォルト値にリセットします。

Readline .inputrc は各行をデフォルト値にリセットします。

Bashコマンドラインからキーを再マップしようとしています。次のように単純化された.inputrcファイルがあります。

"\C-w": forward-word

他の設定もありますが、質問を明確にするために1に減らしました。

シェルのすべての新しい行で、Cwはデフォルトのバインディングにリセットされますunix-word-rubout。行を編集すると、Cx Crを使用して.inputrcファイルを再読み込みでき、Cwは私が割り当てたCwタスクを実行しますforward-word。その後、bashの次の行でリセットされますunix-word-rubout

走れば

> bind -P | grep C-w

わかりました。

unix-word-rubout can be found on "\C-w".

しかし、私が走ったら

> bind -P | grep C-w 

その後、Enterキーを押す前にCx Crで.inputrcを再ロードすると、次の結果が表示されます。

forward-word can be found on "\C-w", "\ef".

だから私は.inputrcをうまくロードでき、bashもそれを認識します。ただし、すべての新しい行ごとにデフォルト設定を再読み込みします。

JLine、Java Readlineレプリカは問題なく予想通りに私の.inputrcを使用します。

私はOS / X Yosemiteでbashを実行しています。私はHomebrewバージョン4.4.12を実行していますが、Appleバージョン3.2.57(2007年以降)もまったく同じように動作します。 Terminal.appとiTerm2でも同じように動作します。

私の設定をすべての行に適用したいです。どうやって維持できますか?

答え1

問題は、シリアル通信もいくつかのキーを定義することです。
使用:

$ stty -a
speed 38400 baud; … …
swtch = <undef>; start = ^Q; stop = ^S; … … werase = ^W; …
-parenb …

システム設定に応じて、以下が表示されます。

werase = ^W

これはword-ruboutのstty定義ですctrl W

ただ実行してください:

stty werase undef

undefそのようなキーの作成はコントローラによって異なりますssty
端末が利用できなくなる可能性があるため、変更を慎重に選択してください。

readlineその後、キーは bash シェルで使用できるようにシステムに再配布されます。

変更()を維持するには、forstty werase undefに入れることができます。/etc/profileみんなこのファイルを使用するシェル(ほぼすべて)。すべてのbashシェルまたは「このユーザー」対話型シェル/etc/bash.bashrcに適用されます。~/.bashrc

関連情報