我在Windows 8(64位)上使用Cygwin 1.7.22(32位)。在Cygwin中,我使用的是Vim 7.3.1152,这是默认版本。
看似错误的行为:
当我按 I 进入插入模式时,它不会在左下角显示-- INSERT --
。事实上,它没有说什么。但它确实表现得很好。
当我在插入模式下使用 Backspace 删除字母时,字母不会消失,但光标会向左移动。
当我在插入模式下使用箭头键时,它输入字母A,B,C和D,而不是移动光标。箭头键在插入模式之外正常工作。
如何让Vim按照我的预期行事?
答案 0 :(得分:23)
使用以下内容创建一个~/.vimrc
文件,以便将vim置于非兼容模式(实际上仅存在该文件就足够了。)
set nocompatible
您所看到的行为是vi
过去常常表现的行为。这些不是错误。
查看:h nocompatible
在vim兼容模式下尝试尽可能地模拟vi。
--insert--
不属于vi,因此未以兼容模式显示。^[
逃脱。 ^[OA
在我的计算机上可能与你的相似。 vim将此视为转义(返回正常模式),O(在当前模式上方添加一行)和A,即您在屏幕上看到的A.这只是意味着兼容模式下的vim不能正确解释转义字符。很可能是因为vi没有解释它们(也没有设计使用它们)。 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