原生按键用户推荐 devil

与其使用逗号作为leader-key的概念,为什么不使用更方便的空格呢?与spacemacs或者doom emacs的理念类似,不过我的想法是,空格键单独作为leader-key,SPC SPC来输入空格,同时也不去动emacs自身的快捷键,是不是会比devil这样的设计更好?

我用原生按键主要是为了在中文输入法模式下也能快速执行快捷键,虽然在有了sis之后也可以试着用模式编辑,但是还有很多积累来的org-mode快捷键没法改。

:sweat_smile: 还是原生的 Emacs 按键方便。

我在 macOS 上试了下,按完 , 后,什么也按不了了,卡死了 Emacs,最后只能强退。 用的最新的 Emacs 30

1 个赞

用着有点乱啊,徒增烦恼 :joy:

最近小拇指有点疼,Ctrl按多了 :sweat_smile:

很棒的设计,如果我当年就见到这篇文章,肯定会用,现在shift已经用成了习惯,换不了了,不过其实逗号我一直在用,我是 ,号用于单个大写字母的输入 , 这样就解放了shift,可以当成ctrl用

我从来不用小指按 Ctrl,用的是大拇指(或者在机械键盘上用手掌),不会疼。小拇指太脆弱了

其实也不是Ctrl,是改成 Ctrl 的 Shift。 不过还好,小拇指累了就换大拇指按Ctrl。

可能有些离题,不过看到大部分emacser因为小指的问题转而追寻一些诸如evil之类的替代方案时,就会有些庆幸小时候练的小提琴竟在这里派上了用场 :sweat_smile:

2 个赞

这个 leader-key 是可以改的,我改成了分号,而且还能定义多个 leader-key,感觉还是看个人习惯了,我 vim 下的 leader-key 也是分号

哈哈哈,是的,我最初也有这样的问题,然后慢慢习惯了,不过还是看个人习惯了。这个还能定义其它按键到 M-。模式编辑的最大的吸引力,对我来说真的就是可以一手托腮,一手在那操作看代码,不过用这个,基本也还挺方便的

作者应该也是基于自身痛点写的这个包,每个人需求不太一样,就是看能不能习惯了,可以试用下,要是不习惯,用自己习惯的方式就好了,不过看到有人探索新的方式,就感觉真的很棒

这个和 god mode 有啥区别?我看了下来,好像还并没有比 god mode 省按键。比如 god mode 直接 space x f 就等于 c-x c-f。这个需要 ,x ,f 是四个按键。并没有省按键,按起来甚至比 C-x C-f 效率还低。

我还是喜欢我这种临时进一下阅读模式的方式

一个快捷键进去以后, 单手以只读模式看代码, 心理负担小。

一旦进入阅读模式, 可以单手浏览、跳转、搜索和翻译。

devil这种心理负担还是太大, 要记住各种技巧, 感觉人是工具的工具。

2 个赞

这个唯一的好处应该就是 Ctrl 和 Meta 键不需要长按,比如 C-x C-f,最高效的方式肯定是原生的按住 Ctrl 再连着按 x f ,确实没有比 god 省,但因为保留了 Ctrl 的步骤(因为没有长按,某种程度上也更麻烦了),我这边体验上是比 god 省心,效率方面应该不如其它方式

可以改 shift 吗,哈哈哈

这个包的思路有点类似粘滞键,和meow的keypad-mode有点像,不过受制于emacs本身的限制,shift没办法做为devil-key。

我从meow换成devil用了一两周,感觉最大的痛点是移动光标的命令(C-b, C-f, M-b, M-f这种)因为是绑定在global-map下的,没有repeat-mode支持,导致切换光标方向时不能直接, f f f b b 这样,必须 , f f f , bb。给Alt单独设置一个devil-key又感觉太奢侈。。。

1 个赞

尝试了一下把devil-mode和repeat-mode结合,感觉意外的还行

