如何将历史记录中的整个命令插入到 Bash 中的当前命令中?

如何将历史记录中的整个命令插入到 Bash 中的当前命令中?

如何将历史记录中的整个命令插入到 Bash 中的当前命令中?

我做了一些研究并确定了两个 GNU Readline 键绑定,它们将插入上一个命令的第一个和最后一个单词。不幸的是,我不知道如何为这些键绑定提供参数n(如何?),即使我知道,从历史记录中插入长命令也是不可行的。

Ctrl-Alt-y

将第一个参数插入到上一个命令中。使用参数 n,插入上一个命令中的第 n 个单词。

Alt-.
Alt-_

将最后一个参数插入到上一个命令中。使用参数 n,插入上一个命令中的第 n 个单词。

GNU Readline 是否支持将历史记录中的整个命令插入到当前命令中?

免责声明:我不是在寻找 Bash 命令替换。

答案1

输入所需的历史扩展(例如!foo!39)并展开它

history-expand-line (M-^)
在当前行执行历史扩展。

元将是Alt,IIRC。

答案2

您可以自己创建绑定。您只需决定将其绑定到哪个键即可。示例为Ctrl-T

insert_last_line(){
     local l=$READLINE_LINE p=READLINE_POINT h=$(fc -nl -0)
     READLINE_LINE=${l:0:p}${h#* }${l:p}
}
bind -x '"\C-T": insert_last_line'

让它在重复时插入以前的条目是留给读者的练习;-)

相关内容