【问题标题】:Why does the combination of remapping <esc> to <nop> cause strange characters to be automatically inserted when starting vim with startinsert?为什么重新映射 <esc> 到 <nop> 的组合导致使用 startinsert 启动 vim 时会自动插入奇怪的字符?
【发布时间】:2013-03-22 09:45:17
【问题描述】:

这是我的 .vimrc:

inoremap <esc> <nop>

当我使用 vim +startinsert 启动 vim 时,我得到一个自动插入以下奇怪字符的缓冲区(并且,是的,我处于插入模式,光标位于 'c' 之后):

[?1;2c

关于为什么会发生这种情况的任何想法?

【问题讨论】:

    标签: vim


    【解决方案1】:

    当设置了t_RV 选项时,Vim 使用它来询问终端本身。终端通常会回复一个以 Esc 开头的序列,而您的插入映射会干扰这个响应序列:最初的 Esc 是“吃掉的”,其余的被 Vim 视为普通用户输入。 p>

    您是否将 rxvt 用于您的终端仿真器?您的输出与 Vim 源代码指示 rxvt 发送以响应 xterm-default t_RV 查询的序列匹配(即使在 TERM=rxvt 时,Vim 也使用该查询) .

    您可以清除 t_RV(例如在您的 ~/.vimrc 中)以避免此特定问题。

    set t_RV=
    

    您的 Esc (取消)映射可能会使使用任何非 ASCII 键变得特别困难:几乎所有其他键(箭头、Home、End、Page Up/Down、F1–F12 等)发送的序列从 Esc 开始。您的映射可能会干扰 Vim 能够识别这些键发送的序列。

    您可能对 Vim 的“简单模式”(vim -y) 感兴趣;它会自动以插入模式启动,并添加映射和其他设置,使 Vim 模式类似于“单击并键入”编辑器。请参阅:help -y:help evim-keys(如果您卡在插入模式,您可能需要先输入 C-o)。如果您打算避免使用 Vim 的模式,您可能只是想研究一种不同风格的编辑器。

    【讨论】:

    • 我正在使用 Apple 的终端,当我输入 echo $TERM 时它会给出 xterm-256color。无论如何set t_RV= 工作!请注意,您将命令输入错误r_RV=。谢谢。
    • 我对以插入模式启动不感兴趣,除非在编写提交时。我也对长期将 映射到 不感兴趣,直到我将 'jk' 提交到内存作​​为转义的新映射。
    • @Jashugan 你可以做nmap &lt;expr&gt; &lt;Esc&gt; (empty(getchar(1)) ? "" : "\e"),它的效果几乎一样,但如果输入缓冲区中有一些字符,它不会用&lt;Nop&gt; 替换&lt;Esc&gt;
    【解决方案2】:

    我不能说为什么要插入这些字符,但&lt;Esc&gt;all 的第一个字符,或者几乎所有用于传输除终端 [emulator] 到 vim 的用户输入之外的任何数据的序列的第一个字符。 Escape 启动序列用于讲述鼠标点击,F1F12 按键,有时是 &lt;Del&gt;&lt;BS&gt;(高度依赖于终端,通常终端为此输出其他内容),箭头键,&lt;PageUp&gt; /&lt;PageDown&gt;,有关大小更改的信息,...。一些数据作为常规用户输入处理(注意:在 any 情况下,终端将使用它用来传递您的输入的相同流,在 C 代码中这个输入的层只是不同的层正在处理中)。当它是并且您重新映射逃逸时,您会看到这些奇怪的字符。

    请注意,如果您尝试设置始终处于插入模式的 vim 配置,则需要 &amp;insertmode 设置,而不是 :startinsert。但是如果你忘记 vim 会好得多,如果你不想让普通模式成为默认模式,你就不需要 vim。

    【讨论】:

    • 这实际上是我编写的 Vimscript 函数的一部分,我想在编写提交消息时进入插入模式。在所有其他情况下,我确实以正常模式启动 vim。我以前不知道&amp;insertmode
    猜你喜欢
    • 2011-06-07
    • 2012-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    相关资源
    最近更新 更多