我想写一个命令/函数,在终端提示符中预先填入部分命令或文本。我需要给我的git commit消息加上前缀,我想如果我能在提示符中预先填入部分命令,而不是总是需要重复输入同样的内容,这对我的git commit消息会很有用。
> gencommit
> git commit -m "ABC-123:
在上面的代码片段中,git commit -m "ABC-123:
被放在命令行上,我只需添加一个提交消息并执行该命令。echo
是我唯一想到的东西,但这并不符合我的要求,如果gencommit
使用了echo,它将看起来像这样。
> gencommit
git commit -m "ABC-123:
>
1条答案
按热度按时间piztneat1#
据我所知,
bash
没有提供任何通过编程方式 * 写入 * Readline缓冲区的方法。(顺便提一下,zsh
提供了这种方法。)一种替代方法是将gencommit
作为Readline宏。例如,将以下内容添加到您的.inputrc
文件中(如果需要,创建该文件):他的方法有一点让我感到不安,因为宏是文本,会立即被替换,所以Readline在确定您键入的宏之前,不会将您键入的文本显示在屏幕上,所以当您键入
gencommit
时,屏幕上什么也不会显示,直到您完成键入,然后扩展文本才会出现。更糟糕的是,如果您在键入时出错,您必须取消该命令并重新开始。最好是定义一个别名
在命令行中键入
gencommit
之后,使用shell-expand-line
Readline函数(默认情况下绑定到M-!
;M
是 meta键,可以是Alt或Esc,具体取决于您的平台和终端仿真器设置),将其展开为替换文本。(这将尝试展开命令行上的 anything:别名、参数、历史扩展等。有一个专用的alias-expand-line
函数 * 仅 * 扩展别名,但默认情况下它是未绑定的。如果您愿意,我将其作为练习将此命令绑定到未使用的键序列。)正如我提到的
zsh
,该shell中的命令将简单地为