2016-10-20 4 views
0

私はbash bindで、何らかの関数によって与えられた文字列を手に入れて\C-sというクエリを埋めてもいいですか?私は事前入力bash/readlineインクリメンタル検索クエリ?

bind '"\e\C-i": "\C-s$(echo "$FOO")\C-j"' 

を行うことができ期待していたが、それは単に正確な(拡張されていない)$(echo "$FOO")を検索します。

答えて

1

readlineは、マクロのシェル式の評価をサポートしていませんが、回避策があります。

  1. 2つの補助キーシーケンスバインディングを導入します。最初のものは、固定クエリ文字列で前方検索履歴操作を実行します。
  2. 上記の固定クエリ文字列をbash変数の値またはいくつかのbash関数の出力に設定して、最初のものを設定します。あなたの目的のキーシーケンスは、以下のは、あなたが他の目的のためにそれらを使用している場合は、(ドンを補助キーシーケンス"\e\C-o""\e\C-p"を使用して、上記のアイデアの実際の実装である1

    続く2を呼び出す必要があります

未使用のキーシーケンスで置き換えることを忘れないでください):

$ setup_fixedfwdsearchhistory_binding() { bind '"\e\C-o":"\C-s'"$FOO"'\C-j"'; } 
$ bind -x '"\e\C-p": setup_fixedfwdsearchhistory_binding' 
$ bind '"\e\C-i": "\e\C-p\e\C-o"' 
+0

ありがとう!素敵なハック:-) – unhammer

関連する問題