我的中有以下几行.vimrc
:
nnoremap <Esc> :noh<Cr>
这在 MacVim 中运行良好。每当我打开 Vim 本身时,它的“命令栏”都会以以下内容开始:
.2c
不管怎样,当输入回车来执行命令时,Vim 会发出抱怨E16: Invalid range
。
这是一个很小的烦恼,但我该如何解决这个问题呢?
答案1
绘图Esc总是有点棘手,而且通常会引起这种麻烦,尽管它不应该发生。
映射的“规范”方法是:
nnoremap <silent> <C-l> :nohlsearch<CR><C-l>
这样Ctrl+L(通常会重新绘制屏幕)将停止突出显示和重绘屏幕。
我想我已经知道发生了什么,但我仍然没有解决方案。我假设 Vim 收到一个包含 an<ESC>
和“2c”的字符串,所以我使用以下映射使其可见:
nnoremap <Esc> :"
启动时出现以下提示:
:"[>0;261;0c
这意味着<ESC>[>0;261;0c
启动时发送了一些东西。现在查找原始xterm
控制序列,我们发现:
ESC [ Control Sequence Introducer (CSI is 0x9b)
和
CSI >磷C
发送设备属性(辅助 DA)。
磷= 0 或省略 → 请求终端的识别码。响应取决于十进制终端ID 资源设置。它应该只适用于 VT220 及以上版本,但终端将其扩展至 VT100。
→ 犯罪现场调查 >磷;磷;磷灰石
在哪里磷表示终端类型
磷= 0 → “VT100”。
磷= 1 → “VT220”。和磷是固件版本(对于终端,这原本是 XFree86 补丁号,以 95 开头)。在 DEC 终端中, 个人电脑表示 ROM 卡带注册号,始终为零。
所以在我的例子CSI >
中磷= 0(→ 终端类型 VT100),磷= 261(→我的xterm
版本),并且个人电脑= 0。
我仍然不知道它从何而来,也不知道该如何阻止它。我最好的猜测是终端和 Vim 之间的某些信息交换失败了,并且出现了一些错误。
答案2
问题在于,对于某些终端,vim 以这种方式接收 [>0;261;0c。最后一个“c”使 vim 启动很麻烦,但我找到了在启动时跳过第一个“c”的简单技巧:
nnoremap c :nunmap c<Cr>