如何暂时禁用终端中的 Escape 键?

如何暂时禁用终端中的 Escape 键?

我正在解析键盘输入read -n 1,但还没有找到一种方法来区分按键的实际按键Escape和由其他按键生成的控制序列的第一个转义字符(字节),例如。LEFT, RIGHT...

Escape我在 期间不需要密钥read,因此禁用它应该可以解决问题。是否有某种方法可以Escape以本地化方式禁用或重新分配密钥? ...仅适用于当前终端和当前脚本。

答案1

无法从终端内部执行此操作。不幸的是,同一个ESC字符既可以用作键盘上特定键发送的字符,也可以用作多字符序列中的前缀。双方的历史先例都太强大了,无法被压倒。

应用程序要么避免单独赋予含义Esc,要么设置延迟(1 秒很常见)。例如,在vim中,进入插入模式并ESC O D快速按下;这相当于按下该Left键。但是,如果您在按 后等待太久Esc,您将切换到正常模式并在当前模式上方插入一行(O正常模式命令)。

您也许可以重新配置终端模拟器,以便按键发送( ) 字符Esc以外的一些转义序列。但如果您运行密集使用密钥的应用程序(例如 vi(m)),这可能会适得其反。ESC\eESC

答案2

如果您使用的是 Mac,那么我可以衷心推荐以下一对工具:

  • PC键盘黑客,一个将密钥重新映射到其他任何东西的实用程序caps lock
  • 按键重映射4MacBook,同一黑客的另一个(更复杂的)实用程序可以重新映射几乎所有其他关键(即不是caps lock

结合起来,我重新映射caps lockEsc,并完全禁用实际的Esc键(到目前为止它“在那里”,并且使用我重新映射的大写锁定键是一个更好的习惯。)

相关内容