【问题标题】:Why is vim starting in delete mode?为什么 vim 以删除模式启动?
【发布时间】:2013-02-07 12:35:15
【问题描述】:

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

我已在.vimrc 中将问题归结为这一行:

nnoremap <silent> <esc> :noh<return><esc>

我不明白为什么这甚至会触发删除模式。最重要的是,我相信我添加了 &lt;silent&gt; 以指示 vim 进行此绑定而不执行它,但似乎并非如此。

为什么会发生这种情况的解释是什么?

(旁注,这个映射是告诉vim在我按esc时清除搜索高亮)

【问题讨论】:

    标签: vim


    【解决方案1】:

    如果你在终端运行这个命令:

    $ vim file.txt -c 'nnoremap <silent> <esc> :noh'
    

    它会在底部显示:

    :noh[>1;3201;0c
    

    vim 以某种方式进入change-mode


    您可以将&lt;esc&gt; 更改为&lt;F5&gt;(或其他键)。 如果您使用gvim,则没有问题。 是终端特殊键转义造成的。

    【讨论】:

    • 当使用+termresponse 功能构建时,Vim 会向终端发送一个特殊的控制序列(参见:set t_RV?)。当您的终端仿真器看到此序列时,它会以序列 ESC ]&gt;1;3201;0c 进行响应。 ESC 映射到:noh,您可以在命令行上获得序列的其余部分。使用 OP 的映射,序列的其余部分被视为正常命令,因此最后一个 c 启动更改命令。因此,这个 ESC 映射干扰了 xterm(或其他)提供给 Vim 的查询响应。
    • @ChrisJohnsen 感谢您提供最终链接。这三个数字的解释在:h v:termresponse中给出。太糟糕了,即使阅读了帮助文件,我也不明白 termresponse 是什么。
    • 我非常感谢您的回答。它使我找到了一个可以一劳永逸地解决这个问题的解决方案。对于其他人,我在另一个问题上发布了the answer
    猜你喜欢
    • 2013-12-26
    • 2015-10-17
    • 2013-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-07
    • 2018-06-17
    • 2011-09-25
    相关资源
    最近更新 更多