在MinGW 4.6.2上我的Vim行为很奇怪,例如,在插入模式下按Backspace删除字符,但是我必须在删除的字符消失之前用箭头键移动光标,这也使我不能进入插入模式。
另外一个例子,按Del删除字符有时会产生奇怪的字符,比如将小写字母改为大写字母,或者破坏我input的下一个字符,例如按'S'会初始化'$'。
我使用Vim错误或什么? 我对Vim不是很陌生,所以我不确定这是否是默认行为,但是我所理解的典型的Vim行为就像Git Bash中的Vim,Backspace和Del在NotePad中的工作方式一样。
事情是,退格往往是^H
和删除往往^?
– 有些白痴终端交换两个或两个提供相同的字符。 当某些终端真的出错时,按键会产生ESC~<something>
, ESC
会将vim
置于命令模式,然后~
交换字符的情况,等等。
您还termcap
终端功能的terminfo
或termcap
数据库以进行抗衡 – 如果您的TERM
环境变量与运行终端完全不匹配,将会选择错误的功能,应用程序将生成错误的转义序列以正确控制终奌站。
当然,在Windows上运行进一步复杂化的一切,因为终端不是平台的CMD.EXE
– CMD.EXE
做自己的事情, MSYS
做了另一个, vim
可能是预料之间的bog标准的CMD.EXE
只是因为它是相当普遍的。
所有这些都是我推荐使用gvim
原因; 它会启动一个GUI窗口,其行为与文本模式的vim
几乎完全相同,但是它的行为更具可预测性,您可以在gvim
完全配置它 – 修复vim
的行为实际上可能意味着更改MSYS
配置,打破其他方案。 我不喜欢gvim
开始“新的上下文”的方式,而不是在我已经使用的环境中进行编辑,但是gvim
在Windows下感觉不那么笨拙。
我在MinGW中使用vim也有问题,特别是与鼠标滚轮有关的问题。 但是你描述的问题听起来像vi兼容性。
你有没有尝试在vimrc中的以下设置?
set nocompatible set backspace=2
你的vim的行为是正确的 – 只是在一个模式下,它检测到一个低性能的终端,并不想触摸屏幕太多( S
问题 – $
标记区域的末尾将被删除,但它等待直到你完成插入,所以只需要重新绘制其余的一行)。 坏的终端仿真也可以发送垃圾,当你按下某些键。
@sarnold建议,gvim只是一个在窗口中工作的vim版本,而不是另一个编辑器。 它仍然是完整的vim,仍然是挑战。 如果你被困在一个Windows机器上,这是一个比终端vim更好的选择,因为我不知道我喜欢工作在一个终端(我包括Cygwin)。
您可以通过以下方式检查发送给Vim的字符:
所以你会看到终端发送给vim的神奇字符序列。
例如,在我的例子中,当我推送Backspace时 ,我看到<C-Del>
,所以我可以通过在我的.vimrc中插入以下代码来修复我的退格键:
“例如在xterm终端的情况下
如果&term =“xterm”“修复backspace:inoremap nnoremap fi