预填充bash / readline增量搜索查询?

时间:2016-10-20 08:43:01

标签: bash readline key-bindings

我可以使用bash bind提交一些函数给出的字符串来预先填充\C-s查询吗?我希望我能做到

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

但这只是搜索确切的(未展开的)$(echo "$FOO")

1 个答案:

答案 0 :(得分:1)

readline不支持在宏中评估shell表达式,但有一种解决方法。引入两个辅助键序列绑定,例如

  1. 第一个使用固定查询字符串执行转发搜索历史记录操作。
  2. 第二个配置第一个,通过将所述固定查询字符串设置为bash变量的值或某个bash函数的输出。
  3. 您所需的键序列必须调用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"'