我在 MacBook 上使用 Linux Mint,在其键盘上,相当于 INSERT 键的组合是Fn + RETURN
。
目前我只能在 GNU-Emacs 中看到这个组合的预期行为:在那里,覆盖模式绑定到<insertchar>
和<insert>
。
例如,在网络浏览器中它没有效果。在 Linux 终端以及我尝试过的任何终端仿真器(例如 konsole、xterm)内,转义序列[2~
都被打印到屏幕上,而不是切换到插入模式。
因为我认为它是一个有用的东西,所以我想让它发挥作用。有谁知道,在哪里可以解决这个问题?
顺便说一句:Fn + Backspace
,代表"DELETE"
在上述应用程序中工作得很好。
顺便说一句,没有。 2:我用的是鱼壳。在 bash shell 中,不会打印转义序列,但组合键也不起作用。
答案1
终端模拟器无法自行编辑文本,因此此级别不存在插入模式与覆盖模式的概念。
它们只是将按键发送到正在运行的应用程序(通过内核的 tty 驱动程序),并接收(再次通过内核 tty 驱动程序)并解释来自应用程序的数据并相应地更新屏幕。
对于 Insert 键,正确的操作确实是发送\e[2~
转义序列。
由应用程序(fish/bash/etc. shell、emacs/etc. 文本编辑器等)来解释它并在插入和覆盖模式之间切换(如果它们实现后者)。
答案2
终端仿真器具有用于在屏幕上插入和删除字符(和行)的控制序列。但是当你运行一个应用程序时(无论是壳或一个文本编辑器),您可以输入的控制序列通常是不是回显到终端。应用程序读取这些特殊键并决定将哪些控制序列发送到终端。效果(插入、删除——以及重打)只是一个图片应用程序的功能。真实数据位于应用程序的内存(或数据文件)中。
大多数终端都有特殊键(例如Insert),可以通过习俗发送与类似名称的控制序列匹配的字符(将被发送到终点站)。那是因为原本,本地模式是人们使用的东西。
任何兼容 ANSI 的终端都可以运行当地的模式(忽略一些不相关的破坏了此功能的模式)。这就是所谓的发送/接收模式SRM
标准中的( )。在较旧的终端中,您可能必须考虑另一种模式插入。在里面术语信息(5)提到的手册页:
move_insert_mode mir mi safe to move while
in insert mode
撇开约定不谈,并非所有终端都使其特殊键与控制序列相匹配。例如,
- 和
rxvt
,插入键可能会发送escape[2~
,而插入字符控制序列是escape[@and (对于多个字符),插入模式是escape[4m - 修改的特殊键(例如controlInsert)可能不会发送匹配的字符任何控制序列。使用 xterm,它们被组织起来以避免与现有控制序列混淆,例如,通过在简单程序忽略它们的地方添加参数。
进一步阅读:
- ECMA-48:编码字符集的控制函数
- 插入/删除字符(术语信息手册页)