- 减少RSI!避免control,也避免meta和shift.
- 尽量接近原始Emacs的按键绑定,减少学习的成本。
- 使用和位置无关的按键,这样在所有的键盘布局下都可以使用。
- 可以不需要hack就能方便的使用各个package。
- 可以高效的编辑文字。
- 指令序列尽量保持简短。
- Terminal中可用。
a > a b > M-a ≥ A > a b c >> 其它
Normal
和Insert
,并且只在与编辑相关的模式中使用模式编辑。非编辑相关的模式中一般都自有完整的快捷键方案,不需要改变。
解决类似evil中使用j/k而magic中使用n/p,部分的package例如neotree可以适配j/k,但并非所有的package都可以。
比如C-f/b/n/p到f/b/n/p,有部分在Normal
下没有意义的按键留出来做特殊的功能。
例如C-i没有意义,所以i可以被用来做切换到Insert
。
这部分的按键包括:
- o, 对应C-o是
open-line
- i, 对应C-i在Terminal中不可用
- m, 对应C-m在terminal和GUI中均为RET
- ,,.等符号, 对应control快捷键在terminal中不可用
- C-q使用率相对低,可以考虑
- C-h可以考虑帮助放在其它的位置, 几乎所有键盘布局中h都有相当不错的位置
- ESC
- RET
大多数package的快捷键自身有一定的规律,例如:
- 使用C-c开头
- 使用两个control之后用单键
- 使用control+meta
但是不同的package之间风格不一致,考虑使用不同的 映射的函数 完成不同风格快捷键的映射(需要使用者自行指定)。
有一些操作是多个模式下都需要的功能,例如切换window,切换buffer,找合适的单键或组合完成这些功能。 比如使用ESC来切换文件,是个不错的选择。 这些功能包括:
- Universal Argument
- 切换到其它的buffer,或切换到上一个。
- window水平分割,或垂直分割。
- 切换window,或交换,或关闭。
- 打开project或workspace?
总而言之,这些功能需要全局的快捷键,而不是只出现在Normal
中。
比如要使用a b c,应设置类似C-a C-b c或C-a b c或C-a M-b c等快捷键,再映射到模式编辑下。 这样可以让整体保持整齐和一致。
使用SPC做Leader Key但是序列不应该过长。
(use-package paredit
:init
(xxx-define-key
paredit-mode-map
(("C-M-" "o "))))
(use-package cider
:init
(xxx-define-key
cider-mode-map
(("C-c C-" . "c ")
("C-c M-" . "m "))))
- o f → C-M-f
- o b → C-M-b
- c c → C-c C-c
- c e → C-c C-e
- c t t → C-c C-t t
- m n n → C-c M-n n