Emacs使用技巧

请参考我的Emacs配置

重置大写锁定键

参考Emacswiki,在X Window下设置 ~/.xmodmap,把Caps Lock设置成Ctrl键;如果需要交换按键,把注释取消:

remove Lock = Caps_Lock
! remove Control = Control_L
! keysym Control_L = Caps_Lock
keysym Caps_Lock = Control_L
! add Lock = Caps_Lock
add Control = Control_L

然后,运行如下命令即可重新定义键位:

$ xmodmap ~/.xmodmap

也可以把这段命令写入 ~/.xsessionrc (Ubuntu)或者 ~/.xinitrc 中,这样用户登录X界面时会自动运行这段命令来设置键位。

在Windows下可以使用 RemapKey 这个小工具来重置键位。

针对不同mode进行设置

一般在emacs中绑定按键都使用 global-set-key,但是,很多时候某一个按键只在某种mode中才有意义,这时候我们应该避免污染全局按键设置,使用 local-set-key。某些minor-mode,比如auto-fill-mode、outline-minor-mode,我们希望它们只在某种mode中打开,这时候如果鲁莽的全局打开这些minor-mode也不是很合适。所以,应该习惯于使用 mode-hook 来针对不同mode进行个性化的设置。

例如,我只在text-mode和org-mode里打开flyspell的功能,并且绑定了Ctrl+c Ctrl+v按键,这里用到了 dolist 函数来遍历需要设置的mode:

(dolist (hook '(text-mode-hook org-mode-hook))
  (add-hook hook
            (lambda ()
              (flyspell-mode 1)
              (local-set-key (kbd "C-c C-v") flyspell-goto-next-error))))

设置文件编码等变量

(Info Node) Emacs → Customization → Variables → File Variables

想要设置local variable,在文末的3000bytes内,起始行包含 Local Variable,最后行包含 End。要是想设置mode的话,放在第一项。每行的格式为 Variable: Value

;;; Local Variables: ***
;;; mode:lisp ***
;;; comment-column:0 ***
;;; comment-start: ";;; "  ***
;;; comment-end:"***" ***
;;; End: ***

比如指定该文件的mode和编码:

Local Variables:
mode: text
coding: chinese-gbk
End: