Vim在Mingw上怪异的performance

在MinGW 4.6.2上我的Vim行为很奇怪,例如,在插入模式下按Backspace删除字符,但是我必须在删除的字符消失之前用箭头键移动光标,这也使我不能进入插入模式。

另外一个例子,按Del删除字符有时会产生奇怪的字符,比如将小写字母改为大写字母,或者破坏我input的下一个字符,例如按'S'会初始化'$'。

我使用Vim错误或什么? 我对Vim不是很陌生,所以我不确定这是否是默认行为,但是我所理解的典型的Vim行为就像Git Bash中的Vim,Backspace和Del在NotePad中的工作方式一样。

事情是,退格往往是^H和删除往往^? – 有些白痴终端交换两个或两个提供相同的字符。 当某些终端真的出错时,按键会产生ESC~<something>ESC会将vim置于命令模式,然后~交换字符的情况,等等。

您还termcap终端功能的terminfotermcap数据库以进行抗衡 – 如果您的TERM环境变量与运行终端完全不匹配,将会选择错误的功能,应用程序将生成错误的转义序列以正确控制终奌站。

当然,在Windows上运行进一步复杂化的一切,因为终端不是平台的CMD.EXECMD.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的字符:

  1. 启动命令模式按下
  2. Ctrl + v
  3. 按下所需的键( Backspace德尔在你的情况。)

所以你会看到终端发送给vim的神奇字符序列。

例如,在我的例子中,当我推送Backspace时 ,我看到<C-Del> ,所以我可以通过在我的.vimrc中插入以下代码来修复我的退格键:

“例如在xterm终端的情况下
如果&term =“xterm”“修复backspace:inoremap nnoremap fi