我想用 bash / readline 绑定一个键,以清除控制台屏幕的底部。
清除屏幕底部的 ANSI 序列是\e[J
,所以我尝试将以下行添加到我的.inputrc
,但它不起作用,它只是忽略了三个字符:
Control-N: "\e[J"
如果我在字符串中添加一些测试字符:
Control-N: "BEFORE \e[J AFTER"
,然后插入字符串BEFORE
并停在那里。
目前,我找到了这个解决方法,但它显然显示了带有echo
命令的一行,而我不想要它:
Control-N: "echo -ne \"\\e[J\"\n"
是否可以通过绑定发送 ANSI 序列readline
?
答案1
答案2
通过稍微改进echo
命令内部.inputrc
命令的使用,如果最终得到了我想要的结果:
我将以下 func 放入我的 中.bashrc
,并特意为该 func 选择了一个短名称:
cbs()
{
echo -ne '\e[J\e[F\e[2K'
history -d $(history 1)
}
它使用 ANSI 序列清除屏幕底部 ( \\e[J
),然后将光标移回到原来所在的同一行 ( \\e[F
),最后清除插入命令的行 ( \\e[2K
)。
该命令也被直接从 bash 历史记录中删除,以免污染它。
命令的简短名称很重要,因为如果该行在太小的控制台窗口中换行,则该技巧将无法正常工作。
然后我Ctrl-N相应地绑定.inputrc
:
Control-N: "cbs\n"