为什么在正常模式下使用箭头键被认为是不好的做法?


43

我在许多文章(例如)中都读过它,在正常模式下使用箭头键是一种不好的做法。有人可以解释为什么这被认为是错误的做法吗?


5
不使用hjkl的一个很好的理由是,如果您使用另一种键盘布局。例如,在Dvorak中,hjkl在空间上不相关,因此很难使用。
凯洛斯18-3-27

1
hjkl在德沃夏克(Dvorak)中使用的@Kylos 。绝对不如qwerty明智,但是我不知道我会称其为“难以使用”。它们只是钥匙,而且一旦您习惯了它,也不难找到它们。
Dougal

2
有很多神话为什么hjkl应该是移动文档的最佳选择。事实是,hjkl在创建vi时,某些键盘上的箭头键处于打开状态,因此vi在正常模式下使用相同的键来匹配键盘布局。这是一篇带有键盘照片的文章:catonmat.net/blog/why-vim-uses-hjkl-as-arrow-keys
allo

8
任何以困难着称的事物都会吸引某种人。Crossfit,Vim,函数式编程,素食主义者等。现在当然不是所有从事其中一项活动的人都是这种人,但是他们经常不成比例地出现。对那个人的吸引力的一部分是活动本身困难。降低准入门槛的事情使他们感到厌恶:这使它们不那么特别。有理由喜欢hjkl。好的。但是,它们至少在某种程度上被夸大为教条,因为人们不得不觉得自己比别人更好。
贾里德·史密斯

@Kylos我同意这hjkl不是德沃夏克最好的。但是作为一个打折的用户,我发现它们很方便,因为它们是配对在一起的:就像在jk板的一侧;而hl 在另一边。
尼隆

Answers:


66

实际上,这不是一个坏习惯。

许多人(包括Vim的文档,如@B Layer的答案所示)都认为您不应使用箭头键,因为这会使您的手从主行(键盘所在的第二行)移开hjkl,从而使效率降低。

这(至少是IMO)是vim“纯粹主义者”圈子混蛋的一个坏结果:新用户盲目地遵循此规则,有些用户甚至禁用了箭头键,然后他们抱怨自己的效率不如以前。

唯一真正的规则,用vim是有效地使用它:如果你感觉更舒服使用Left,并Righthl 吧,请使用箭头键。set mouse=a如果您想使用鼠标,Vim甚至可以选择!

一旦你习惯了vim和获得与不同的运动提供更好的(ft,;wbege,基本上一切:h quickref),你可能会意识到,你不使用箭头键的不多。而且,如果您仍然使用它们,这不是问题,请使用最有效的方法。

注意,我认为“不离开主行以提高效率”的论点并不是那么好:如果您看一下为什么vim使用hjkl,您会发现选择了这些键是因为没有任何箭头编写Vi时的按键。有人可能会辩称,如果此时键盘不同,那么没人会认为不使用箭头键是一种好习惯。


13
我经常发现自己的手腕弯曲得很厉害,无法触到箭头键,因为我已经习惯了它们。我最终禁用了箭头键,使自己习惯于hjkl减轻手腕上的疼痛。
Shahbaz

9
我想指出的是,这只会在QWERTY键盘上引起轰动。对于某些布局,hjkl可能是真正的痛苦。
teteyr

1
您可以使用这两个选项:无论您选择hjkl还是箭头,都可以绑定另一组上/下键以按屏幕上的行而不是文件行移动。在编辑行较长的文件时会很有帮助。
user31389 '18

1
在阅读您的答案之前,我没有意识到我几乎不使用hjkl和方向键,因为我已经习惯了您提到的高级运动命令。好点子!
Spiros

4
但是很多我很欣赏你对我的眼正确的答案,我能请在你占上风的同胞主持人和VI爱好者到尝试你最难找到一些不太“破旧”替代措辞来圈混蛋不唤起生动地干扰图像只在彼此陪伴下自慰的男孩或男人的无裤环‽ 高兴吗?:)
tchrist

40

我不知道这是否真的有用,但是我是老朋友,所以这里有一段历史。