例如把常用的类似功能的命令放在一个repeatable的keymap里面,这样执行任意一个该keymap的命令的时候相当于无缝进入modal-mode,但是退出repeat-mode的时候还是需要支付一个额外按键的成本(C-g或者repeat-exit-key),例如我的配置:

(defvar-keymap ctrl-motion-map
  "f" #'forward-char
  "b" #'backward-char
  "n" #'next-line
  "p" #'previous-line
  "a" #'move-beginning-of-line
  "e" #'move-end-of-line
  "d" #'puni-forward-delete-char
  "k" #'puni-kill-line
  "t" #'transpose-chars
  "v" #'viper-scroll-up
  "V" #'viper-scroll-down
  "." #'repeat)

(keymap-set global-map "C-S-v" #'viper-scroll-down)

(defvar-keymap meta-motion-map
  "f" #'forward-word
  "b" #'backward-word
  "a" #'backward-sentence
  "e" #'forward-sentencne
  "k" #'kill-sentence
  "d" #'puni-forward-kill-word
  "t" #'transpose-words
  "y" #'yank-pop
  "^" #'delete-indentation)

(defvar-keymap structural-edit-map
  "f" #'puni-forward-sexp-or-up-list
  "b" #'puni-backward-sexp-or-up-list
  "u" #'backward-up-list
  "d" #'down-list
  "e" #'puni-end-of-sexp
  "a" #'puni-beginning-of-sexp
  "o" #'puni-expand-region
  "k" #'kill-sexp
  "t" #'puni-transpose
  "z" #'pop-to-mark-command
  "C" #'puni-convolute
  "R" #'puni-raise
  "S" #'puni-squeeze
  "<backspace>" #'backward-kill-sexp
  ")" #'puni-syntactic-forward-punct
  "(" #'puni-syntactic-backward-punct
  "]" #'puni-slurp-forward
  "[" #'puni-slurp-backward
  "}" #'puni-barf-forward
  "{" #'puni-barf-backward)

(define-keymap :keymap global-map
  "C-M-f" #'puni-forward-sexp-or-up-list
  "C-M-b" #'puni-backward-sexp-or-up-list
  "C-M-u" #'backward-up-list
  "C-M-d" #'down-list
  "C-M-e" #'puni-end-of-sexp
  "C-M-a" #'puni-beginning-of-sexp
  "C-M-o" #'puni-expand-region
  "C-M-k" #'kill-sexp
  "C-M-t" #'puni-transpose
  "C-M-z" #'pop-to-mark-command
  "C-M-C" #'puni-convolute
  "C-M-R" #'puni-raise
  "C-M-S" #'puni-squeeze
  "C-M-<backspace>" #'backward-kill-sexp
  "C-M-)" #'puni-syntactic-forward-punct
  "C-M-(" #'puni-syntactic-backward-punct
  "C-M-]" #'puni-slurp-forward
  "C-M-[" #'puni-slurp-backward
  "C-M-}" #'puni-barf-forward
  "C-M-{" #'puni-barf-backward)

(defun repeatize (keymap)
  "Add `repeat-mode' support to a KEYMAP."
  (map-keymap
   (lambda (_key cmd)
     (when (symbolp cmd)
       (put cmd 'repeat-map keymap)))
   (symbol-value keymap)))

(repeatize 'ctrl-motion-map)
(repeatize 'meta-motion-map)
(repeatize 'structural-edit-map)

这样每当我执行C-,M-或者C-M-作为prefix的命令时,repeat-mode启用,我只需要按一个键就可以执行对应keymap下的其他命令。

退出repeat-mode可以用:1 . C-g(或者,g)2. 按repeat-exit-key(我设置为了Return)3. 等待repeat-exit-timeout长的时间

小哥我有一个god-mode的fork,有没有兴趣试试,GitHub - YangZhao11/god-mode at struct 这个和upstream差的有点多了,要是有人有兴趣把他从新package一下就好了

键盘上有两个control键呢,怎么方便怎么来,单手双手都可以