有没有办法定义 bash readline 命令?

有没有办法定义 bash readline 命令?

我找不到办法做到这一点巴什。那么有没有办法定义 bash readline 快捷方式,在光标位置插入动态生成的字符串?

例如,我想插入日期:

bind '"\C-xx": my-dynamical-date'

aaa  bbb
--------
    ^ cursor is here

# After pressing "\C-xx":

aaa Sun Apr 22 22:19:00 CST 2018 bbb
------------------------------------
                                ^ cursor is here

那么如何定义 my-dynamical-date readline 命令呢?

答案1

有点傻,但可能是这样的:

bind '"\C-xx":"$(date) \e\C-e\ef\ef\ef\ef\ef"'

它首先输入一个文字$(date),然后调用shell-expand-line ,然后向前移动 5 个单词。

要保存键绑定,请将以下内容添加到inputrc

"\C-xx":"$(date) \e\C-e\ef\ef\ef\ef\ef"

答案2

您可以编写一个函数来编辑 readline 变量READLINE_POINTREADLINE_LINE。例如,在您的中设置.bashrc

_myinsert() { # add date at point
    local TOADD=$(date)
    READLINE_LINE="${READLINE_LINE:0:$READLINE_POINT}${TOADD}${READLINE_LINE:$READLINE_POINT}"
    READLINE_POINT=$(($READLINE_POINT + ${#TOADD}))
}
# cannot put this in ~/.inputrc
bind -x '"\C-xx":_myinsert'

这使用-x绑定选项来调用您的函数。我不知道有什么方法可以将等效项放入~/.inputrc文件中。 (-x例如,您当然不能仅以 开头)。

相关内容