按下箭头键可在vi编辑器中添加字符


188

当我尝试在vi编辑器的插入模式下使用箭头键时,在编辑器中插入了以下字符:

  • 因为我得到了B
  • 因为我得到了A
  • 因为我得到了D
  • 因为我得到了C。

请帮助我解决此问题。


3
我很高兴地读了标题;)我确信当箭头键打印字母时(对于新手用户而言)会有一种怪异的感觉的XKCD。
vvy

1
这是非常非常可怕的;)
凯尔·布​​莱恩斯汀

Answers:


233

如果您.vimrc的主目录中没有文件,请使用以下命令创建一个文件:

vim ~/.vimrc

将此行添加到文件顶部:

set nocompatible

保存文件,这将为您解决问题。:)


1
我必须为vi创建一个.exrc文件,但是设置nocompatible效果很好。
tgun926

25
如果您使用vi而不是,则有一个技巧vim,您必须在~/.exrc文件中进行相同的配置。
tzi

15
工作了。但是为什么需要此修复程序?为什么默认情况下它不处理箭头?
Mohit

6
默认情况下,vi / vim被编程为将箭头键替换为键h,j,k,l。这样做是为了您不必从键盘的主键区域移开。
Gaurav Manchanda '16

10
下一个问题是退格键,解决方案:askubuntu.com/questions/296385/…–
daVe

87

安装vim- >这样可以解决问题。

sudo apt-get install vim

YouTube或一般网络上有很多很好的vim / vi教程。对于您的问题,请参见此处

然后继续照常打开文件

vi desired-file

工作对我来说-虽然不知道为什么,这是我以前启动vim是不同的
阿莫斯Folarin

6
这应该是被接受的答案(但似乎没人在接受)。这是将vim完全“现代化”到计算机控制台的最简单/最
简洁的方法

是的,我同意你的观点,洛克兹史密斯,这应该是公认的答案
尼古罗·米。

这对我有用。令我惊讶的是raspian随附了vi / vim的版本...尽管所有有关它的教程都告诉您使用nano,但很难说vim确实比它好。我使用vim而不是nano的唯一原因可能是因为vim始终存在于每台计算机上,并且是否使用nano似乎是50/50的机会。
ArtOfWarfare

BLEEPIN的计算机!
克里斯

27

随着vi,点击当i您激活命令插入文本。
此命令允许您在文件中插入文本。
右击,当点击:

  • 其上将插入“ A”,
  • 其上将插入“ B”,
  • ...

直到您停用此命令。
要在中禁用命令,vi只需单击,Esc
然后您将恢复正常使用箭头键的方式:

  • 上去,
  • 往下走,
  • ...

仅供参考,以下是一些vi命令:
从此

:xReturn 退出vi,将修改后的文件写到原始调用中命名的文件中
:wqReturn 退出vi,将修改后的文件写到原始调用中命名的文件中
:qReturn 退出(或退出)vi
:q!Return 退出vi,即使尚未保存此vi调用的最新更改

移动光标下移一行
移动光标向上移动一行
移动光标左移一个字符
移动光标右移一个字符

u 撤消您所做的一切;一个简单的切换
. 重做不管你只是做

i 插入光标之前的文字,直到Esc命中
I 在当前行的开头文字,直到Esc命中
a 追加光标之后的文字,直到Esc命中
A 追加文本结束当前行,直到Esc
o ,并把文本当前行下一个新行,直到Esc
O 和将文字放在当前行上方的新行中,直到Esc命中为止

r 替换下的光标(没有单个字符Esc需要)
cw 改变当前词用新的文本,从光标下的字符,直到Esc命中
x 删除光标下单字符
Nx 删除 N个字符,在光标开始字符
dw 删除光标下用字符开头的一个字
C 的变化(替换)当前行中的字符,直到Esc命中
D 删除为止,从当前光标位置开始删除该行的其余部分

dd 删除整个当前行,从当前行开始
Ndd 删除 N行;例如,5dd删除5行,将当前行
yy 复制(猛拉,剪切)到缓冲区中,然后将N行(包括当前行)
Nyy 复制(猛拉,剪切)到缓冲区中,然后将缓冲区中的行
p 粘贴到文本中当前行

0(零)光标移至当前行的开头(带有光标的那个)
$ 光标移至当前行的末尾
w 光标移至下一个单词的起始处
b 光标移回到上一个单词的开头
:0Return1G 光标移至文件中的第一行
:nReturnnG 光标移到移至第n行
:$ReturnG 光标移至文件的最后一行

/string 搜索前进用于以文本字符串的出现
?string 搜索向后用于文本串的发生
n 移动到的搜索字符串下发生
N 移动,以在相反的方向上的搜索字符串的下一个出现


