linux 如何使用命令或部分命令预填充终端提示符?

3bygqnnd  于 2022-11-22  发布在  Linux
关注(0)|答案(1)|浏览(169)

我想写一个命令/函数,在终端提示符中预先填入部分命令或文本。我需要给我的git commit消息加上前缀,我想如果我能在提示符中预先填入部分命令,而不是总是需要重复输入同样的内容,这对我的git commit消息会很有用。

> gencommit
> git commit -m "ABC-123:

在上面的代码片段中,git commit -m "ABC-123:被放在命令行上,我只需添加一个提交消息并执行该命令。
echo是我唯一想到的东西,但这并不符合我的要求,如果gencommit使用了echo,它将看起来像这样。

> gencommit
git commit -m "ABC-123:
>
piztneat

piztneat1#

据我所知,bash没有提供任何通过编程方式 * 写入 * Readline缓冲区的方法。(顺便提一下,zsh提供了这种方法。)一种替代方法是将gencommit作为Readline宏。例如,将以下内容添加到您的.inputrc文件中(如果需要,创建该文件):

"gencommit": "git commit -m \"ABC-123:"

他的方法有一点让我感到不安,因为宏是文本,会立即被替换,所以Readline在确定您键入的宏之前,不会将您键入的文本显示在屏幕上,所以当您键入gencommit时,屏幕上什么也不会显示,直到您完成键入,然后扩展文本才会出现。更糟糕的是,如果您在键入时出错,您必须取消该命令并重新开始。
最好是定义一个别名

alias gencommit='git commit -m "ABC-123:'

在命令行中键入gencommit之后,使用shell-expand-line Readline函数(默认情况下绑定到M-!; M是 meta键,可以是Alt或Esc,具体取决于您的平台和终端仿真器设置),将其展开为替换文本。(这将尝试展开命令行上的 anything:别名、参数、历史扩展等。有一个专用的alias-expand-line函数 * 仅 * 扩展别名,但默认情况下它是未绑定的。如果您愿意,我将其作为练习将此命令绑定到未使用的键序列。)
正如我提到的zsh,该shell中的命令将简单地为

print -z 'git commit -m "ABC-123:'

相关问题