# 用 Keyboard Maestro 轻松转换各式列表

> 本文公开全文。

原文：https://utgd.net/article/21334

本文拖稿数年，盖鄙人私下里独爱 Markdown，但在公务上又不得不使用 Microsoft Word，因而在几年时间里一直精神分裂（估计还会持续几年），结果自制列表格式转换工具——丰富的列表格式设置，乃 Word 的强项——也像是 Markdown 用户给自己打的布丁，似乎并不名正言顺。

写作软件 iA Writer 曾发文讨伐 Word。碰巧我的 Word 时常卡死，文书写作工作也先挪至 Markdown 编辑器，最后用 Word 调整排版而已。在意之下，自然又觉列表转换工具顺手好用，遂作本文。

所谓列表格式转换，无非几类，或无中生有创建列表，或改变列表形式（例如从有序列表转换为无序，但我暂时用不到，所以没做），或在调整顺序及增删内容后重新编排序号。如有用 Markdown 编辑器的读者，估计心里有数，绝大部分编辑器都依靠手动输入列表符号，鲜有像 Word 那样自动补完或更新者。于是，我自行便携了一组转换小工具，覆盖我常用的几种格式。实际上，列表转换无非是符号变换，Microsoft Word 中那些丰富的格式，大多可在本文基础上演绎而来。

Keyboard Maestro 动作下载

## 生成 Markdown 列表

在 Markdown 中，最基础的两种列表格式便是无序列表和有序列表，它们形如下：

```
- 项目 1
- 项目 2
- 项目 3
```

```
1. 项目 1
2. 项目 2
3. 项目 3
```

正如 PPT 一样，这两种列表都暗含了强烈的意识形态，教导一代又一代的使用者掌握分点表述的写作习惯。在技术上，部分 Markdown 编辑器确有补完机制，一旦你以 \- 或 1\. 打头写了东西，在换行之际，编辑器有可能自动帮你补齐下一行开头的符号。

很不巧，我最喜欢的两代笔记软件 nvALT 和 FSNotes 都与此无缘，所以我自己写了一个小工具。选中多行文本，然后运行 Keyboard Maestro 动作，即可将其转换为对应的 Markdown 列表格式。

## 生成带数字序号的单行文本

就原理而言，无非是借用正则表达式机制，查找每一行开头并加上标记符号。这一原理的用途不限于 Markdown 列表，我在工作中更常在同一行文本中使用连续序号，而不是分行成列。这并不奇怪，Markdown 诞生于网页语言，而网页几乎完全是滚动范式的天下，不在意多分几行、多滚几下，但纸质件统治的法律文书工作则不然，比较稀罕版面空间。

无论如何，只需删去换行符号，我就得到了更符合法律文书排版管理的列表（如果这还算是列表的话）。

## 生成带中文序号的单行文本

Markdown 虽然已经逐渐成为标准语言，几乎已经可以被数字原住民的大脑自动渲染，但在实际工作中，我依然会遇到比较老派的法官，在他们看来，Markdown 符号纯属标点滥用，因为在没有使用中文序号的情况下，你不应该直接跳到阿拉伯数字。

那也很简单，再进行一次文本替换，把阿拉伯数字换成中文数字即可。本例依然是单行文本，故采带括号的中文序号，至于不带括号的中文需要，照例多用于多行（多段）文本。

## 更新列表序号

相较创建列表，真正痛苦的是修改。设想你刚刚插入了一项，或者删除一行，又或者更换了其中两项的位置——在罗列辩论要点或草拟杂文大纲时，我经常这么做——你就得为列表重新编号。

不得不承认，Word 在编号方面做得不错。我不止一次在别人发来的合同中发现序号丢失或者重复，此时，只要双击一下序号，基本会发现它们只是普通文本，即对方没有开启 Word 的自动编号功能——但凡开启，一般就可免去手工劳动（但很可惜，吊诡的格式继承问题随之而来，毕竟 Word 隐藏了绝大多数东西，完全不是一个所见即所得的编辑器）。

在 Word 之外，我也常常需要调整列表，我还写过一个快速移动文本行的小工具。只要是无序列表或根本没有列表，一切都很顺利；可一旦遇上有序号的列表，编号问题便随之出现。在 Word 之外，我切换到另一种低技术的重编号思路：清除现有列表符号，然后重新编号即可。如此一来，就不必在意增改的是哪几行，问题又被解构为简单的文本替换。

与 Markdown 列表类似，几类带序号的单行文本也可能需要调整项目顺序或增删内容，我也制作了对应的编号更新工具。

在简单的文本替换之上，本方案尚有不少改进空间，例如可通过文本匹配，判断当前所选文本是哪一种格式的列表，再调用对应的编号更新动作，免去手动选择。我已经十分熟悉 Keyboard Maestro 的纯键盘操作，继续优化的收益并不明显，有兴趣的读者不妨自行尝试。

---

[前往标准阅读页](https://utgd.net/article/21334?audience=web)
