为什么vim使用hjkl作为光标键?


56

为什么要hjkl在同一行上使用按键而不是像wasd在视频游戏中那样在三角形中使用按键?

为什么不是相当于跟右手,像ijklpl;'


3
检查vi的 Wikipedia页面,它包含一些古老的Unix机器键盘的图片,其中解释了一些按键。
克里斯蒂安·布拉班德

3
由于vim是无法跟上技术进步豁免:3
亚历山大

3
您可以舒适地将一只手的四个手指放在hjkl键上,并在四个方向上移动光标,而无需前后移动手指。如果您真的考虑过,那么连续四行是唯一符合人体解剖学的光标键布局。问题实际上是其他人如何设法将其弄错。

4
实际上,不建议将索引放在上,h而应该放在上j(这就是j键上有“乳头”的原因)。这样做的原因是,您将使用b更多的东西h,并且;在许多编程语言中都具有可访问性:
nobe4

2
顺便说一句,这个主题在二次顶投票问题上的Unix SE
梅德格里戈里耶夫

Answers:


75

http://www.catonmat.net/blog/why-vim-uses-hjkl-as-arrow-keys/

当Bill Joy创建vi文本编辑器时,他使用了ADM-3A终端,该终端的hjkl键上有箭头。自然,他重用了相同的键,其余就是历史!

在此处输入图片说明


27
仍然应该在每个键盘上!:)
albttx

16
现在,您让我想知道制作emacs的那个人使用的是哪种终端……
leeand00

11
@ leeand00:符号LISP机器太空学员键盘。文章明确地讨论了键盘的设计如何影响Emacs的设计,并将其与Vi的设计以及其无处不在的Escape键进行了比较,并且事实是Escape非常方便地位于ADM-3A终端的键盘上。那么,在太空军校键盘,有控制,元,超和Hyper按键,都非常便利,以及不低于3个不同的Shift键,允许输入8000个字符。
约尔格W¯¯米塔格

11
尽管此答案是正确的,但它会提出问题而不是回答问题:“为什么选择ADM-3A键盘hjkl,而不选择更合乎逻辑的形状(如ijkl?)?”
马丁·图尔诺伊

2
@Carpetsmoker:我们没有发明键盘上的箭头位置逻辑,直到80年代末upload.wikimedia.org/wikipedia/commons/3/30/...
雅各布·克劳

21

Nobe4的答案很好,并解释了为什么使用hjkl得很好。但是,看到完整的键盘真的很有趣,而且当您看到设计了完整键盘的vim时,很多关于vim的奇怪事情都变得更加有意义。例如,esc当vi 处于这样一个奇怪而又不舒服的地方时,为什么vi如此严重地依赖它呢?这就是为什么:

在此处输入图片说明

如您所见,esc是大多数键盘上的tab标签。ctrl是另一个很难触及的按键,但在此键盘上非常舒适的位置(大写锁定通常位于该位置)。


难道vi有一个<Leader>映射?我以为那是后来的发明……
Martin Tournoij

@Carpetsmoker我是这样认为的,但我实际上不确定。Vim :help <leader>没有签名{not in Vi}文本,它确实说vi有:map(尽管没有:noremap),所以我很确定vi有领导者。即使没有,我也可以想象vi键盘的历史至少会在某种程度上影响vim的设计。
DJMcMayhem

也很难通过Google找到有关vi的信息,因为大多数结果最终都是关于vim的。
DJMcMayhem

@DJMcMayhem pubs.opengroup.org/onlinepubs/009696699/utilities/vi.htmlroguelife.org/~fujita/COOKIES/HISTORY/1BSD/exrefm.pdf是vi的良好参考(分别是POSIX和历史)。您还可以下载nvi,elvis,vile或ex-vi(ex-vi是历史vi的后代),并查看其功能或说明文件。<leader>vi 没有功能。
2016年

另外,Vim最初是为Amiga(在通常的[ISO或大回车]位置使用反斜杠)开发的,并且基于Stevie,它是为Atari ST(在过去的右下角使用反斜杠,过去是回车),但显然没有完全支持:map
Random832 '16

17

至于为什么这些箭头印在这些键上……是因为它们可以与控制键一起用于本地光标移动。Ctrl-H和Ctrl-J(退格和换行)很明显,即使在今天也很容易记忆。Ctrl-K是“垂直制表符”,但有时用于在pre-ANSI终端上进行反向换行。Ctrl-L用于无损光标向前的选择可能是基于其键盘位置。

您可能还已经在其他答案的键盘图片中注意到^/ ~键上有“ HOME” 。当然,按Ctrl- ^可以将光标移至原处(发送到屏幕的左上角,或发送到屏幕的左下角,具体取决于模式)。

这些控制映射还用于Wyse终端,Kermit协议,并且在某些版本的PC ANSI.SYS中受支持。

资料来源:


^ H,^ K –非常有启发性,因为从今天起,我将轻松记住^ J向下移动。我从不记得可靠的上下分配。
miroxlav '16
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.