为什么重新映射<esc>到<nop>的组合会在使用startinsert启动vim时自动插入奇怪的字符?</nop> </esc>

时间:2013-03-20 17:38:59

标签: vim

这是我的.vimrc:

inoremap <esc> <nop>

当我使用vim +startinsert启动vim时,我得到一个缓冲区,其中自动插入了以下奇怪的字符(是的,我在插入模式下,光标在&#39; c&#39;之后):

[?1;2c

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

2 个答案:

答案 0 :(得分:4)

当设置t_RV选项时, Vim 使用它来询问终端自身。终端通常会回复一个以Esc开头的序列,并且您的插入映射会干扰此响应序列:初始Esc被“吃掉”,其余被视为 Vim 的正常用户输入。

您是否在终端模拟器中使用 rxvt ?您的输出与 Vim 源代码指示 rxvt 发送的序列匹配,以响应xterm-default t_RV查询(即使在{{{ 1}})。

您可以清除TERM=rxvt(例如在t_RV中)以避免此特定问题。

~/.vimrc

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

您可能对 Vim 的“简易模式”(set t_RV= )感兴趣;它会自动以插入模式启动,并添加映射和其他设置,使 Vim 模式像“点击式”编辑器一样。请参阅vim -y:help -y(如果您处于插入模式,则可能需要先键入C-o)。如果您试图避免 Vim 的模式,您可能只想调查不同风格的编辑器。

答案 1 :(得分:2)

我不能说为什么要插入这些字符,但是<Esc> all 的第一个字符,或几乎所有序列用于传输除终端[模拟器]以外的用户输入之外的任何数据VIM。 Escape启动用于说明鼠标点击的序列,F1 ... F12按键,有时<Del><BS>(高度依赖于终端,通常终端为此输出其他内容),箭头键,<PageUp> / <PageDown>,有关尺寸变化的信息,....一些数据作为常规用户输入处理(注意:在任何情况下终端将使用它用于传递输入的相同流,C代码中的层只有一个区别在于此输入正在处理中)。如果是,你重新映射逃脱,你会看到这样奇怪的角色。

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