为什么我需要按 Esc 两次才能取消 vim 搜索?

1 vim

我经常搜索一些东西,但在搜索过程中发现没有匹配项。要取消搜索,我必须按 Esc 两次。我已经删除了我的整个 .vimrc 文件以查看是什么插件导致了这种情况。奇怪的是,如果我没有 .vimrc 文件,我只需要按一次 Esc 键。即使我有一个空的 .vimrc 文件,我也需要按两次 Esc 键。

如果我安装了 haya14busa/incsearch.vim,我必须按 Esc 两次并等待一秒钟才能取消搜索。这很麻烦。

Mar*_*oij 7

最初,“终端”是您办公室中的物理设备,它由屏幕、键盘和一些非常基本的电路组成,用于通过(通常)串行线路进行通信。它将与一台大型“大型机”计算机通信,该计算机将接受来自数十甚至数百名用户的登录。现代“终端仿真器”(xterm、iterm 或您使用的任何东西)只不过是这些物理终端之一的软件仿真;以及这带来的所有限制。

终端与主机通信的唯一方式是通过这条串行线和键盘接口。这就是为什么 ASCII 字符集有 32 个所谓的“控制字符”来控制通信的各个方面和/或向主机发送特殊消息。这些控制代码是通过按住 Control 键并按下一个字母(因此该键的名称)来发送的。

您可能熟悉其中一些代码,但其他代码已不再使用。转义码就是其中之一:数字 27,通常表示为^[(它在大多数键盘上都有自己的专用键,但按 Control+[ 将完全相同)。

问题是对于现代键盘上的所有功能而言,31 个代码几乎是不够的:箭头键、插入、F1-12 等。因此,大多数终端模拟器所做的是发送以转义字符开头的字符序列以指示某些特殊含义. 例如,在我的系统上,我的键盘发送^[OP(三个字符:escape 和“OP”),“向上箭头”发送^[[A. 这些代码在您的系统上可能有所不同,但它们应该是 2 或 3 个字符(您可以在 shell 或 Vim 的插入模式中通过按^V,然后按 键来检查它)。

所有这些都有效,但有一些警告。如果应用程序接收到转义字符,那么它必须决定我们是要使用转义符还是它是特殊转义序列(如箭头键或 F1)的开始。另一个警告是快速连续按下“escape O P”实际上可以触发 F1。

所以 Vim 稍等片刻,看看我们是否使用了转义或按键序列。您可以通过:help 'timeoutlen'设置控制此超时;默认设置为一秒;但在大多数机器上将其设置为例如 200 可能没问题。但是,它可能会导致较慢的连接(例如 ssh)出现问题。

请注意,gVim 不会遇到这个问题,因为它不使用终端模拟器来依赖其键盘输入。在世界其他国家自1960年以来一直在移动,和图形界面有显著更先进和强大的键盘输入。