MinGW 4.6.2上的我的Vim表现得很奇怪,例如,在插入模式下按退格键会删除字符,但是我必须在删除的字符消失之前用箭头键移动光标,这也会让我退出插入模式
另一个例子,按Del删除字符有时会产生奇怪的字符,比如将小写字符改为大写字符,或者破坏我键入的下一个字符,例如按'S'初始给我'$'。
我使用Vim是错还是什么?我对Vim并不太熟悉,所以我不确定这是否是默认行为,但我理解的典型Vim行为就像Git Bash中的Vim,其中Backspace和Del就像在NotePad中一样工作。
答案 0 :(得分:9)
我在MinGW中使用vim也遇到了问题,特别是与鼠标滚轮滚动有关。但是你描述的问题听起来像是vi兼容性。
您是否在vimrc中尝试了以下设置?
set nocompatible
set backspace=2
答案 1 :(得分:3)
问题是,退格通常是^H
,删除通常是^?
- 并且一些白痴终端交换两者或两者都提供相同的字符。当某些终端确实错误时,按键将生成ESC~<something>
,ESC
将vim
置于命令模式,然后~
将交换字符的情况,等等。
您还有terminfo
或termcap
终端功能数据库可供使用 - 如果您的TERM
环境变量与运行终端不完全匹配,则错误的功能将会选择后,应用程序将生成错误的转义序列,以正确控制终端。
当然,在Windows上运行会使一切变得复杂化,因为终端不是平台的本机 - CMD.EXE
做自己的事情,MSYS
做另一个,vim
可能预期的沼泽标准CMD.EXE
只是因为它很常见。
所有这些都是我建议使用gvim
的原因;它启动一个GUI窗口,其行为几乎与文本模式vim
完全相同,但它的行为更可预测,您可以在gvim
中完全配置 - 修复vim
的行为实际上可能意味着更改MSYS
配置,这可能会破坏其他程序。我不喜欢gvim
启动“新上下文”的方式,而不仅仅是在我已经使用的环境中进行编辑,但gvim
在Windows下感觉不那么尴尬。
答案 2 :(得分:2)
你的vim表现正常 - 只是在它检测到低功能终端的模式下,并且不想太多触摸屏幕(S
问题 - $
标志着结束将被删除的区域,但它等待你完成插入所以它只需要重新绘制其余的一行)。当您按某些键时,错误的终端仿真也会发送垃圾。
答案 3 :(得分:0)
您可以通过以下方式检查发送给Vim的字符:
所以你会看到终端发送给vim的魔法字符序列。
例如,在我的情况下,当我按 Backspace 时,我看到<C-Del>
,所以我可以通过将以下代码插入我的.vimrc来修复我的退格键:
&#34;例如。在xterm终端的情况下 if&amp; term =&#34; xterm&#34; &#34;修复退格: inoremap nnoremap 网络