Dea*_*ean 186
使用箭头键被认为是一个坏习惯,因为如果您使用箭头键,您可能会错过 vim 的许多可爱功能。
当人们第一次开始使用 vim 时,他们倾向于保持插入模式,因为这更像是传统的文本编辑。然而,为了在 vim 中有效,您应该只在实际输入文本时处于插入模式。如果要移动光标,则应处于正常模式。默认情况下,您应该几乎处于正常模式。
在正常模式下,有一百万个快捷方式可以四处走动。您可以使用 一次hjkl
移动一个空格,也可以按单词、段落等移动。如果您处于正常模式,则使用箭头键没有意义,hjkl
因为它们离得很远。
有一种态度是,如果您使用箭头键,那么您就“错误地”使用了 vim。事实上,vim 有一个非常陡峭的学习曲线,所以在你学习的时候做任何让你保持清醒的事情。当我第一次开始使用 vim 时,我以“错误”的方式做所有事情,一旦我了解了更多 vim 的命令,我就没有任何打破习惯的问题。
例如,当我第一次开始时,假设我想更改引号中的文本:
String mystring = "I want to change this";
Run Code Online (Sandbox Code Playgroud)
我会进入插入模式,使用箭头键移动到字符串的末尾,按退格键直到字符串消失,然后输入新文本。
更好的方法是将光标放在字符串中的任何位置(正常模式),然后按ci"。这将change
in
"
。它将删除引号之间的所有内容并将您置于插入模式,以便我可以输入新文本。
Chr*_*art 102
简而言之,Vim
使用hjkl
按键作为导航界面是因为它是旧“ADM-3A”终端的残余,这些按键标有箭头。
由于
vim
派生自vi
,它使用相同的 hjkl 密钥。
箭头键的基于字母的替换使您可以在不离开标准打字配置的情况下浏览文本。这可以说比移动你的手来击中箭头键更有效、更快。正如参考文献 #2(请参阅参考资料)中所述,这并不是优点的结束:VIM 有许多其他快捷方式,您无需移动双手即可访问它们。
您的问题的 2 部分有一些非常详细和准确的答案:在箭头键替换方面,我以快速和总结的方式回答,但是对于您的插入问题,请参阅下面列出的资源。
rom*_*inl 65
这个愚蠢的咒语经常被那些想要看起来很酷的非触控打字员重复,他们认为本行就像第二根脊椎。对于非接触式打字员来说,主排根本没有那么特别,稍微移动右手以到达箭头根本不是问题。
重要的是要考虑重复该咒语的人建议改用什么。
大多数时候,他们坚持使用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 个字符或行,但它们往往不是隐藏森林的树。警惕那些反对箭矢的人:他们为你准备的东西可能根本不会更好。
Lar*_*rsH 19
其他人已经描述了为什么首选其他移动光标的方式,但很少有人回答这个问题,为什么使用箭头键被认为是一个坏主意?
我认为主要原因(@Squeezy 有点暗示)是在像 VT100 这样的终端时代,箭头键产生了一个由正在运行的程序解释的转义序列。(由于箭头键不以 ASCII 表示,因此必须以某种“特殊”方式传达箭头键的输入。)转义序列通常类似于
ESC [ A
Run Code Online (Sandbox Code Playgroud)
取决于终端的属性、连接和光标模式。如果您的 shell 或您的程序没有为终端正确配置,他们就不会将转义序列理解为箭头键。
我上大学的时候,通过VT100终端登录Ultrix,如果我在vi中在插入模式下按一个箭头,ESC
会被解释为“退出插入模式”,然后以下[ A
被解释为正常模式命令. 显然不是用户想要或期望的!
如今,终端和箭头键的处理似乎更加健壮,尤其是在 GUI 环境中。但是在通过 SSH 或 Telnet 使用 vim 时仍然会出现同样的问题。
pdo*_*926 14
使用箭头键是不受欢迎的,因为它迫使您在使用 QWERTY 布局时从 homerow 移动手指,在使用 Dvorak 或任何其他布局时从字符键盘 (?) 移动手指。
ott*_*t-- 10
箭头键在慢速连接(如 1200 波特调制解调器)上出现问题 - 在 vi 中已经知道了。箭头转换为 ESC 序列,如ESC a
. 现在,当 ESC 和 a 之间的时间过长时,您最终会听到 BEL(或看到闪光),然后是追加模式。这不会与hjkl
键一起出现。
关于第二个问题:
[I]如果不使用方向键,如何在插入模式下移动光标?
对于一个高手,因此不屑于方向键的人,“模式”的概念同样不存在。
master 不是使用插入模式,而是使用完整的插入或替换命令添加新文本,这些命令以操作码开头,例如i
,o
或者cw
其后是有效负载文本,并以ESC
. 命令有语法,因此机器在接受命令的语法时会遍历状态,但在编辑器的主模型中,这些不会产生模式。徒弟们天真地称之为“模式”,对于师傅来说,是一种未完成的命令状态,是师傅避免的最可恶的情况。
每当 master 意识到,在插入或替换命令的中间,除了光标指示的下一个字符位置之外,必须插入或删除该文本,master 终止插入命令,并释放数十个有效的移动命令(hjkl
如果更强大的方法显然不适用,则求助于低级)。
此外,由于主控很少会因为留下未完成的命令而分心,主控很少(如果有的话)由于输入了多余的ESC
“以防万一”而使编辑器发出哔哔声。
(但是,当网络滞后或机器陷入困境时,主人会ESC
像其他人一样疯狂地反复敲击密钥。)