1 变量的定义与赋值
变量可定义可赋值(赋值的含义是改变其原值);不可变的量叫做常量,常量只能定义不能赋值。在配置文件中 定义 变量使用 defvar ,定义常量使用 defconst 。而我们在配置文件中更常见的是 setq ,它用于对变量进行 赋值 ,如果要赋值的变量不存在,它会创建这个变量,类似于用 defvar 定义变量,但是没有关于这个变量的文档。比如:
;; 使用 defvar 定义配置选项
(defvar org-export-backends '(html latex md)
"List of export backends that should be available.")
;; 用户可以在配置中修改
(setq org-export-backends '(html latex md pdf))
;; 重新加载 org-mode 时,用户的设置不会被覆盖
我们之所以很少见到 defvar ,是因为它通常用在模块文件中,它有一个重要的特性,就是当它要定义的变量已经存在时,不会重新定义,也不会用默认值去覆盖它。
如果一个变量的值不需要改变,我们最好用 defconst 定义为常量,它会在模块编译时被优化。
另外,还有一个与变量赋值相关的函数 set-default , set-default 用于设置缓冲区局部变量(buffer-local variables)的全局默认值。全局默认值对所有的 buffer 都有效,但不会覆盖缓冲区中已经设置的值。
如果我们要定义可以使用 customize 界面定制的变量,需要使用 defcustom 来定义, defcustom 定义的变量支持类型验证,可支持较为复杂的赋值行为。使用 defcustom 定义的变量最好使用 setopt 来赋值,因为 setopt 能够在赋值的同时调用定制变量的 set 函数。如果 Emacs 版本较老,不能使用 setopt ,那就直接用 custom-set-variable ,但 custom-set-variable 只能在 Customize 界面使用。
判断某个变量是不是缓冲区局部变量或可定制变量,可以查看该变量的文档,文档中标明该变量 automatically becomes buffer-local 的就是局部变量,文档里说可以 customize 的变量就是可定制变量。
2 快捷键
快捷键的作用是帮助我们提高操作效率,Emacs 默认定义的快捷键数量已然庞大,如果自己再定义过多的快捷键,反而会加重记忆负担,起到反作用。自定义快捷键时应遵循几个原则:易于记忆、按键顺手,并且考虑该命令是否真的被频繁使用。对于偶尔使用的命令,直接记忆命令名称可能更符合人的天性。
2.1 定义快捷键
定义快捷键使用 define-key :
(define-key keymap key def)
参数说明:
key:要绑定的按键序列keymap:键映射,不同的 keymap 决定了这个 key 在什么情况下触发及其优先级def:按键的定义,常见类型包括:- 交互式命令:直接绑定到一个可执行的命令。
- 键:仅当 keymap 为 'key-translation-map 时有效,它意味着把一个键映射到另一个键。
- 键映射:把 key 映射到另一个 keymap,通过这种方式用户定义一个 keymap 的前缀键(prefix key)。
- nil:注销按键绑定。
2.2 键映射(keymap)的类型
Emacs 中有多种 keymap,每个 mode 几乎都会定义自己的 keymap,不管是 major mode 还是 minor mode。除此之外,还有全局 keymap 以及上面提到的 key-translation-map 这两个特殊的 keymap。
(current-global-map) 返回全局 keymap, (current-local-map) 返回局部 keymap,也就是 major mode 定义的 keymap。对于这两种情况,Emacs 提供了更直接的函数 global-set-key 和 local-set-key 用于快捷键的定义。
这 4 种 keymap 的优先级是不同的, key-translation-map, minor mode keymap, major mode keymap, global keymap 的优先级依次降低。
2.2.1 key-tranlation-map
(define-key key-translation-map (kbd "your-key") (kbd "target-key"))
使用 key-translation-map 定义的快捷键,无论何时被按下,编辑器都将执行 target-key 所绑定的命令。一旦目标键的定义发生了变化,该键的功能也会随之受到影响。要注销绑定,需要把这个 key 重新映射为它自己。它适用于将常用但按键较为复杂的命令,如 C-x C-s 等,映射为更简单的键。
2.2.2 minor mode keymap
(define-key some-minor-mode-map (kbd "your-key") 'your-command

最低0.47元/天 解锁文章
1836

被折叠的 条评论
为什么被折叠?



