每当我按下转义键 (ESC) 时,bash 都会忽略我键入的下一个字符。这正常吗?这很烦人,因为我有一个习惯,在使用 vim 时重复按 escape 键,我用它从插入模式返回到正常模式。
为什么 bash 会有这样的行为以及如何将其关闭?
答案1
这是 ANSI 终端的正常/预期行为。
当您键入时,Esc终端开始处理最终的ANSI 转义序列(如果你继续打字[,然后A光标就会上升)。
因此,在Esc终端等待序列中的下一个字符后,如果它不属于已知序列,则它将停止处理,但是Esc您键入的两个字符和下一个字符都将丢失(它们是非法序列的一部分,因此被丢弃)。
怎么阻止呢?您可以做的一件事是通过例如timeout()
从程序调用来更改终端的字符间超时。看这:
在解释输入转义序列时,wgetch 在等待下一个字符时设置计时器。如果调用 notimeout(win, TRUE),则 wgetch 不会设置计时器。超时的目的是区分从功能键接收的序列和用户键入的序列。
答案2
检查您的 bashrc 文件并查找一行set -o vi
并更改为set -o emacs
是否仍然存在问题,并且您使用像 alacrity 这样的终端模拟器,它有自己内置的 vim 模式,您可能还需要更改模拟器配置。
编辑:这是最常见的设置方式,但如果您有一个 inputrc 文件,也可以用于设置 vi 模式,如果您有一个 inputrc 文件,则set editing-mode vi
如果该文件和行存在,则命令将存在,只需注释掉或删除该行。
答案3
按 escape 然后再按另一个键(在许多终端仿真器中)被处理为发送 Alt+Key 击键的替代方法。例如Esc,与+A相同。因此,按转义键后的第一次击键“丢失”并不罕见,因为它实际上没有丢失,但没有以您可能期望的方式发送。AltA