spacemacs 与 org-mode 配置与使用技巧

1. Spacemacs 配置

Spacemacs 集合了 emacs 社区的努力, 为 emacs 提供一个成熟稳定, 开箱即用的 emacs 配置做了相当好的工 作. 个人使用 Spacemacs 也有相当一段时间, 以下是一些配置 Spacemacs 的 tips.

1.1. 使用中国镜像

dotspacemacs/user-init 中添加 melpa 中国镜像

 ;; melpa china mirrors
(setq configuration-layer--elpa-archives
'(("melpa-cn" . "http://mirrors.tuna.tsinghua.edu.cn/elpa/melpa/")
("org-cn" . "http://mirrors.tuna.tsinghua.edu.cn/elpa/org/")
("gnu-cn" . "http://mirrors.tuna.tsinghua.edu.cn/elpa/gnu/")))

1.2. 配置代理

连接国外的软件源由于网络问题, 通常较慢. 可以在 dotspacemacs/user-init 中设置代理

;; proxy
(setq url-proxy-services '(("no_proxy" . "127.0.0.1")
("http" . "127.0.0.1:1087")
("https" . "127.0.0.1:1087")
))

1.3. 使用 spacelpa

spacemacs develop 分支特性

  • emacs version: 26.1
  • spacemacs develop version: 0.300

emacs26 下载 spacelpa 会遇到问题 , 提前手动下载好 spacelpa 文件跳过自动下载及解压的步骤 (refer ).

mkdir ~/.emacs.d/.cache/stable-elpa/26.1
cd ~/.emacs.d/.cache/stable-elpa/26.1
wget https://github.com/syl20bnr/spacelpa/archive/v0.300.tar.gz -O spacelpa-0.300.tar.gz
tar -xzvf spacelpa-0.300.tar.gz
echo -n "0.300" > version

.spacemaces 设置

dotspacemacs-use-spacelpa t

SPC f e R 或者重启 emacs

2. Spacemacs 美化

2.1. 字体

Table 1: 编程字体, 等宽中文字体以及不常见汉字字体
  font family name
Iosevka (Source Code Pro Style) "Iosevka SS09"
Sarasa Gothic (更纱黑体) "等距更纱黑体 SC"
花園明朝 "HanaMinB"
  • 安装所有字体 iosevka-ss09-2.1.0.zip
  • 安装所有 sarasa-gothic-sc-*.ttf 字体

配置字体

dotspacemacs-default-font '("Iosevka SS09"
:size 16
:weight normal
:width normal)

2.2. 字体: 使用 cnfonts 配置中英文对齐

使用 org-table 时中英文混排时字体需要对齐, 使用 cnfonts 项目解决这一问题.

2.2.1. 安装

dotspacemacs-additional-packages 中添加 cnfonts

2.2.2. 配置

dotspacemacs/user-config 中添加

;; Chinese and English fonts alignment
(use-package cnfonts
:config
(cnfonts-enable)
(setq cnfonts-use-face-font-rescale t)
)

上面的 (setq cnfonts-use-face-font-rescale t) 用于设置不同标题中文字体大小不同 , 比如 emacs 自带的 lenven 主题就支持这一特性.

2.2.3. 设置中英文对齐

M-x cnfonts-edit-profile

执行之后先不要进行任何操作, SPC f f 打开 ~/.emacs.d/cnfonts/v4/profile1.el 编辑文件, 在 cnfonts--custom-set-fontnames 的三行中的第一位分别加入已经安 装的字体.

示例

(setq cnfonts--custom-set-fontnames
'(("Iosevka SS09" "Ubuntu Mono" "DejaVu Sans Mono")
("等距更纱黑体 SC" "Ubuntu Mono" "隶书" "新宋体")
("HanaMinB" "SimSun-ExtB" "MingLiU-ExtB")))


(setq cnfonts--custom-set-fontsizes
'(
(14 14.0 14.0)
(16 16.0 16.0)
(18 18.0 18.0)
(20 20.0 20.0)
(22 22.0 22.0)
(24 24.0 24.0)
(26 26.0 26.0)
(28 28.0 28.0)
(30 30.0 30.0)
(32 32.0 32.0)
))

再次执行 M-x cnfonts-edit-profile, 按照教程设置中英文对齐.

重启 emacs 后如果发现字体大小在载入 cnfonts 之后有改变, 应该是 profile 载入 设置的问题. 检查 ~/.emacs.d/cnfonts/cnfonts.conf

(nil)(("profile1" . 2))

设置好最后的数字, index 从 1 开始. 使默认字体大小与 cnfonts--custom-set-fontsizes 中选择的配置相同. 如果 dotspacemacs-default-font :size 为 14, 在这里的应该设置为 1.

