6

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

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

我用错了 Vim 还是什么?我对 Vim 不太熟悉,所以我不确定这是否是默认行为,但据我所知,典型的 Vim 行为就像 Git Bash 中的 Vim,Backspace 和 Del 的工作方式就像在记事本中一样。

4

4 回答 4

13

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

你有没有在 vimrc 中尝试过以下设置?

set nocompatible
set backspace=2
于 2014-06-05T04:12:21.340 回答
4

问题是,退格经常出现^H,而删除经常出现^?——有些白痴终端会交换两者,或者两者都提供相同的字符。当某些终端真的出错时,会生成一个按键,ESC~<something>然后ESCvim进入命令模式,然后~会交换字符的大小写,等等。

您还需要处理终端功能的terminfo数据库termcap——如果您的TERM环境变量与正在运行的终端不完全匹配,则会选择错误的功能,并且应用程序将生成错误的转义序列以正确控制终端。

当然,在 Windows 上运行会使一切变得更加复杂,因为终端并不是平台的原生终端——CMD.EXE做自己的事情,MSYS做其他事情,并且vim可能CMD.EXE只是因为它很常见而被认为是沼泽标准。

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

于 2012-06-06T22:59:49.960 回答
2

您的 vim 行为正确 - 只是在它检测到低功能终端的模式下,并且不想过多地触摸屏幕(S问题 -$标志着将被删除的区域的结束,但它会等到你'已完成插入,因此只需要重新绘制该行的其余部分一次)。当您按下某些键时,糟糕的终端仿真也会发送垃圾信息。

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

于 2012-06-06T19:13:16.410 回答
0

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

  1. 按下启动命令模式:
  2. Ctrl+v
  3. 按所需的键(BackspaceDel在您的情况下。)

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

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

"例如,如果是 xterm 终端
if &term="xterm" "修复退格:inoremap nnoremap fi

于 2016-04-16T18:04:11.227 回答