V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
Moeblack
V2EX  ›  程序员

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

  •  
  •   Moeblack · 352 天前 · 2449 次点击
    这是一个创建于 352 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我这几天在和学习使用 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  
       352 天前
    都可以改的啊, 你可以改成你要的, 试试看好不好用
    McZoden
        2
    McZoden  
       352 天前
    1. 大多数人,食指和中指,比无名指灵活
    2. *一般情况下*,向上和向下的操作频率,*可能* 会高于向左和向右
    3. 正确的指法下,食指默认放在 j 上面,中指默认放在 k 上面
    4. 和“j” 褒姒字母 j 的下降形状,无关

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

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

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

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

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

     上
    左下右

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

    左下右
    smdbh
        18
    smdbh  
       351 天前
    JIKL 更好?
    Biluesgakki
        19
    Biluesgakki  
       351 天前
    你代码是往下写的 不是往上写的 j 分配个更常用的下很合理
    BeijingBaby
        20
    BeijingBaby  
       351 天前   ❤️ 3
    因为作者用的机器键盘布局是这样

    loveDiu4ever
        21
    loveDiu4ever  
       351 天前
    https://vi.stackexchange.com/questions/42426/why-did-vi-use-hjkl-instead-of-jikl/42428#42428

    看这个回答
    1. ADM-3A 终端仿真设计的问题
    2. 沿用了最早打字机的设计
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2071 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 16:13 · PVG 00:13 · LAX 08:13 · JFK 11:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.