2.3. TODO 主题: doom-themes

2.4. TODO solaire-mode:

2.5. mode line 显示时间

在 MacOS 全屏显示下可以方便地查看当前时间

(display-time-mode t)

3. Spacemacs 使用技巧

3.1. 导航: 使用 avy

avy Github

不要再使用重复按 C-n C-p 在当前文件在移动光标到目标位置了. 使用 evil-avy-goto-char. 首先眼睛看准目标位置, 然后按下 SPC j j. 跟着提示的字符 按下按键直接跳转到目标位置.

Table 2: avy 按键绑定
命令 spacemacs 按键绑定 功能
avy-goto-char SPC j j 跳转到字符
avy-goto-word SPC j w 跳转到单词
avy-goto-line SPC j l 跳转到行

avy-goto-char 示例

3.2. 搜索: 使用 helm-swoop

helm-swoop Github

不再重复地按 C-s 在当前文件中进行搜索, C-s 只适合简单的搜索场景. 使用 helm-swoop 进行预览式搜索.

Table 3: helm-swoop 按键绑定
Key binding Description
SPC s s execute helm-swoop
SPC s S execute helm-multi-swoop
SPC s C-s execute helm-multi-swoop-all

示例

3.3. 搜索: 使用外部工具搜索文件

spacemacs develop 分支特性: rg (ripgrep) 支持

仅仅搜索当前 buffer 内容是不够的, spacemacs 可以使用

等工具进行文件搜索. 如果以上的工具都找不到, spacemacs 就会调用 grep.

dotspacemacs-search-tools, the default order is rg, ag, pt, ack then grep

spacemacs 会按照系统路径中找到以上工具的顺序, 使用统一的界面进行调用.

推荐 Linux/MacOS 使用 ripgrep (super bleeding fast!), windows 用户使用 pt.

更多使用请查看 searching

Table 4: helm search 按键绑定
按键绑定 功能
SPC / or SPC s p search project
SPC / or SPC s d search current directory
SPC s f search in arbitrary directory

4. org-mode 使用技巧

4.1. org-mode 配置重要提示

spacemacs 使用 org ELPA 仓库中的版本, 而不是 emacs 自带的 org.

所有与 org-mode 相关的配置都需要放在 with-eval-after-load 代码块中 , 否则会载 入 emacs 自带的 org 版本, 造成版本冲突从而引起各种奇怪的 org-mode 相关的报错.

(with-eval-after-load 'org
;; here goes your Org config :)
;; ....
)

4.2. 中英文之间自动插入空格

pangu-spacing Github

dotspacemacs-additional-packages 中加入 pangu-spacing, SPC f e R 自动下载安装.

dotspacemacs/user-config 中加入配置

(use-package pangu-spacing
:config
(global-pangu-spacing-mode 1)
;; only insert real whitespace in some specific mode, but just add virtual space in other mode
(add-hook 'org-mode-hook
'(lambda ()
(set (make-local-variable 'pangu-spacing-real-insert-separtor) t)))

)

4.3. 运行 shell 命令, 不需要离开 emacs

有时在写文档时需要查看某些 shell 命令的运行结果, 运行简单的单个命令并不需要离开 emacs, 可以在写文档时带来更好的体验.

比如在写 markdown 文档时, 使用 vmd 预览效果, 只需要 M-! vmd README.md 即可.

M-x shell-command 可以运行 shell 命令并在 minibuffer 中显示命令输出.

M-x shell-command-on-region 可以将当前选中内容作为输入运行外部 shell 命令, 在 minibuffer 中显示命令输出. 运行前加上 C-u 可以选择将命令输出替换当前选中内容.

Table 5: Running Shell Commands from Emacs
按键绑定 命令
M-! shell-command
M-| shell-command-on-region
C-u M-| shell-command-on-region, replace region with output

4.4. 关闭图片显示

在 org 文档插入图片后 emacs 会默认渲染图片. 在确认插入图片成功后, 编辑文本时图片会占用 大量空间. 我们通常在编辑时会想关闭图片显示.

Table 6: 切换图片显示
M-x org-toggle-inline-images C-c C-x C-v

4.5. 转义

在需要转义字符时, 记住被包围在 * / _ = + 之间的内容特殊字符大部分都 不会被解析.

4.5.1. #+BEGIN_SRC 转义

#+BEGIN_SRC org 文档会特殊解析, 有时候代码例子中需要原样输出时, 使用 ,# 进行转义.

#+begin_src
,#+begin_src
,#+end_src
#+end_src

4.5.2. org-table 中转义 | 字符

需要在 or-table 中输出 | 字符时使用

\vert{}

进行转义.

Generated using Emacs 29.0.50 (Org mode 9.4.6)