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

时间:2013-08-07 23:44:36

标签: vim cygwin

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

看似错误的行为:

  1. 当我按 I 进入插入模式时,它不会在左下角显示-- INSERT --。事实上,它没有说什么。但它确实表现得很好。

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

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

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

4 个答案:

答案 0 :(得分:23)

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

set nocompatible

您所看到的行为是vi过去常常表现的行为。这些不是错误。

查看:h nocompatible


在vim兼容模式下尝试尽可能地模拟vi。

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

  4. set nocompatible解决了问题1和3。

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

答案 1 :(得分:4)

这是几个月前被问到的,但我正在回答其他遇到此问题的人的参考。

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

无论出于什么原因(至少对我来说就是这种情况),不要使用你放在目录中的.vimrc。假设您将示例一复制到工作目录,或者从在线复制一些.vimrc。或者也许你从头开始创建一个新的设置,并将所有设置放在好人和其他地方推荐(设置backspace = blahblah,设置nocompatible,设置此项,设置它)。它不起作用。为什么?因为无论出于何种原因(至少在我的情况下),vim没有查看你刚刚创建的.vimrc。

解决方案是FORCE vim使用特定的.vimrc,在命令行中传入-u,如下所示:

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

为了所有圣洁的爱,不要逐字键入方括号或“/INSERT/PATH/TO/.vimrc”。请使用你的大脑。

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

您可能希望在.bashrc中对vim命令进行别名,如下所示:

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

答案 2 :(得分:0)

关于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

答案 3 :(得分:0)

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

$ 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