在过去,VT100终端带有箭头键,但是按下该键会发送一个转义序列,例如<ESC>[A向上,<ESC>[B向下等。
此外,作为串行终端以9600波特进行通信,用户可能会过快按下这些键传输整个序列,这将导致一次按键中断上一次按键的序列并使vi混乱。

这将导致vi莫名其妙地进入插入模式,并在按住向下箭头的情况下将[B [B [B [B [B [B [B] B]插入到您的文件中。我莫名其妙地说是因为此序列没有任何内容应进入插入模式,并且每个序列以ESC字符开头的事实都应该退出了插入模式。但是仍然会插入垃圾。并非总是如此-只是在您急忙时。

一个很快就厌倦了这一点,决定只坚持hjkl钥匙。


8
无论出于何种原因,TCP终端程序仍然使用基于转义的箭头键,并且仍然没有任何100%可靠的方式来区分按转义键与发送箭头键转义序列的第一个字节。
超级猫

1
@supercat他们确实有一种可靠的方式来区分它们。使用SC81T进行调用。问题更多是许多程序不进行协商,而某些终端可能不支持它。
jamessan

1
@jamessan:如果我没看错,您的建议是,将转义与箭头键区分开的可靠方法是不使用基于转义的箭头键,这与我的“无论出于何种原因”有关仍在使用转义程序的注释相关联-基于箭头键。
超级猫

嗯,我有一个可以模拟VT100的旧IBM终端,可能必须尝试一下
一条发条

3
我当然可以肯定这是正确的,至少在80年代时如此,因为这个原因,我们不得不在本科生候机室张贴标志,不要在vi中使用箭头键。当tty驱动程序丢弃中断时,他们不断弄乱文件。
tchrist

28

尽管我同意@statox的意见,但如果他们选择使用箭头键,则任何人都不应受到鞭打,回避,驱逐或涂柏油和羽毛...使用您的软件,但您认为合适...我不会冒充如果我要为思想开放的新用户提供指导,那将是一种自由放任的态度。我强烈建议他们从遵循最佳做法开始。由于某种原因,它们是“最佳实践”……它们已经被许多在您我之前出现的人所采用,并取得了良好的效果。

哎呀,即使是Vim自己的帮助,也会朝着这个方向推动您,尽管并非夸张(“ 大大减慢”)...

您也可以使用箭头键移动光标。但是,如果这样做,则会大大降低编辑速度,因为要按箭头键,必须将手从文本键移到箭头键。考虑到您可能每小时要进行数百次操作,因此可能会花费大量时间。

还有一个事实是,您一开始所做的任何选择都可能会成为习惯,如果您想在将来进行更改,则很难改变。因此,在其他条件相同,为什么不采取推荐的习惯,现在,而不是花的机会,使用箭头键低效或腕杀人呢?

总而言之,请考虑在没有箭头键的情况下进行诚实的工作。经过一段合理的时间后,如果您不能没有上/下/左/右的生活就不要了。

...就是我要对感兴趣的新用户说的话。如果您不同意,请不要个人对待(我是在跟您说话,唐纳德·沃特)。


9
即使您接受它确实比箭头键更好(我什至也不敢相信),它还是所有可能的“最佳实践”列表的最底端。我认为,有很多很多比使用hjkl更重要的事情。
马丁·图尔诺伊

5
@Carpetsmoker我认为没有必要对最佳做法进行排名。除非您强烈希望使用箭头键,为什么不按照Vim的建议进行操作?特别是如果您不熟悉Vim ...我们都知道一旦根深蒂固地改变我们的工作方式是多么困难。
B层

1
“您大大降低了编辑速度”-对我来说似乎有点夸张……尽管如此,我还是认为值得尝试一下。老实说,这还不够重要,无法进行斗争。
Shadow

2
@ BLayer不,不是这里-这是我认为我所见过的关于该主题的最民间的讨论。但是战争肯定已经发生过……
Shadow

1
don't think it's necessary to rank best practices好吧,在我看来,考虑到资源是有限的,生命是短暂的,我们应该专注于赋予我们生命最大价值的事物。我碰巧知道hjkl键是心脏,这是由于童年时代的童年童年在没有数字键盘的笔记本电脑上玩流氓,拉姆,angband等造成的,但是有些人度过了他们的童年,因此无论如何都要“取消学习”箭头键。我认为学习动作,范围等是花费时间的更有用的方法。
马丁·图尔诺伊

16

其他答案表明,将手从主行移开不会带来太大的效率问题,我大都同意。然而,什么一个大问题是,当你正在学习VIM,始终使用箭头键,以避免切换回进入正常模式。

换句话说,使用一个,你会使用一个单一的h不是生产力的巨大损失,但用在这里你也可以使用EscI 一个巨大的损失。

这就是为什么人们告诉您在学习vim时避免使用箭头键的原因,因为这会迫使您学习普通模式,而不是从不离开插入模式。普通模式是您所有效率提高的地方。


1
+1。换句话说:“不要使用箭头键,也不要使用hjkl。” (保留故意夸张。)
wchargin '18

3
实际上,您可以使用1 0 或更简单的方法来代替10次Home。后者甚至可以在Windows记事本中使用。
罗斯兰

7

人们说您不应该使用箭头键的主要原因有两个。有人声称hjkl是首选,因为它可以将您的手放在主行上,这不是false,但也没有关系。其他人(包括我自己)会说,如果要移动多个字符,则不应该使用箭头键,但也不要使用hjkl。

重要的不是使用的是哪个键,而是多少个。如果您想移至单词的开头,请不要打hhh;你打了b。这个词的结尾e不是llll。行的开头:0,行的结尾:$。以及其他所有内容,/search供您查找想要的文本。(或您喜欢的任何高级移动命令)。

但是,只要您发现自己连续多次键入相同的键,就会有更好的方法。


7

一个更精确的说法可能是在尝试更好地学习vim时,使用箭头键是一种不好的做法”。vim的新手习惯于使用箭头键来回走动,因此不要学习hjkl,因此没有机会查看这样做是否可取。

就个人而言,在对vim有了一定的了解之后,我暂时禁用了箭头键以了解其原理,hjkl并稍后重新启用它们以简化我的.vimrc。在我看来,传统观点是成立的。一旦我知道如何同时使用hjkl箭头键和箭头键,我发现自己几乎只能使用前者。


6
我不同意。就像这个博客所说的那样,对于初学者来说,“全有或全无”的方法有助于引起vim的“用户不友好”声誉。新用户开始使用,陷入困境,不知所措,并且(不奇怪)得出结论,vim是一团糟,然后切换回编辑器,使他们可以提高工作效率。-如果您正在学习游泳,则不要将自己从船上扔到大海中。在小孩子的游泳池附近dog狗划水是完全可以接受的,直到您对水感到舒服为止。
RM

2
...并不是说禁用箭头键对人无效。但这是“我喜欢vim,想学习如何更好地使用它”这一步骤,而不是“我对vim是新手并想要学习如何使用它”这一步。
RM

5

通常的答案涉及效率。这些年来,您可能已经接受过使用触摸打字的培训,这需要使您的手保持在asdf和jkl;上。Vi中的绝大多数键绑定都是围绕这一事实而设计的,包括hjkl运动命令。

我个人实际上同时使用了两者。当我积极地编辑大部分文本时,使用hjkl;在日志文件中滚动时,则使用箭头键(在整个文件中进行点编辑时,|,g和/)。这恰好对我很有效,在这种情况下,这才是真正重要的。


2

很久以前,许多终端没有箭头键,或者没有所有四个键。需要导航的软件系统通常提供某种导航方法,而无需依赖箭头键,而vi的hjkl是一个典型示例。(另一个经典的例子是WordStar的^ E- ^ S- ^ X- ^ D。)随着键盘导航的实用性变得越来越明显,越来越多的新终端开始带有箭头键,并且软件系统通常将其映射为旧的方式。导航。但是,这带来了某种可移植性问题:如果在学校训练过的孩子要依靠花哨的新颖功能(例如箭头键),他们的想法是,他们可能无法在曾经很常见的情况下提高生产力。没有方向键的键盘。

因此,基础计算课程的教师开始谨慎地警告学生学习使用最低公分母,以最大程度地提高他们的就业能力。长期以来,这种做法已经没有任何理由。

在vi的现代实现中,偏爱hjkl的主要原因是,使用手下已有的键要快于将手移到箭头键所在的位置。当然,避免进行上下文切换的缺点是您可能需要执行vi的上下文切换。如今,当人们很少通过打字速度来珍惜人类时,您是否执行一项操作几乎完全取决于个人喜好,并且即使有,使用箭头键也没有本质上的坏处。

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.