2016-10-20 71 views
0

我可以用bash bind,手動給某個函數提供一個函數來預填一個\C-s查詢嗎?我希望我能做到預填充bash/readline增量搜索查詢?

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

但只是搜索的準確(未展開)$(echo "$FOO")

回答

1

readline不支持在宏中評估shell表達式,但有一種解決方法。引入兩個輔助鍵序列綁定,以便

  1. 第一個執行具有固定查詢字符串的向前搜索歷史記錄操作。
  2. 第二個配置第一個,通過將所述固定查詢字符串設置爲bash變量的值或某些bash函數的輸出。

你所需的鍵序列必須調用隨後通過2 1.

下面是一個實際實現上述思想的,利用輔助鍵序列"\e\C-o""\e\C-p"(如果使用的是那些用於其他目的,不要忘記用未使用的按鍵序列替換它們):

$ 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