当我在插入模式下按下箭头键时,我得到的是字符而不是导航:

我希望能够使用箭头键进行导航。

已经尝试过
我的set nocompatible(vimrc pastebin)中有~/.vimrc,我正在使用病原体,这是我的~/.vim/bundle目录:
YouCompleteMe/
emmet-vim/
nerdtree/
node/
vim-airline/
vim-markdown/

问题仅在最近才开始,不记得原因了。
有些建议使用:set term=builtin_ansi,这样可以解决问题,但消除了我所有的颜色。

$ vim --version
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Aug 29 2016 12:51:13)
MacOS X (unix) version
Included patches: 1-2290
Compiled by Homebrew
Huge version without GUI.  Features included (+) or not (-):
...

有关整个输出,请参见http://pastebin.com/5z1HbpqW。
/>
$ echo $TERM
xterm-256color

和vim:
:set compatible?
nocompatible

:set term?
term=xterm-256color


评论

也许不是重复的(我不确定),但至少与vi.stackexchange.com/q/5123/1841相关性很强

@statox这不是重复的,因为我正在使用vim,而不是vi。

您是如何录制屏幕的?

您是否尝试过以下网站的提示:vim.wikia.com/wiki/…?

通过转义摆脱插入模式映射。 133行

#1 楼

行为的原因是什么

当您按下向左箭头时,您的终端正在发送以下转义序列:

ESC O D


这也可以表示为如^[OD,其中^[Ctrl-[的表示法,这是表示或输入ESC字符的另一种方式。 (在插入模式下尝试!)

Vim不能将其识别为转义序列,因此它会将这些键击视为您自己键入的按键:



Esc:退出插入模式,

O:在光标上方开始新行并进入插入模式,

D:输入'D字符。

通过进入插入模式,然后按Ctrl-V,然后按向左箭头,可以确认终端正在发送此消息。

出了什么问题

转义序列可能会超时

Vim区分转义序列与手动输入的相同三个字符的唯一方法是在接收到两次之间的时间每个字符。因此,在速度较慢的终端或非常繁忙的系统上,Vim可能认为每个字符之间都有足够的延迟,Vim认为这不是转义序列,而只是按如上所述解释了击键。

这在:help vt100-cursor-keys和进一步-在:help timeout中,suggested-suggested建议的解决方案是设置足够大的ttimeoutlen,但是通过同时设置notimeoutnottimeout也可以完全禁用超时。

但是,考虑到您的设置,这不太可能是问题。

Vim无法识别序列

更有可能的问题是Vim无法识别发送的转义序列,因此也将其解释为击键。您可以使用以下命令进行检查:

:set <left>?


在使用当前终端配置的有效设置中,这应该提供以下输出之一:

t_kl <Left>      ^[O*D
t_kl <Left>      ^[OD


如果您看到其他任何内容,则说明Vim和您的终端使用的语言不太相同。

解决此问题的正确方法是修复终端配置,以便terminfo数据库报告按下箭头键时实际发送的序列,但是这样做可能很复杂。一个小小的修正是更改终端发送的内容以匹配Vim的期望。我从您的评论中推断出您正在使用默认的Mac Terminal.app:您可以在“首选项”→“配置文件”→“您的配置文件”→“键盘”中更改每次击键发送的转义序列。

,最简单的修复方法可能是直接告知Vim预期的转义序列。您可以通过设置其终端选项来做到这一点:

set <up>=^[OA
set <down>=^[OB
set <right>=^[OC
set <left>=^[OD


请注意,上面的^[是文字ESC字符。您不能只键入^后跟[!输入映射的最简单方法是输入例如

set <left>=


,然后仍然在插入模式下,按Ctrl-V,然后按向左箭头。请注意,然后您将转义序列直接设置为按箭头键时Vim接收的序列...通过发送该序列!

1:一种可能的可能性是CSI序列:^[[D

评论


最后,由于您的回答,我已经能够在Linux的Windows子系统下修复光标键!

– David FerenczyRogožan
20 Mar 6 '20 at 20:39

#2 楼

此答案为我解决了完全相同的问题。

~/.vimrc中添加以下行:

set nocompatible


重新启动vim之后,问题消失了

评论


从:h'nocompatible'默认打开,当找到vimrc或gvimrc文件时关闭,因此,如果您有一个.vimrc放置不兼容的集,则应该是多余的。

–statox♦
18/12/14在9:26



#3 楼

更新vim软件包已为我解决了断箭问题。

如果您使用的是Ubuntu,请运行apt upgrade vim。有趣的是,apt install vim也有帮助。更有趣的是,更新后的vim版本保持不变:

VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Nov 24 2016 16:44:48)
Included patches: 1-1689
Extra patches: 8.0.0056


但这很有帮助。

评论


版本可能保持不变,但可能包含的补丁已更新?否则,我看不到适当的升级如何解决问题。

–statox♦
17年6月6日在15:28

这对于我在基本OS 5.1 Hera上非常有效。

– Praneetloke
20 Feb 10'在0:16

这里发生的是vim是vi的另一种“改进”版本。当您安装vim时,它会更新/ usr / bin / vi中的符号链接,使其指向与vim相同的可执行文件。

– Rockettc
20-11-30在20:23