Emacs Notes
随便记录一下自己的一些 Emacs 配置。
系统是 Linux,所以 Windows 不一定适用。
Emacs 输入中文¶
请使用 Emacs 28 及以上版本。中文输入问题似乎已经在新版本中解决。请见 官方的记录 。
截至 2021.07,Arch 最新版本仍为 Emacs 27,若想要使用 28 版本的除了自行编译以外,还可以使用 ArchLinuxCN 源安装 emacs-git 包。
当前(2023.08)Arch 最新版本已经更新到了 Emacs 28,并且有了 emacs-nativecomp
版本,速度快了很多(特别对于 Spacemacs 用户而言),推荐使用。
Emacs 中文配置问题排查¶
-
环境变量设置好了吗?Fcitx 需要设置
XMODIFIERS
,可以在.xprofile
里设置。如果是使用
systemd
启动 Emacs 守护进程的话,那么需要systemctl --user edit emacs.service
把XMODIFIERS
的环境变量给加上: -
Emacs 比输入法提前启动了吗?
我也不清楚是不是这个原因,总之如果用
systemd
的话,不要设置linger
。 (设置了sudo loginctl enable-linger <用户名>
的话用户的systemd
进程会随着系统启动而启动。 而sudo loginctl disable-linger <用户名>
之后用户的systemd
随用户登陆而启动,随登出而退出。)用
loginctl user-status
查看linger
状态。 -
字体问题?
我能确定的确有影响的只有上面两项,字体问题只是我当时死马当活马医的时候进行的尝试,大概不太有效。
更换软件源¶
ELPA 是 Emacs 内建包管理器 package.el
的软件源,默认的软件源配置可能在国内访问比较慢,推荐使用镜像。
一般的 Emacs 配置直接按 清华源 ELPA 镜像 的说明里来即可(里面也有 Spacemacs 用户的配置方法)。
其它¶
-
另外推荐使用 fcitx.el 自动在 M-x 等快捷键之后把输入法切换成英文。(Evil 下也非常有用。)
我用的是 Fcitx 5 所以设置有点不同:
按中文字词移动光标¶
Emacs 的 Alt-f 和 Alt-b 是很常见的移动光标的快捷键,分别是跳过一个词以及跳回上一个词的开始。但是这一点对于中文其实是不适用的——Emacs 会把连在一起的中文字符全部看作一个词。利用一些分词手法我们可以让 emacs 也能够顺利找到中文的词的开头和结尾。
可见这里 https://github.com/kanglmf/emacs-chinese-word-segmentation
AUR 现在有包了。
把 emacs 弄成开机启动以及后台常驻¶
开启了上面说的中文分词后你大概会发现 Emacs 的每次启动都卡顿一两秒。这不方便,我们可以让 Emacs 开机启动并后台常驻,让分词不需要每次都初始化。
现在 Arch 的 Emacs 已经自带一个 .service
文件了,所以我们只需要直接启动服务就好了。 (中文设置请看上面。)
Emacsclient 固定初始窗口位置大小¶
来自 https://stackoverflow.com/a/11008029 以及 http://emacs.1067599.n8.nabble.com/Window-too-big-td370995.html 。这部分 license 是 CC BY-SA 3.0 。
(add-hook 'before-make-frame-hook #'(lambda () (add-to-list 'default-frame-alist '(user-position . t)) (add-to-list 'default-frame-alist '(user-size . t)) (add-to-list 'default-frame-alist '(left . 0)) (add-to-list 'default-frame-alist '(top . 0)) (add-to-list 'default-frame-alist '(height . 38)) (add-to-list 'default-frame-alist '(width . 96))))
Emacs 打开 SSH 另一头的文件¶
见 https://stackoverflow.com/a/20624538
简单来说就是 Ctrl+x Ctrl+f 打开的文件名可以是 SSH 另一头的文件,语法是:
例如:
/ssh:[email protected]#22:/etc/resolv.conf /ssh:[email protected]:/etc/resolv.conf
Modes¶
Minor Mode¶
wc-mode¶
字数统计,在下方的 mode line 显示字数、词数等的统计。
请见 https://github.com/bnbeckwith/wc-mode
安装方法可以直接 M-x package-install wc-mode
。
用 M-x customize
查找 wc-mode
之后可以按网页里的 Modline string 来定制显示格式。因为没有对中文的优化,对于中文一般可以设置为 "WC[%tw/%tc]"
,显示效果是 WC[词数/字数] 。
输入特殊字符¶
可以 M-x set-input-method TeX
,设置了之后可以通过 TeX 的方法输入一些对应的 Unicode 字符。例如,(一口气)输入 \rightarrow
输入最后一个 w
之后整个会被替换成 →
,但是如果输入到一半发现打错了然后删了字符或是移动了光标,那就输入失败了。必须一口气连续不出错地输入完整的 TeX 命令才能成功替换。
并不是所有的 TeX 命令都有对应。
一些快捷(?)键¶
C-u
4
C-x Tab : 整体缩进选中部分 4 个空格,当然 4 可以改成其它数字(负数亦可)。 当然,更容易记住的大概是使用 C-x string-insert-rectangle 命令。
Spacemacs¶
中文字体设置¶
个人用的是 Sarasa 字体。确保字体安装好了字体缓存刷新了之后,需要设置几个地方:
-
dotspacemacs-default-font
: -
set-fontset-font
: -
这个时候 Markdown 显示可能会有点问题,因为 Markdown 代码部分的默认字体还不是 Sarasa,需要改过来:
在最后的
custom-set-variables
里加上:(custom-set-faces ;; custom-set-faces was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. '(markdown-code-face ((t (:family "Sarasa Mono SC" :inherit fixed-pitch))))) )
Emoji 字体¶
(暂时懒得弄了,网上教程大概也一大把吧?)
评论