这是我的.vimrc:
inoremap <esc> <nop>
当我使用vim +startinsert
启动vim时,我得到一个缓冲区,其中自动插入了以下奇怪的字符(是的,我在插入模式下,光标在&#39; c&#39;之后):
[?1;2c
关于为什么会发生这种情况的任何想法?
答案 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。