“千万不要在Vim中使用箭头键!”
我是从一个随机的发言者那里听到的,但没有机会问他为什么。另外,如果不使用箭头键,如何在“ 插入”模式下移动光标?
“千万不要在Vim中使用箭头键!”
我是从一个随机的发言者那里听到的,但没有机会问他为什么。另外,如果不使用箭头键,如何在“ 插入”模式下移动光标?
Answers:
使用箭头键被认为是一个坏习惯,因为如果您使用箭头键,可能会错过许多vim可爱的功能。
当人们第一次开始使用vim时,他们倾向于停留在插入模式,因为这更像传统的文本编辑。为了使vim有效,只有在实际输入文本时才应处于插入模式。如果要移动光标,则应处于普通模式。默认情况下,您应该几乎处于正常模式。
在正常模式下,有一百万个快捷方式可以四处移动。您可以使用hjkl
一次在一个空间中移动,也可以按单词,段落等移动。如果您处于普通模式,则没有必要使用箭头键代替,hjkl
因为它们距离较远。
有一种态度是,如果您使用箭头键,那么您将使用vim“ wrong”。事实是,vim的学习曲线非常陡峭,因此在学习时,请尽一切努力保持理智。刚开始使用vim时,我以“错误”的方式进行了所有操作,一旦了解了更多vim的命令,我就不会在打破习惯上遇到任何问题。
例如,当我第一次开始时,说我想更改引号中的文本:
String mystring = "I want to change this";
我将进入插入模式,使用箭头键移至字符串的末尾,按Backspace键直到字符串消失,然后输入新文本。
更好的方法是将光标放在字符串中的任意位置(正常模式),然后按ci"。这会change
in
"
。它将删除引号之间的所有内容,并使您进入插入模式,以便我可以输入新文本。
ci<
也可以ci)
正常工作,而不必将手从键盘移到鼠标。如果要导航到方括号的开头,然后更改内容即可f(ci(
。
/want
并按Enter键以落在单词'want'上,然后执行do ci"
。
hjkl
:映射up
和down
2个在垂直方向上无法区分的键,更不用说从左右键了.....这是意识形态盲目傲慢的悲剧性例证。
简而言之,Vim
将这些hjkl
键用作导航界面是因为它是旧的“ ADM-3A”终端的残余物,该终端用箭头标记了这些键。
由于
vim
是从派生的vi
,因此使用相同的hjkl键。
基于字母的箭头键替换使您可以浏览文本,而无需离开标准的键入配置。可以说,这比动手敲击箭头键更有效和更快。正如参考文献2中概述的那样(请参阅参考资料),这并不意味着该优点的尽头:VIM还有许多其他快捷方式,您可以在不动手的情况下进行访问。
对于您的问题的两个部分,有一些非常详细而准确的答案:关于箭头键的替换,我已经以快速和简要的方式回答了,但是对于您的插入问题,请参见下面列出的资源。
hjkl
不能在插入模式下工作,那么这如何解决问题?
hjkl
在vim中使用的事实并不能说明为什么不应该使用箭头键,就像我可以骑自行车上班的事实并不能解释为什么有人会告诉我不要慢跑。
这种愚蠢的口头禅经常会被那些触手可及的人(通常是第二根脊柱)或那些想看起来很酷的非触笔技术员重复。对于非接触式打字员来说,主行根本不是那么特别,并且稍微移动右手以到达箭头根本不是问题。
重要的是要考虑重复此口头禅的人建议使用的内容。
大多数时候,他们坚持使用hjkl
。
如果我们忽略了仅由于vi的作者使用的键盘没有物理箭头键而使用这些键的事实,并且因此反对该箭头键的任何论证都只是合理化的话,hjkl
则无论如何都仅比箭头略胜一筹。是的,使用hjkl
箭头上方的唯一好处是可以跳过右手与箭头之间的微小移动。这种好处是否值得您麻烦。
但是右手的移动并不是为什么仅使用箭头效率低下的原因。这是低效的,因为它们会限制您逐字符和逐行移动,而编辑文本所需的大多数移动都具有很大的范围。
将右箭头锤打13次效率低下且令人厌烦。难道是更好地捶了l
关键的13倍?不,这同样愚蠢。
按住向右箭头直到到达目标会比较无聊,但它容易出错,几乎没有效率,因为最后需要进行不必要的确定性减速,因此命中率高达13次。难道是更好的保持l
按键?不,当然不。
值得庆幸的是,大多数GUI工具包都提供了这样的组合Ctrl+Right
,使我们可以逐字移动或跳至EOL,下一段或其他内容。这些快捷方式比单箭头帮助我们更快,更智能地导航。我们有一样hjkl
吗?不,我们不。如果需要,我们可以使用计数,但是谁愿意为每个动作计数字符?在14k
的帮助下这样做relativenumber
很棒,但是水平运动呢?对于大运动,hjkl
实际上比修饰符+箭头更糟糕。你猜怎么着?大动作是我们最需要的。
但是我们是幸运的混蛋,我们最喜欢的编辑器有几十个动作,它们围绕箭头和 hjkl
:围成圈bBeEwW/?*#{}()
,依此类推。这些命令没法比更赋予比hjkl
和大部分有很多更合乎逻辑的和直观的,如果你是用来Ctrl+Right
和朋友。
从切换<Right><Right><Right><Right><Right><Right><Right><Right><Right>
到lllllllll
甚至9l
是毫无意义的。
从切换<Right><Right><Right><Right><Right><Right><Right><Right><Right>
到<C-Right>
更好。从那里,切换到w
既方便又快捷。无需<nop>
您的箭头!
如果这些命令比更加有用,更强大,更直观hjkl
,那么为什么这么多博客作者和评论者坚持要用替换箭头hjkl
?
我有。不知道。
总而言之,hjkl
在我们的工具栏中保留它们的位置是因为我们总是必须移动2个字符或2行,但它们通常不是隐藏森林的树。警惕那些鼓吹箭头的人们:他们为您准备的东西可能根本无法改善。
hjkl
是没有用的,但却hjkl
是有用的。
其他人已经描述了为什么最好使用其他方式移动光标,但很少有人回答这个问题,为什么使用箭头键被认为是一个坏主意?
我认为主要原因(和@Squeezy对此有所暗示)是,在像VT100这样的终端时代,箭头键产生了一个转义序列,该序列由正在运行的程序解释。(由于箭头键没有用ASCII表示,因此箭头键的键入必须以某种“特殊”方式进行通信。)转义序列通常类似于
ESC [ A
取决于终端的属性,连接和光标模式。如果没有为终端正确配置您的Shell或程序,他们将无法将转义序列理解为箭头键。
当我上大学时,通过VT100终端登录Ultrix,如果在插入模式下在vi中按下箭头时,该命令ESC
将解释为“退出插入模式”,然后将以下内容[ A
解释为普通模式命令。显然不是用户想要或期望的!
如今,终端和箭头键的处理似乎更加健壮,尤其是在GUI环境中。但是,通过SSH或Telnet使用vim时,仍然会发生相同的问题。
使用箭头键是令人讨厌的,因为使用QWERTY布局时,它会迫使您将手指从Homerow中移开,而使用Dvorak或任何其他布局时,则会使您从字符板(?)中移开。
箭头键在速度较慢的连接(例如1200波特调制解调器)上会出现问题-在vi中是已知的。箭头会转换为ESC序列,例如ESC a
。现在,当ESC和a之间的时间过长时,您最终会听到BEL(或看到闪光),然后听到追加模式。这不会与hjkl
键一起出现。
ESC [ A
你指的是什么?
ESC [ A
是DEC VT-100端子(ANSI端子是DEC VT-100的强衍生形式)箭头。IIRC ESC A
是ADM-3A箭头,也可能是DEC VT-52箭头。要点保持不变,但是,ESC
作为箭头键一部分发送的字符很容易与ESC
手动键入混淆。
关于第二个问题:
[I]如果您不使用箭头键,如何在“插入”模式下移动光标?
对于一个熟练的人,因此不喜欢箭头键,“模式”的概念同样不存在。
主增加了使用不插入模式新的文本,而是完整的插入或更换命令与操作码如开始i
,o
或cw
后跟净荷文本,以及通过封端ESC
。命令具有语法,因此机器在接受命令语法时会遍历状态,但是在编辑器的主人模型中,这些命令不会产生模式。学徒天真地称其为“模式”,对主人来说是未完成的命令状态,这是主人避免的最可恶的情况。
只要母版机意识到,在插入或替换命令的中间,必须在光标所指示的下一个字符位置之外插入或删除文本,母版机就会终止插入命令,并释放数十种有效命令之一运动命令(hjkl
如果显然无法使用更强大的方法,则排序至最低级别)。
另外,由于母版很少分散注意力,以致无法完成命令,因此母版很少(如果有的话)会因输入多余的ESC
“以防万一” 而使编辑器发出蜂鸣声。
(但是,当网络滞后或机器陷入瘫痪时,主机会ESC
像其他所有人一样反复疯狂地敲击密钥。)
vi
的insert命令输入是模式,那么为了公平起见,我们必须在其他编辑器中识别所有此类模式,并将其称为模式。例如,当我们在Emacs中按Ctrl-X时,我们处于“模式”,例如,可以按Ctrl-S保存文档,但在该“模式”之外无法使用。
如果不使用箭头键,如何在插入模式下移动光标?
我不鼓励人们使用箭头键的主要原因是明确的,因为它允许您在插入模式下四处移动。
对于初学者来说,学习vim的最奇怪的问题之一是vim的undo命令通过撤消上一个动作而不是最后一个击键来操作。我的许多朋友最终一直都处于插入模式,因为从来没有理由离开它。当他们问我“我如何撤消?” 我回答“从命令模式下敲击字母u”,当vim清除整个文件时,它们会感到沮丧。
“如果无法正确撤消操作,Vim是一个非常不值钱的文本编辑器。”
在了解如何之前,很难使用工具。
只有在您了解了如何使用Vim之后,Vim才变得有用。vim的力量在于您如何通过潜意识的肌肉记忆告诉它“再次执行该操作”或“撤消该操作”或“仅当我按下此宏热键时才执行该操作”。我同意,如果“那件事”变成“从头到尾键入整个文件”,vim根本没有用。
因此,您仅在进入时才应输入文本insert mode
。避免使用箭头键只是我们发现的一种帮助您更快地成为更好的vim用户的方法。
在将vim封装到在kbox中运行ssh守护程序的Android设备中运行时,使我脱离了自己的舒适区。由于设备上的Anroid终端仿真器使用音量按钮来代替特殊的组合键(Ctrl +其他),因此在这种情况下,我通常会在键盘上使用的某些键不起作用。
例如,Insert键在这种环境下不起作用,因此我正在使用I
切换到插入模式。我通常用来转义插入模式的Esc键也不起作用,所以我改用ctrl + [
转义。Home和End键无法按我惯用的方式工作。相反,我依靠之前从未使用过的0
和$
快捷方式来到达行的开头或结尾。
无论如何,箭头键在我的情况下仍然可以正常使用,但是很高兴知道那里有简约的键盘快捷键。