我找不到办法做到这一点巴什。那么有没有办法定义 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_POINT
和READLINE_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
例如,您当然不能仅以 开头)。