0

这是我的.vimrc:

inoremap <esc> <nop>

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

[?1;2c

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

4

2 回答 2

4

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

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

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

set t_RV=

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

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

于 2013-03-21T05:42:27.930 回答
2

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

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

于 2013-03-20T19:19:13.033 回答