在Vim中,为什么使用“j”表示向下,“k”表示向上?

81

我多年来一直在使用Vim,从来没有真正考虑过它。我的一个朋友问为什么会这样,指出在我们的文化中,左边通常映射到上方,而右边则映射到下方,使得Vim键盘反过来了。

我知道它们位于主键盘行,这意味着你不需要将手指移动到其他位置就可以按下它们,但这是完全不同的问题。

为什么这些键被赋予了现在的作用?是否有关于这个决定的文档记录?


5
引用 Crockford 的话:“似乎一旦某些愚蠢的东西进入,要将其排除需要很长很长的时间。” :-) http://developer.yahoo.com/yui/theater/video.php?v=crockonjs-2 - Courtney Christensen
5
你认为为什么左通常对应上,右对应下。我之前从未想过,但感觉应该是相反的。可能纯粹是因为我是右撇子(但我们大多数人都是),所以右方感觉更积极,向上也是如此。嗯。我只是好奇为什么你的自然反应是看到相反的方式。不过这绝对不是讨论这个问题的地方(也许可以去心理学.stackexchange - 如果这样的地方存在的话)。 - tjm
4
@tjm,我同意“right feels down”的意思是我们从左到右阅读。一旦你到达行末,下一个字符总是“向下”的... 只是一个想法。有没有母语为从右到左阅读的人对此有不同看法? - Courtney Christensen
当使用拉丁字母时,文本从页面的左上角开始。我认为将“j”键指向上方会更直观。这将使左方向键(“h”和“j”)将我们带回页面的“开头”,而右方向键则将我们带到“结尾”。 - onewhaleid
2
抱歉回复这么老的帖子,但我认为j键应该在上方有两个原因。 1)你的中指休息在j键上,对于绝大多数人来说,中指是最长的手指,因此比其他手指更向上指。 2)大多数人习惯使用光标键,其中上下键排列在一起,这意味着除非你进行某种手指技巧,否则中指既作为向上又作为向下,所以当你用第四个手指向上时,感觉就很奇怪。 - DRendar
有时我会把k想象成油门,它让我前进;而j则是刹车,它让我后退 :) 尽管经过这么多年,有时我的逻辑也会变得混乱。为什么左侧的大括号 [ 和 { 与向上移动(如“之前的文本”)相关联,而左侧的j却让我向下移动呢? - Halil Özgür
7个回答

106
答案在维基百科关于vi的条目中。 Bill Joy编写了ex的可视模式,后来成为Vim的前身vi - 使用了一个Lear Siegler ADM-3A 终端,其中HJKL键映射到左、下、上、右 - 从那时起就一直是这样了。
以下是键盘布局:

keyboard layout of the ADM-3A

ADM-3A布局的另外一些要点:

  • 在Q键左侧:逃脱键 - 比现代键盘上的位置更方便,因此是在正常模式和插入模式之间切换的好选择。
  • 右上角:'Home'键兼作波浪符(~),后来成为Unix用户的主目录的简写。

3
啊,糟糕。你比我快了一分钟。 - user616736
63
ADM3A为什么使用J作为向下键,这就是现在的问题。 - geowa4
1
我希望他们最终能够移除大写锁定键。 - Neil G
19
@geowa4,J可能失效是因为在ASCII中Ctrl+J代表换行符。ADM3A终端比电传打字机稍微智能一些,因此这种巧合可能会在实现中简化一些事情。请注意,Ctrl+H是ASCII退格键,对应于向左... - RBerteig
我看到有些人建议将大写锁定键重新映射为Esc键,以恢复使用的便利性 :) - Jack Simpson
显示剩余2条评论

25

vimtutor 提供了一个提示“J”看起来有点像向下指向的箭头,虽然这可能或可能不是选择它的原始原因。


20
另一种记忆方式是,j 有下行部分,而 k 则有上行部分。 - hammar
如果你正在阅读一段文字,按 H 键会回到已经阅读过的内容,而按 L 键则会跳转到接下来的内容。因此,我认为按 J 键应该仍然是“返回”,即向上移动一行。 - ecoologic

15

这只是一个猜测,但是:Ctrl+J字符是“换行符”,在传统的TTY上会向下移动一行,提供了一个助记符。在Qwerty键盘上,K紧贴着它,在处于主位置时右手第二个最常用的手指下面。


关于前述ADM3A终端布局设计的合理故意巧合。 - interestedparty333
计算可能是像ASCII 74(J)- 64(Ctrl)= ASCII 10(LF / Line Feed)这样的东西。 - Peter Mortensen

3

为了补充所有答案,这里附上了ADM-3A键盘的照片(Vim就是在这个键盘上创建的)。

P.S:我希望他们使用WASD

请在此输入图像描述


2

从用户体验的角度来看,在打开文件后,你总是首先向下移动,而向下移动通常是一个更频繁的操作。由于从左到右是我们大多数人的自然方向,因此将你首先执行或更频繁执行的任务与左侧的键关联起来是有意义的。你可以尝试交换这两个键并判断哪种方式更好。对我来说,“J”键表示向下更自然、更舒适。


1
让向下箭头在向上箭头之前先出现。我不确定您所说的“先出现”是什么意思,因为我在键盘上没有看到方向感,但我认为我们都同意用食指按键比用中指更容易。因此,使用几乎总是在食指下的键作为向下键是有道理的,因为这是在文件中导航最常见的方向。 - JoL
对我而言,如果 A 在 B 的左边,那么说 A 在前面,B 在后面会更自然。我更喜欢把我按的键放在左手而不是右手,尤其是先按或更频繁按的键。这样更自然、更舒适。 - sunquan

2

在终端中运行vimtutor可以查看相关内容。它解释道:

按下 h 键光标向左移动。

按下 l 键光标向右移动。

按下 j 键类似于向下箭头。


1

我一直认为这是因为在Dvorak键盘布局上,j和k也是相邻的。在Dvorak和A/QWERTY/Z键盘中,拥有这种属性的按键不多。


这个问题实际上是关于为什么在这种布局中使用J向下,K向上(为什么不用K向下)的原因。 - sunquan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接