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


用于↓,我得到B,
对于↑,我得到A ,
对于←我得到D,
对于→我得到C。

请帮助我解决此问题。

评论

我很高兴地读了标题;)我确定有XKCD可以使箭头键打印字母时(对于新手用户而言)有怪异的感觉。

这非常可怕;)

#1 楼

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

vim ~/.vimrc


将此行添加到文件顶部:

set nocompatible


保存文件,这应该可以为您解决问题。 :)

评论


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

–tgun926
15年1月30日在23:38

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

–tzi
15年7月22日在14:47

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

– Mohit
16年1月23日在12:41

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

–高拉夫·曼彻达(Gaurav Manchanda)
16年1月24日在19:34

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

– daVe
16-09-27在13:15

#2 楼

安装vim软件包将解决此问题:

sudo apt-get install vim


YouTube或整个网络上有很多很好的vim / vi教程。
对于您的问题,请参阅文章8 Essential Vim编辑器导航基础知识。

然后继续照常打开文件:

vi desired-file


评论


为我工作-尽管不确定为什么这与我之前启动的vim不同

– Amos Folarin
17年1月9日在13:49

这应该是被接受的答案(但似乎没人在接受)。这是将vim完全“现代化”到计算机控制台的最简单/最干净的方法(而不是tty / ANSI时代的终端。

– Lockszmith
17年8月1日,1:15

是的,我同意您的观点Lockzsmith,这应该是公认的答案

– niccolo m。
17年9月28日在23:12

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

–ArtOfWarfare
18年1月20日在17:15

BLEEPIN的计算机!

–克里斯
19年1月24日在15:54

#3 楼

使用vi,单击i时,将激活用于插入文本的命令。
此命令允许您在文件中插入文本。
然后,在↑上单击:


,将在其上插入“ A”,在↓上单击,将插入“ B”,

...


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



↑向上,

↓向下,
。 ..


FYI,以下是一些vi命令:从此来源。

:x返回退出vi,将修改后的文件写到原始调用中命名的文件:wq返回退出vi,将修改后的文件写到原始调用中命名的文件中:q返回退出(或退出)vi :q!即使没有为此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将当前行复制(猛拉,剪切)到缓冲区Nyy将包括当前行的下N条行复制(猛拉,剪切)到缓冲区p将行中的行粘贴到缓冲区中当前行之后的文本

0(零)将光标移至当前行的开头(带有光标的那个)$将光标移至当前行的末尾w将光标移至下一个单词的开头b移动光标返回到前一个单词的开头:0 Return或1G将光标移至文件的第一行:n Return或nG将光标移至第n行:$ Return或G光标将移至文件的最后一行

/string向前搜索文本中出现字符串?string向后搜索文本中出现字符串n移至下一个出现搜索字符串N移至下一个出现相反方向的搜索字符串

评论


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

–James Wong-恢复莫妮卡
2015年9月6日在7:49

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

–villapx
16年1月1日在15:30

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

–ArtOfWarfare
18年1月20日在17:13

@ArtOfWarfare您可以随意选择“期望”。我将其定义为代码作者所期望的,因为它们在VIM手册中已经很清楚了……应该如何表现... from:helpcompatible:“默认情况下,此选项为开,Vi默认为该默认选项是为那些想要像Vi一样使用Vim且甚至不希望'兼容'选项的人选择的。”

–villapx
18年1月22日在20:43

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

–villapx
18年1月22日在20:45

#4 楼

要在编辑模式下禁用按箭头打印字母,您可以执行以下操作:创建文件(如果不存在),然后添加行set nocompatible并保存。

评论


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

–pauljohn32
17年3月19日在2:54

Vim都提供源代码-有关装载顺序,请参见:version的输出(另请:h .exrc或:h init)。我想有人可能希望在vi和vim中都应用设置,或者可能是习惯的纯粹力量。

–威廉·罗伯逊
17年5月27日在8:46

这是答案

–kev
20年4月14日在17:35

#5 楼

vi编辑器中有三种模式,分别是:


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

当您打开文件时,您处于默认模式。现在,如果要转到文本中的特定位置,只需使用箭头键或使用h,j,k,l键即可。请注意,仅当您未按i(或其他任何输入模式输入命令,如a,A,I)时,此方法才有效。

之所以'B'可能是因为输入中的箭头键模式不能用作箭头键,因此只要按Esc即可随时进入默认模式。何时切换到输入模式,请按i或a,然后只需按i键并使用箭头键或h,j,k,l进行导航。

#6 楼

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

在发现

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


后,由于出现了这种奇怪的VI行为,我安装了可解决该问题的软件包console-data!

sudo apt-get install console-data


#7 楼

这是一个解释:
Vi是一个已经存在了很长时间的编辑器,其起源可以追溯到Unix系统。这是一个很好的工具,但是已经迭代了,现在有了更好的工具。 Vim是后来写的,就是那个迭代。人们通常将vi称为“最小的vim”,而vim是vi的“改进”版本。您可以这样想:vi是核心,并且vim在其上扩展。
您是如何发现该行为的:
为了发现此问题,请按“ i”进入进入插入模式,然后使用箭头键浏览正确的行和编辑点。这就是导致您意外的char问题的原因。解决方案1或2



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


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文件。

#8 楼

这也可能是由于TERM变量引起的。像这样设置它:

 export TERM=xterm
 


评论


这为我解决了其他答案没有解决的问题。谢谢!

– greg
18年7月20日在10:33

#9 楼

给出的所有解释都有些奇怪。我有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.安装Vim-askubuntu.com/a/220072/158442,2.创建〜/ .vimrc并设置不兼容:askubuntu.com/a/353944/158442或3.编辑系统文件。仅编辑/etc/vim/vimrc.tiny的建议是新建议,但您在提出与它们相同的建议时却称呼答案很奇怪。

–大师
17年1月11日在2:27



我同意Gunstick。其他答案取决于他们如何使用vi,而没有直接告诉用户如何使箭头键起作用。另一个奇怪的事情是,“设置不兼容”的建议绝不会伴随着对原始设置的作用的具体解释,或者与将其更改为“设置不兼容”相关的危险(github.com/vim/vim/issues/1131) )

–pauljohn32
20年5月13日,1:17

#10 楼

在某些系统上,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读取转义序列作为原义 等序列的需要。

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