27

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

看起来像错误的行为:

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

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

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

如何让 Vim 表现得像我预期的那样?

4

4 回答 4

27

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

set nocompatible

您所看到的行为是vi习惯的行为方式。这些不是错误。

看一眼:h nocompatible


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

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

set nocompatible修复问题 1 和 3。

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

于 2013-08-07T23:53:06.877 回答
5

几个月前有人问过这个问题,但我正在回答任何遇到此问题的人以供将来参考。

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

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

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

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

出于对所有神圣事物的热爱,请勿逐字输入方括号或单词“/INSERT/PATH/TO/.vimrc”。请用你的大脑。

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

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

alias vim='vim -u [/INSERT/PATH/TO/.vimrc]'
于 2014-01-26T13:09:31.717 回答
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

于 2014-06-22T15:56:05.867 回答
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

可能,如果您已经拥有此文件,您将在其中添加上述字符串。或者,正如上面人们所说,如果你有一个空的~/.vircnocompatible模式必须已经在使用中(我没有检查它)。

vi除了问题之外,可以通过添加以下内容来显示行号(我发现它非常有用) :

set number
于 2020-10-29T12:30:25.320 回答