【发布时间】:2013-03-22 09:45:17
【问题描述】:
这是我的 .vimrc:
inoremap <esc> <nop>
当我使用 vim +startinsert 启动 vim 时,我得到一个自动插入以下奇怪字符的缓冲区(并且,是的,我处于插入模式,光标位于 'c' 之后):
[?1;2c
关于为什么会发生这种情况的任何想法?
【问题讨论】:
标签: vim
这是我的 .vimrc:
inoremap <esc> <nop>
当我使用 vim +startinsert 启动 vim 时,我得到一个自动插入以下奇怪字符的缓冲区(并且,是的,我处于插入模式,光标位于 'c' 之后):
[?1;2c
关于为什么会发生这种情况的任何想法?
【问题讨论】:
标签: vim
当设置了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 的模式,您可能只是想研究一种不同风格的编辑器。
【讨论】:
echo $TERM 时它会给出 xterm-256color。无论如何set t_RV= 工作!请注意,您将命令输入错误r_RV=。谢谢。
nmap <expr> <Esc> (empty(getchar(1)) ? "" : "\e"),它的效果几乎一样,但如果输入缓冲区中有一些字符,它不会用<Nop> 替换<Esc>。
我不能说为什么要插入这些字符,但<Esc> 是 all 的第一个字符,或者几乎所有用于传输除终端 [emulator] 到 vim 的用户输入之外的任何数据的序列的第一个字符。 Escape 启动序列用于讲述鼠标点击,F1…F12 按键,有时是 <Del> 或 <BS>(高度依赖于终端,通常终端为此输出其他内容),箭头键,<PageUp> /<PageDown>,有关大小更改的信息,...。一些数据作为常规用户输入处理(注意:在 any 情况下,终端将使用它用来传递您的输入的相同流,在 C 代码中这个输入的层只是不同的层正在处理中)。当它是并且您重新映射逃逸时,您会看到这些奇怪的字符。
请注意,如果您尝试设置始终处于插入模式的 vim 配置,则需要 &insertmode 设置,而不是 :startinsert。但是如果你忘记 vim 会好得多,如果你不想让普通模式成为默认模式,你就不需要 vim。
【讨论】:
&insertmode。