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