为什么我需要按两次取消以取消vim搜索?

时间:2017-04-13 16:55:20

标签: vim

我常常搜索某些内容并在搜索中途实现没有匹配项。要取消搜索,我必须按两次逃生。我删除了我的整个.vimrc文件,看看是什么插件导致了这个问题。奇怪的是,如果我没有.vimrc文件,我只需要按一次转义。 即使我有一个空的.vimrc文件,我也需要按两次转义。

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

1 个答案:

答案 0 :(得分:4)

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

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

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

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

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

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

请注意,gVim不会遇到此问题,因为这不会使用终端仿真器来依赖其键盘输入。自20世纪60年代以来,世界其他地方一直在发展,图形界面具有显着更高级和强大的键盘输入。