Vim对Mingw表现得很奇怪

时间:2012-06-06 01:50:17

标签: windows vim mingw

MinGW 4.6.2上的我的Vim表现得很奇怪,例如,在插入模式下按退格键会删除字符,但是我必须在删除的字符消失之前用箭头键移动光标,这也会让我退出插入模式

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

我使用Vim是错还是什么?我对Vim并不太熟悉,所以我不确定这是否是默认行为,但我理解的典型Vim行为就像Git Bash中的Vim,其中Backspace和Del就像在NotePad中一样工作。

4 个答案:

答案 0 :(得分:9)

我在MinGW中使用vim也遇到了问题,特别是与鼠标滚轮滚动有关。但是你描述的问题听起来像是vi兼容性。

您是否在vimrc中尝试了以下设置?

set nocompatible
set backspace=2

答案 1 :(得分:3)

问题是,退格通常是^H,删除通常是^? - 并且一些白痴终端交换两者或两者都提供相同的字符。当某些终端确实错误时,按键将生成ESC~<something>ESCvim置于命令模式,然后~将交换字符的情况,等等。

您还有terminfotermcap终端功能数据库可供使用 - 如果您的TERM环境变量与运行终端不完全匹配,则错误的功能将会选择后,应用程序将生成错误的转义序列,以正确控制终端。

当然,在Windows上运行会使一切变得复杂化,因为终端不是平台的本机 - CMD.EXE做自己的事情,MSYS做另一个,vim可能预期的沼泽标准CMD.EXE只是因为它很常见。

所有这些都是我建议使用gvim的原因;它启动一个GUI窗口,其行为几乎与文本模式vim完全相同,但它的行为更可预测,您可以在gvim 中完全配置 - 修复vim的行为实际上可能意味着更改MSYS配置,这可能会破坏其他程序。我不喜欢gvim启动“新上下文”的方式,而不仅仅是在我已经使用的环境中进行编辑,但gvim在Windows下感觉不那么尴尬。

答案 2 :(得分:2)

你的vim表现正常 - 只是在它检测到低功能终端的模式下,并且不想太多触摸屏幕(S问题 - $标志着结束将被删除的区域,但它等待你完成插入所以它只需要重新绘制其余的一行)。当您按某些键时,错误的终端仿真也会发送垃圾。

@sarnold建议的gvim只是一个vim的构建,它在窗口中工作,而不是另一个编辑器。它仍然是完整的vim,仍然存在挑战。如果你被困在一个Windows机箱上,这是一个比终端vim更好的选择,因为我不知道我喜欢的单个终端(我包括Cygwin)。

答案 3 :(得分:0)

您可以通过以下方式检查发送给Vim的字符:

  1. 启动命令模式
  2. Ctrl + v
  3. 在您的情况下按下所需的键( Backspace Del 。)
  4. 所以你会看到终端发送给vim的魔法字符序列。

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

    &#34;例如。在xterm终端的情况下 if&amp; term =&#34; xterm&#34;       &#34;修复退格:       inoremap       nnoremap     网络