如何在Windows 8上的Cygwin中禁用Vim的'vi compatible'模式?



我在Windows 8(64位)上使用Cygwin 1.7.22(32位)。在Cygwin中,我使用的是Vim 7.3.1152,它是默认版本。

看起来像bug的行为:

  1. 当我按I进入插入模式时,左下角没有显示-- INSERT --。事实上,它什么也没说。不过,它的行为确实正确。

  2. 当我在插入模式下使用Backspace删除字母时,字母不会消失,但光标会向左移动。

  3. 当我在插入模式下使用箭头键时,它会输入字母A、B、C和D,而不是移动光标。箭头键在插入模式之外正常工作。

我该如何让Vim按照我的预期行事?

创建一个包含以下内容的~/.vimrc文件,将vim置于不兼容模式(实际上,仅存在该文件就足够了。)

set nocompatible

您所看到的行为就是vi过去的行为。这些不是虫子。

看看:h nocompatible


在vim兼容模式下,尽量模仿vi。

  1. --insert--不是vi的一部分,因此它不以兼容模式显示
  2. 我相信vi对屏幕进行了懒惰的重新绘制,直到你退出正常模式才更新。此外,退格仅可用,也仅适用于在当前插入模式中输入的内容。总的来说,它对用户不是很友好
  3. 箭头键作为转义序列发送到vim(转义后面跟着一对字母)。让^[逃脱。^[OA在我的电脑上,可能和你的类似。vim将其视为一个escape(返回正常模式),O(在当前值上方添加一行)和a,即您在屏幕上看到的输入的a。这只是意味着vim在兼容模式下无法正确解释转义字符。很可能是因为vi没有解释它们(也不是为了使用它们而设计的)

set nocompatible修复了问题1和问题3。

我认为set backspace=indent,eol,start应该解决问题2。

这是几个月前提出的问题,但我的回答是为了将来任何遇到这个问题的人参考。

我只是被这个问题刺痛了。这篇文章中列出的所有建议,以及这个论坛上的其他帖子(更不用说其他论坛上的帖子)都不起作用,至少对我们中的一些人来说是这样。我终于找到了真正的问题。

无论出于何种原因(至少我是这样),cygwin上的vim都不使用您放在目录中的.virc。假设您将示例复制到您的工作目录中,或者从网上复制一些.virc。或者,你可以从头开始创建一个新的,并将这里和其他地方的好人推荐的所有设置都放进去(设置退格=等等,设置不兼容,设置这个,设置那个)。它不起作用。为什么?因为无论出于什么原因(至少在我的情况下),vim都没有看到你刚刚创建的.virc。

解决方案是强制vim使用特定的.virc,方法是在命令行上传入-u,如下所示:

vim -u [/INSERT/PATH/TO/.vimrc]

为了爱所有神圣的东西,不要逐字逐句地键入方括号或单词"/INSERT/PATH/TO/.vimrc"。请动动脑筋。

无论如何,这解决了我的问题,我可以使用默认的例子.virc,并在插入模式下获得正确的删除和退格行为,更不用说其他好东西了。

你可能想在.bashrc中别名vim命令,如下所示:

alias vim='vim -u [/INSERT/PATH/TO/.vimrc]'

关于Vim中箭头键的A、B、C、D,添加:

:set term=cons25

~/.vimrc就像一个符咒。

来源:http://vim.wikia.com/wiki/Fix_arrow_keys_that_display_A_B_C_D_on_remote_shell

根据本主题中的不同答案,我找到了一个简单的解决方案。

$ vi --version | head
VIM - Vi IMproved 8.2 (2019 Dec 12, compiled Mar 30 2020 21:54:08)
Included patches: 1-486
Modified by <cygwin@cygwin.com>
Compiled by <cygwin@cygwin.com>
$ vi --version | grep 'user vimrc'
     user vimrc file: "$HOME/.virc"
 2nd user vimrc file: "~/.vim/vimrc"

所以我刚刚创建了~/.virc(而不是vimrc),它很有效!文件内容:

set nocompatible

也许,如果你已经有了这个文件,你会在其中添加上面的字符串。或者,正如上面人们所说,如果你有一个空的~/.virc,那么nocompatible模式一定已经在使用中(我没有检查它)。

除此之外,行号(我觉得非常有用)可以在vi中通过添加来显示

set number

最新更新