which-key 和 hydra 两者的区别是什么

大家有没试过按 ctrl 按到手指痛? - #18,来自 twlz0ne 为例。

用 hydra 包装 C-n/p,来减少下/上翻页的按键次数:

原始按键翻页:

C-n
C-n
C-n
...
C-n

hydra 按键翻页:

C-n
  n
  n
...
  n

使用 hydra 相当于进入了一个临时 mode 或 state,此时不在需要再按前缀键

[ origin state ]    [ hydra state ]
      |                   |
      |                   |
      |        C-n        |
      | ----------------> |
      |     page-down     |--.
      |                   |  | n   ;; page-down
      |                   |<-'
      |                   |--.
      |                   |  | n   ;; page-down
      |                   |<-'
     ...                 ...
      |                   |--.
      |                   |  | q   ;; exit hydra
      | <---------------- |<-'
      |                   |
      |                   |
      v                   v

而 which-key 是把已经存在的绑定「分层」展示出来,比如定义了一系列按键:

key:        func:
-------     ---------
C-x a       func-a
C-x b b     func-bb
C-x b n     func-bn
C-x b p     func-bp

在你按下 C-x 的时候提示:

a -> func-a
b -> prefix     ;; 注意这里

继续按 b 的时候提示:

b -> func-bb
n -> func-bn
p -> func-bp

接着喊 b/n/p 执行,并关闭提示窗口。

从按键提示上看,hydra 和 which-key 是有一点点类似,但本质上不同:

  • hyrda 可用来减少重复「前缀」按键,也具备提示下一步操作的功能
  • which-key 仅用来提示下一步操作
15 个赞