我在我的以下行.vimrc
:
nnoremap <Esc> :noh<Cr>
Run Code Online (Sandbox Code Playgroud)
这在 MacVim 中运行良好。每当我打开 Vim 本身时,它的“命令栏”开始于:
.2c
Run Code Online (Sandbox Code Playgroud)
值得一提的是,当输入执行命令时,Vim 用E16: Invalid range
.
这是一个小烦恼,但我该如何解决这个问题?
映射Esc总是有点棘手,并且通常会引发这种麻烦,尽管它不应该发生。
\n\n映射的“规范”方法是:
\n\nnnoremap <silent> <C-l> :nohlsearch<CR><C-l>\n
Run Code Online (Sandbox Code Playgroud)\n\n这样Ctrl+L(通常会重新绘制屏幕)将停止突出显示并重新绘制屏幕。
\n\n我想我已经知道发生了什么,但我仍然没有解决办法。我假设 Vim 收到一个包含 an 和“2c”的字符串<ESC>
,因此我使用以下映射使其可见:
nnoremap <Esc> :"\n
Run Code Online (Sandbox Code Playgroud)\n\n结果启动时出现以下提示:
\n\n:"[>0;261;0c\n
Run Code Online (Sandbox Code Playgroud)\n\n这意味着<ESC>[>0;261;0c
启动时发送的内容。现在查找原始xterm
控制序列,我们发现:
ESC [ Control Sequence Introducer (CSI is 0x9b)\n
Run Code Online (Sandbox Code Playgroud)\n\n和
\n\n\n\n\nCSI > P s c
\n\n发送设备属性(辅助 DA)。
\n\nP s = 0 或省略\xe2\x86\x92 请求终端\xe2\x80\x99s 识别码。响应取决于decTerminalID资源设置。它应该仅适用于 VT220 及更高版本,但xterm将其扩展到 VT100。
\n\n\xe2\x86\x92 CSI > P p;P v ; 个人电脑
\n\n其中P p表示终端类型
\n\nP p = 0 \xe2\x86\x92 \xe2\x80\x98\xe2\x80\x98VT100\xe2\x80\x99\xe2\x80\x99。
\n\n
\n P p = 1 \xe2\x86\x92 \xe2\x80\x98\xe2\x80\x98VT220\xe2\x80\x99\xe2\x80\x99。P v是固件版本(对于xterm来说,这最初是 XFree86 补丁号,以 95 开头)。在 DEC 终端中, P c表示 ROM 盒的注册号,并且始终为零。
\n
因此,在我的情况下,发送的内容CSI >
为P p = 0(\xe2\x86\x92 终端类型 VT100)、P v = 261(\xe2\x86\x92 我的xterm
版本)和P c = 0。
我仍然不知道它从哪里来,也不知道如何阻止它。我最好的猜测是终端和 Vim 之间的某些信息交换失败并且出现了问题。
\n 归档时间: |
|
查看次数: |
963 次 |
最近记录: |