28
向下箭头键插入“ B”不是预期的行为。无论插入模式如何,箭头键都应使光标上下左右移动。

2
@JamesWong实际上,这预期的行为,因为这是Vi最初编程的方式。VIM(非正式地)是Vi的继承者,默认情况下处于Vi兼容模式,其中包括箭头键的这种行为。因此,“应该”一词仅是主观的,因为VIM实际上正在执行其有目的编程的工作。
villapx

2
@villapx-不,这不是预期的行为。预期的行为由典型用户的期望定义。使用vi / vim的典型人正在使用它,因为那是他们需要快速配置的服务器上安装的东西,并且他们不会做足够的工作来麻烦安装其他东西。给出选项时,很少有人选择使用vim,实际上很少知道所有这些功能或怪癖。典型的用户期望箭头移动光标-这是预期的行为。其他所有都是意外行为,应该将其记录为一个关于意外行为的错误。
ArtOfWarfare

@ArtOfWarfare您可以随意选择“期望”。我将其定义为代码作者所期望的,因为它们在VIM手册中已经非常清楚地说明了它的行为方式……来自:help compatible:“默认情况下,此选项处于启用状态,Vi默认值用于为那些想要像Vi一样使用Vim,甚至不(不想)知道“兼容”选项的人选择了此默认值。”
villapx

@ArtOfWarfare基本上,VIM作者在编写此部分代码时明确考虑了特定的受众,并且仅仅因为该受众与您的受众有所不同,并不意味着它是一个错误。如果愿意,可以将其报告为错误,但要准备好被VIM基本原理家(以及实际上尊重RTFM的“手册”的任何人)指责。
villapx

17

要在编辑模式下禁用按箭头打印字母,您可以执行以下操作

vi $HOME/.exrc 

(如果文件不存在,则创建文件),然后在其中添加行set nocompatible并保存。


我把它放在.vimrc中。为什么将它放在.exrc中?
pauljohn32

Vim都提供源代码-查看:version加载顺序的输出(也可以:h .exrc:h init)。我想有人可能希望在vi和vim中都应用设置,或者可能是习惯的纯粹力量。
威廉·罗伯逊

11

vi编辑器中有以下三种模式:

  • 命令模式
  • 输入模式
  • 默认模式。

当您打开文件时,您处于默认模式。现在,如果你想要去在文本中的特定位置,只要使用方向键或使用hjkl键。需要注意的是,当你没有按这只会工作i(或任何其它输入模式进入命令状aAI)。

“ B”的原因可能是因为输入模式下的箭头键不能用作箭头键,因此只要Esc随时按进入默认模式即可。当转移到输入模式按ia,和导航只需按下i键和使用箭头键或hjkl


7

我遇到了完全相同的问题,但不仅在我的本地计算机上,而且在通过Citrix接收器在Win7 VM中的Sles计算机上通过腻子进行的连接上,我都遇到了同样的问题。重新安装Ubuntu后,本地主机和远程主机均显示完全相同的问题。

找出来之后

$ localectl list-keymaps 
Couldn't find any console keymaps.

导致这种奇怪的VI行为,我安装了解决问题的软件包console-data!

sudo apt-get install console-data

3

注意:

其他帖子中提供了很好的信息,但是没有一个帖子试图解释为什么发生此行为。将来,很多人一定会偶然发现这一点。另外,由于以前的任何帖子都可能对您有所帮助,您是否可以将此问题标记为已解决?


这是一个解释

Vi是一个已经存在了很长时间的编辑器,其起源可以追溯到Unix系统。这是一个很好的工具,但是已经迭代了,现在有了更好的工具。Vim是后来写的,就是那个迭代。人们通常将vi称为“最小的vim”,而vim是vi的“改进”版本。您可以这样想:vi是核心,而vim在此基础上进行扩展。

您可能是如何发现此行为的

为了发现此问题,您按“ i ”进入插入模式,然后使用箭头键导航正确的行和编辑点。这就是导致您意外的char问题的原因。

解决方案1或2

1)vi someFile使用vi时,首先移至编辑点,然后进入插入模式。

2)vim someFile简单地从一开始就使用vim

我没有足够的压力来阅读手册(手册页)或使用-h寻求帮助。一旦适应了外壳中的模式,手册页就会成为您最好的朋友。示例:man viman vim


验证是否已安装Vim

打开控制台窗口并执行:

dpkg --list | grep vim

如果您得到类似的东西,那么您就可以开始使用vim了。

