为什么 vim 里面要将 J 设置为向下 K 为向上而不是更符合直觉的 HJKL 被左上下右映射呢? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
Moeblack
V2EX    程序员

为什么 vim 里面要将 J 设置为向下 K 为向上而不是更符合直觉的 HJKL 被左上下右映射呢?

  •  
  •   Moeblack 2024-01-04 19:30:27 +08:00 2989 次点击
    这是一个创建于 645 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我这几天在和学习使用 Vim ,并且试着用平铺窗口管理器来管理窗口。 发现默认的调整浮动窗口方向的快捷键 UIOP 这四个就是按照左上下右这种符合直觉的方式来排布的。 当然,HJKL 还是按照左下上右来排布。

    很好奇这一点,为什么要使用一个反直觉的 JK 设计。 我想到的理由是 J 对应的是人的食指,而向下的操作在实际使用过程中使用的频率更高。

    AI 的回答是: Vim 编辑器中的键位映射,尤其是 h, j, k, 和 l 用于光标移动,是基于历史原因设定的。j 似字母 j 的下降形状,被用于向下移动。

    vim 确实可以按照自己的逻辑改成 J 对应上而 K 对应。只是想搞清楚这个历史原因的来由。

    21 条回复    2024-01-05 14:18:00 +08:00
    iorilu
        1
    iorilu  
       2024-01-04 19:43:06 +08:00
    都可以改的啊, 你可以改成你要的, 试试看好不好用
    McZoden
        2
    McZoden  
       2024-01-04 19:43:29 +08:00
    1. 大多数人,食指和中指,比无名指灵活
    2. *一般情况下*,向上和向下的操作频率,*可能* 会高于向左和向右
    3. 正确的指法下,食指默认放在 j 上面,中指默认放在 k 上面
    4. 和“j” 褒姒字母 j 的下降形状,无关

    综上,最多操作的向上向下移动,映射到了食指和中指默认放置的按键上,即,j 和 k
    littlewing
        3
    littlewing  
       2024-01-04 19:51:53 +08:00
    @McZoden 你这等于没回答,楼主想问的是为啥不是 j 向下,k 向上
    vcn8yjOogEL
        4
    vcn8yjOogEL  
       2024-01-04 19:53:22 +08:00   3
    Vi 原作者使用的 ADM-3A 终端将 HJKL 作为箭头键使用, 因此 Vi 和它的继任者都沿用了这个布局
    参考: https://en.wikipedia.org/wiki/ADM-3A#Legacy
    jayeli
        5
    jayeli  
       2024-01-04 20:03:12 +08:00
    因为 J 和 ↓ 长得比较像 (乱说的
    xiangyuecn
        6
    xiangyuecn  
       2024-01-04 20:06:18 +08:00
    首:不选 j 当做向下,就选 f 当做向下,再不济用空格键也行,别人敲一下 vi 能敲 1.5 下
    McZoden
        7
    McZoden  
       2024-01-04 20:16:39 +08:00
    还有一个思路,在以前的 tty 时期,也就是一台大型机配许多台远程终端的时候
    ctrl j ,是另起一行的快捷键,也可以作为命令输入完毕后的回车

    如果 vim 在这之后出现,那有可能是沿用了这个 j 向下

    其实现在 linux 大多数终端下,ctrl j ,也是和回车一样的表现
    ns09005264
        8
    ns09005264  
       2024-01-04 20:29:13 +08:00
    不知道历史缘由,个人觉得向下移动比向上移动频繁,而食指比中指更灵活,强强联合。
    cctv6
        9
    cctv6  
       2024-01-04 20:41:13 +08:00
    不知道为啥这么设计,但是不得不说,适应了之后,这套键位确实舒服。可能是向下使用的频率更高吧,加上正好食指也放在 J 上,H L 对应左右,也是相当有趣的,还有就是,H 需要移动手指,正好向左移动也是一个低频操作。

    感觉设计这个键位的人也是个人才,它没有采用 WASD 这样的上下左右。
    James369
        11
    James369  
       2024-01-04 21:15:59 +08:00
    要么 J 要么 K ,按错 J 就换 K ,按错 K 就换 J 。毫无压力,毫无记忆
    muxinqi
        12
    muxinqi  
       2024-01-04 23:13:48 +08:00
    我一开始也不习惯,但是后来自己慢慢合理化了,用的下面这个步骤:
    1. 把右手食指、中指、无名指放在方向键上,就假装你在玩跑跑卡丁车,记住哪个手指在按上键。
    2. 把右手放回至键盘区域一字排开,按照打字习惯,右手食指放在字母 J 上,看看刚刚按上键的手指,现在在哪里。

    当然如果 I J K L 分别对应 的话,我会更习惯(跟方向键体验一样了),但是感觉调整字母 I 的映射,对肌肉记忆改动太大了,如果需要临时用别人电脑就不习惯了。
    syfless
        13
    syfless  
       2024-01-04 23:30:15 +08:00
    可能是大部分人按 的频率比 多,然后中指比无名指发达
    L4Linux
        14
    L4Linux  
       2024-01-04 23:54:33 +08:00 via Android
    @jayeli #5 这还真不是乱说
    passive
        15
    passive  
       2024-01-05 00:42:28 +08:00 via Android
    以前键盘就是这样。即使小键盘区的方向键成为现在这种

     上
    左下右

    形状也才没几年。以前键盘上都是排成一排,
    上下左右、左下上右、左上下右…各种组合,每个厂家都不一样
    juggtt213
        16
    juggtt213  
       2024-01-05 00:45:57 +08:00
    点进来这个帖子的时候我也感觉大多数人按下的频率更高。但是又想了一下,如果是用浏览器的 vim 插件,确实按 j 的频率更高,但是用 vim 编码的时候,可能写错了要改的时候按“上”的频率反而会更高一些,要是编码顺利的话换号是用回车
    RikkaW
        17
    RikkaW  
       2024-01-05 01:02:32 +08:00
    古时候的键盘还不是现在这样的

    左下右
    smdbh
        18
    smdbh  
       2024-01-05 08:39:20 +08:00
    JIKL 更好?
    Biluesgakki
        19
    Biluesgakki  
       2024-01-05 09:00:22 +08:00
    你代码是往下写的 不是往上写的 j 分配个更常用的下很合理
    BeijingBaby
        20
    BeijingBaby  
       2024-01-05 09:19:45 +08:00   3
    因为作者用的机器键盘布局是这样

    loveDiu4ever
      &bsp; 21
    loveDiu4ever  
       2024-01-05 14:18:00 +08:00
    https://vi.stackexchange.com/questions/42426/why-did-vi-use-hjkl-instead-of-jikl/42428#42428

    看这个回答
    1. ADM-3A 终端仿真设计的问题
    2. 沿用了最早打字机的设计
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2864 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 14:19 PVG 22:19 LAX 07:19 JFK 10:19
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86