为什么vim以删除模式启动?

为什么vim以删除模式启动?,vim,Vim,如问题中所述,我的vim以删除模式启动。如果我打开一个文件并点击j开始导航,那将删除第一行 我已在我的.vimrc中将问题隔离到这一行: nnoremap <silent> <esc> :noh<return><esc> nnoremap:noh 我不明白为什么这会触发删除模式。除此之外,我相信我添加了来指示vim在不执行绑定的情况下进行绑定,但事实似乎并非如此 为什么会发生这种情况,有什么解释 (旁注,此映射用于告诉vim在我按下esc时清除

如问题中所述,我的vim以删除模式启动。如果我打开一个文件并点击
j
开始导航,那将删除第一行

我已在我的
.vimrc
中将问题隔离到这一行:

nnoremap <silent> <esc> :noh<return><esc>
nnoremap:noh
我不明白为什么这会触发删除模式。除此之外,我相信我添加了
来指示vim在不执行绑定的情况下进行绑定,但事实似乎并非如此

为什么会发生这种情况,有什么解释


(旁注,此映射用于告诉vim在我按下esc时清除搜索突出显示)

如果您在终端中运行此命令:

$ vim file.txt -c 'nnoremap <silent> <esc> :noh'
vim
以某种方式进入
更改模式


您可以将
更改为
(或其他键)。 如果您使用
gvim
,则没有问题。
这是由终端特殊密钥转义引起的。

如果在终端中运行此命令:

$ vim file.txt -c 'nnoremap <silent> <esc> :noh'
vim
以某种方式进入
更改模式


您可以将
更改为
(或其他键)。 如果您使用
gvim
,则没有问题。
这是由终端特殊钥匙逸出引起的。

当使用
+TERM RESPONSE
功能构建时,Vim向终端发送特殊控制序列(请参见
:set t_RV?
)。当终端仿真器看到此序列时,它会以序列ESC
]>1响应;3201;0c
。ESC被映射到
:noh
,您可以在命令行上获得序列的其余部分。通过OP的映射,序列的其余部分被视为正常命令,因此最后一个
c
启动一个更改命令。因此,此ESC映射正在干扰xterm(或其他)提供给Vim的查询响应。@ChrisJohnsen感谢您提供了最后一个链接。这三个数字的解释见
:h v:term response
。很遗憾,即使在阅读了帮助文件之后,我也不明白termresponse是用来做什么的。对于这个答案,我感激不尽。这让我找到了一个一劳永逸的解决办法。对于其他人,我已经发布了另一个问题,当使用
+TERM RESPONSE
功能构建时,Vim会向终端发送一个特殊的控制序列(请参见
:set t_RV?
)。当终端仿真器看到此序列时,它会以序列ESC
]>1响应;3201;0c
。ESC被映射到
:noh
,您可以在命令行上获得序列的其余部分。通过OP的映射,序列的其余部分被视为正常命令,因此最后一个
c
启动一个更改命令。因此,此ESC映射正在干扰xterm(或其他)提供给Vim的查询响应。@ChrisJohnsen感谢您提供了最后一个链接。这三个数字的解释见
:h v:term response
。很遗憾,即使在阅读了帮助文件之后,我也不明白termresponse是用来做什么的。对于这个答案,我感激不尽。这让我找到了一个一劳永逸的解决办法。对于其他人,我发布了另一个问题