Linux VI箭头键在插入模式下损坏


95

我的箭头键在家里不能在vi的插入模式下工作,它们只能插入一个换行符和一个大写字母,例如“ A”。有办法解决吗?


3
我是说发行Linux?
Miquel

他们在外工作吗?:-)
Brian Agnew

4
显然,解决方案是emacs。明显。
保罗·内森

38
@Paul Nathan-如果解决方案是emacs,那么我不想知道问题出在哪里。
Chas。欧文斯

Answers:


107

我假设您正在使用vim,因为它被标记为Linux。尝试:

:set nocompatible

(您可能希望通过向其添加.vimrc来配置此命令。如果主目录中尚不存在此文件,请创建一个新的.vimrc文件,运行echo $HOME以检查主目录路径。)


7
确保使用命令vim而不是vi启动vi vivim除非您以开头,否则默认禁用的大多数高级功能和有用功能vim
pt

1
@pts-仅在损坏的系统上。在我所有机器上将vim当作vi来启动就可以了。但是,我使用了一些CentOS框来演示您正在谈论的行为。
Chas。欧文斯(Owens)'2009年

有人可以编辑此答案以将其包含在vimrc中吗?
斯蒂芬2014年

1
@Stephan set nocompatible在.vimrc中添加自己的行
Matthew Wilcoxson

在Ubuntu上,我通过从那时起在vi上简单地安装vim(sudo apt install vim)来解决此问题,在插入模式下使用箭头键可以正常工作。编辑:我现在看到下面的韩文已经提到了这一点。
pizzamonster

74

Ubuntu附带了default vim-tiny,它没有vim拥有的所有功能。

快速sudo apt-get install vim获取每个人都在谈论的所有多汁功能。


1
这正是我在薄荷Linux中所需要的。通过安装vim,我仍然可以开始使用“ vi”,并且所有的代码高亮现已启用。多么棒的Linux知识:)
有线

1
这适用于我的Raspberry Pi(Jessie Lite)。当我将外壳固定到其中时,我遇到了这个问题,但是现在它已经完全解决了:-)
JakeD

35

:set term=builtin_ansi

为我修复它。您可以将其粘贴到处于转义模式(提示模式)的vim中,也可以将其添加到〜/ .vimrc的末尾,且不带前导“:”。


:set term = xterm也许也可以(并且更容易记住)。
亚历克斯·罗氏

仅供参考:set term=builtin_ansi:set term=xterm没有。
FractalSpace

export TERM=xterm调用vi之前在命令行上使用的Linux机器上,然后:set term=xterm在vim 7.2中为我工作
Alexx Roche

完美的作品!谢谢!
Akhmedzianov Danilian

这可以启用箭头键导航,但是它会完全终止终端中的所有颜色编码。
肯·英格拉姆

16

vi在插入模式下不支持箭头键。使用vim。尽管您的vi可能只是vim的链接,但可以将其配置为类似于“原始” vi的行为,从而禁用箭头键。只需直接调用vim。


尽管这不是解决方案,但这是对行为(imo)的最好解释,明确了vi和之间的区别vim。但在我的盒子上,vim照片是command not found:D
Daniel W.

@DanFromGermany也许您只安装了vi,而不安装了vim。如果您想使用它,请尝试通过Linux系统的软件包管理器来安装vim。
lothar 2014年

:set term=ansi为我工作,谢谢拉兹。您说它“不支持”。我想知道您是否说过,因为我正在使用vim-tiny的ubuntu软件包不同于香草包,vi或者术语设置工作也可以吗?
n611x007

8

还有另一种变化:.vimrc更改后,这个问题对我出现了。一致的搜索最终表明,在正常模式下巧妙地重新映射ESC不是一个好主意。删除它解决了问题:

" this is NOT something you want in .vimrc:
" In normal mode, hitting Esc turns off search highlights:
nmap <ESC> :nohl<CR>  " Do NOT add this to .vimrc

遇到此问题后,我尝试了所有方法,这就是我想要的,谢谢!
Dan Bartlett

感谢您的修复,我到处都是。知道为什么重新映射转义会导致问题吗?
非照片

6

唯一对我有用的是“:set term = ansi”


1
使用Docker容器似乎也对我有用。
ohlando 2014年

1
这个也对我有用。我在Windows中使用cmd.exe,并使用无业游民的人sshing到ubuntu
codelogn 2015年

@ CodeCodeO-1-O-log-n那么您vi在Windows或ubuntu端使用的是哪一边?:)
n611x007 2015年

在Windows上,我先运行cmd.exe,然后将vagrant ssh进入ubuntu服务器,然后vi进入服务器。但是后来我开始使用Putty,我不再需要这样做了,Putty对我来说很棒。
2015年

2

我在使用箭头键时遇到了同样的问题,但是当我使用该键设置了nocp或nocompatible时,我的退格键无法正常工作

由于某种原因,当我使用vim安装vim时 sudo apt-get install vim,vi不再存在箭头或退格键的任何问题


1

切换到.vim中使用git后,我只是遇到了箭头键问题。

我已经安装了这个仓库-https: //github.com/sunaku/.vim

在挖掘了一个小时之后,我发现AutoClose插件(无论如何都不喜欢)破坏了箭头键。

插件文档建议应该设置set ttimeoutlen = 100,但这对我不起作用!(使用urxvt + screen或urxvt,甚至xterm)

因此,我最后删除了该插件。


0

您可能还想尝试“ noesckeys”


0

在带有Cygwin的Windows 8.1中使用vim时,我遇到了同样的问题。

对我有用的解决方案是,只需在您的Cygwin终端中运行以下命令:

cp vimrc_example.vim ~/.vimrc

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.