~ $ dpkg --list | grep vim
ii  vim         2:7.4.052-1ubuntu3  amd64  Vi IMproved - enhanced vi editor
ii  vim-common  2:7.4.052-1ubuntu3  amd64  Vi IMproved - Common files
ii  vim-runtime 2:7.4.052-1ubuntu3  all    Vi IMproved - Runtime files
ii  vim-tiny    2:7.4.052-1ubuntu3  amd64  Vi IMproved - enhanced vi editor - compact version

如果命令提示符未返回任何内容,则说明未安装vim。使用以下示例更新存储库,然后安装vim。

sudo apt-get update
sudo apt-get install vim

只有在网上搜索如何解决问题时才使用vi或vim的偶然机会,而您碰巧忘记了键入内容vim,有一种方法可以为将来修复。我警告您要注意。您可以使用别名使用对vim的引用覆盖vi,这样无论您在将来遇到什么,无论输入什么内容,vim都不会出现“糟糕!”。时刻。您以后随时可以删除别名。

输入vim .bashrc。向下移动到仅包含一个空行~(或任何其他以开头的行alias(因此它们组合在一起)),然后按i键进入-insert-模式。在其单独的行中,输入以下内容:

alias vi='vim'

Esc,然后键入:wq。现在,您需要重新加载文件。键入source .bashrc在进行这些编辑后打开的任何其他外壳,将自动加载.bashrc文件。


3

给出的所有解释都有些奇怪。我有vi但没有安装vim。

检查替代方案:/etc/alternatives/vi/usr/bin/vim.tiny

那么vivim.tiny,它使用/etc/vim/vimrc.tiny

在其中vimrc.tiny找到以下行:

set compatible

这几乎是该文件中唯一的东西。请注意,/etc/vim/vimrc其中正在使用nocompatible

因此,要么安装vim,要么更改vimrc.tiny文件,或者创建自己的文件,~/.vimrc其中应包含以下行:

set nocompatible

1
我不确定是什么奇怪的事。您最终会建议1.安装Vim-askubuntu.com/a/220072/158442,2 .创建~/.vimrc和设置nocompatibleaskubuntu.com/a/353944/158442或3.编辑系统文件。只有编辑建议/etc/vim/vimrc.tiny是新建议,而您却在提出与建议相同的建议时称呼答案很奇怪。
muru

1

传统的vi编辑器无法识别箭头键(... afair)。有两种解决方案:

  1. 使用vim代替vi
  2. 使用h,j,k和l进行导航(在传统的vi btw上进行编辑时无法导航。)

这不是真的 查找terminfo / termcap和基于libcurses的应用程序。自1990年以来,我在Xenix,SCO Unix,AIX,旧的hpux等中使用vi,而80年代的pure-vi已经支持terminfo / termcap映射。
卢西亚诺

@ james-wong那么我应该改一下答案。要“在Ubuntu下纯vi不会...”
MadMike

...这是对@luciano的评论
MadMike 2015年


1

在某些系统上,该nocompatible选项不可用,或者如果插件中断了箭头键功能,则该选项可能无法解决问题。这是一种解决方法...

编辑.exrc文件以包括以下几行:

map! ^[OA ^[ka
map! ^[OB ^[ja
map! ^[OC ^[la
map! ^[OD ^[ha

或者,如果问题仅在正常模式下存在,则可以更改为nmap并跳过以下内容a,如下所示:

nmap! ^[OA ^[k

等等。

这是生产它们所需的组合键(仅显示第一个):

map! <CTRL-V><Up-Arrow> <CTRL-V><ESC>ka

这会退出编辑模式,向所需方向移动,然后重新进入编辑模式。克服Vi读取转义序列作为原义<ESC> <O> <A>的序列等问题是需要的。

资料来源:https : //hea-www.harvard.edu/~fine/Tech/vi.html


1

对于VI,创建或编辑文件“〜/ .exrc”或VIM创建或编辑文件“〜/ .vimrc”或在行中添加。

set nocompatible

在撰写本文时,有人对第二个投票最多的项目表示赞赏,他们想知道为什么不接受他们的输入。原因是有些主机不允许安装其他编辑器。即使那样,vim有时也会产生相同的效果,因此前两个条目中有很多可用信息。但是,我无法发表评论,希望这能弄清为什么100%都没有100%正确的原因。


0

在这个机器上,我不得不make sure

set nocompatible

last entry in ~/.vimrc。或至少最后一个条目之一,尤其是之后没有再加载任何插件。

高温超导


0

由于某些原因,Ubuntu省略了在新的18.04 VPS上为root用户初始化envvar HOME的操作。在这种情况下,vi无法找到.vimrc文件。对于普通用户(在/ home /中),不会发生此问题。

要检查变量:

echo $HOME

如果这导致空白行,则不设置变量。问题消失了

export HOME=/root

我将命令移至/root/.bashrc文件(我不知道通常在何处设置)。

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.