Fish 中的插入/覆盖模式

Fish 中的插入/覆盖模式

我在 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,它们被组织起来以避免与现有控制序列混淆,例如,通过在简单程序忽略它们的地方添加参数。

进一步阅读:

相关内容