# 基于纯文本的低技术代码管理实践

> 本文公开全文。

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

写作有笔记管理，阅读有摘抄管理，相关“产业”可谓一篇繁荣。代码管理“产业”则显得萧条一些，选择本来就不多，更不用说照顾非专业人士了。

业余爱好者的做法，可能是随手往笔记 App 里一丢，眼不见为净；或者干脆存几份脚本文件，长期割据桌面一角。这些做法都称不上代码管理，充其量是代码填埋。编程从业人员有机会接触更多专用工具，但是这些工具通常使用封闭数据库，不是在加载速度、中文支持方面留有遗憾，就是在跨平台、云同步方面不尽人意，同时又缺乏改进的可能。

说到底，代码也是一段文本，既然如此不如参考收拾笔记的思路，把代码管理想得简单一些、不一定非得求医问药于专业工具，先把代码存储在纯文本文件中，之后再从长计议。我从“纯文本”这一起点出发，设计了一套代码片段管理流程，能够做到：

- 通过剪藏工具，将代码片段收录到专门文件夹；

- 通过插入工具，随时随地搜索、插入代码片段；

- 通过 DEVONthink 浏览代码，高亮显示绝大多数编程语言的语法结构；

- 纯文本文件兼容任何云同步工具，只需将代码文件置于云文件夹中，即可实现同步。

本文介绍的代码剪藏与代码插入功能可用 LaunchBar、Keyboard Maestro、Automator 等自动化工具实现，由于精力有限，仅提供 LaunchBar 和 Keyboard Maestro 版。浏览代码的截图多取自 DEVONthink，但任何能够打开 Markdown 的软件也能替代这款高价工具。

## 快速剪藏代码

有人调侃现在的编程是“面向 Stackoverflow 编程”或“面向 Google 编程”，所言不假。确实，大部分问题都有既成答案，就算是编程的门外汉，也可以在网上搜到现成代码；有心之人会将它们收集下来，日积月累，即便是“麻瓜”也能用上一些基础的“魔法”。

代码管理的第一步就是收集。作为代码的容器，纯文本文件不会挑食，任何编程语言的代码片段都可以往里面放。考虑到后续的代码高亮渲染，建议使用 Markdown 格式（即 \.md 后缀）。每次遇到好用的代码片段，就可以存进一个纯文本文件，再建立几个文件夹统筹它们，随后就能套用我们熟悉的文档管理习惯。

推荐根据语言划分文件夹，例如 AppleScript、BASH、HTML、Javascript，等等。因为代码往往不限于一种语言，自动化玩家对此想必深有体会：平时接触的各类代码完全是东一榔头西一棒，Automator 常常要靠 AppleScript 拓展能力，管理系统配置离不开 BASH，在 Shortcuts 里则可能要用到正则表达式……按语言划分，便于日后按语言查找、插入代码。

创建文件夹后，可以用自动化动作简化代码收集。选中一段代码，运行动作——Automator 版在右键菜单中，Keyboard Maestro 使用快捷键，LaunchBar 则通过 Intsant Send——之后选择所选代码的语言，并起个标题，即可将代码片段收录到所属语言的文件夹下。整个过程类似于使用 Evernote 剪藏工具，不需要离开当前网页，一切都在后台完成。下图为 Automator 示例，Keyboard Maestro 和 LaunchBar 版本只是启动方式有所不同，使用效果完全一致。

如果你喜欢全键盘操作，以上流程也可以完全用键盘实现，包括选取代码语言，按下对应选项的首字母就能选中，例如按 A 可以选中 AppleScript，按 P 选中 Python，以此类推。剪藏下来的代码为 Markdown 代码块样式，并在第一行标注有剪藏过程中选好的编程语言（格式为 languagee\-语言名称），以便后续在代码浏览工具中高亮显示其语法结构。

剪藏动作经过简单配置即可使用，只有两处需要自定义：

- 自定义代码片段存储位置：图中 /Users/apple/Databases/Tech/Script/ 部分是我在自己电脑上存储代码片段的文件夹，将其修改为你的文件夹路径即可。一般只需要将文件夹拖到代码编辑器就能获得路径。注意路径需要以 / 结尾，不能遗漏，否则会找不到文件夹。

- 预设常用编程语言：将代码文件夹中的子文件夹名称预设在动作中，例如 \{"AppleScript","BASH","HTML","Python","Javascript"\}，这样就能显示常用语言选单。你可以根据需要增减编程语言，注意需要用英文双引号 "" 包起来，同时两两之间用英文逗号 , 隔开。

自动化动作大大简化了传统的代码收集步骤。手工操作异常繁琐，通常要层层打开文件夹、创建文本文件、重命名、复制、粘贴、调整代码格式……相信不是没有人想到纯文本方案，只是操作量令人望而生畏。迈过代码剪藏的门槛，就算夯实了纯文本式代码管理的基础，接下来就能借助纯文本实现搜索、插入、高亮、云同步等功能。

## 随时搜索、插入代码

我尝试过用 SnippetsLab 管理代码，它采用的就是封闭数据库，即便我佯装看不到跨平台支持之阙如，也做不到无视它在插入代码时的磕磕绊绊。封闭数据库意味着几乎所有操作都只能在其主界面中完成，每次代码写到一半，就要暂停手头工作，打开 SnippetsLab、在其中搜索一番、复制下来、最后粘贴到编辑器里。虽然不敢自夸“禅模式”，但起码我有权利享受一个不受打扰的编辑环境，封闭数据库的管理工具显然与此相悖；而一旦转向纯文本，问题就迎刃而解：直接搜索文本文件本身。

LaunchBar 和 Keyboard Maestro 都提供了搜索框，可以实现随时随地搜索的效果，我为它们各制作了一个自动化动作，支持以中英文搜索当前代码库中的所有代码片段。两个工具的显示细节有所不同，但核心功能都一样，即实时搜索、回车复制。

搜索\-插入功能所需配置的地方更少，只要填好代码所在的文件夹即可工作。下图左侧为 LaunchBar 的代码，将其黄色部分换为你的代码文件夹地址即可，地址后面的空格 必须保留，为了和随后的其他参数隔开（了解即可，不细究具体代码也不影响使用）；右侧为 Keyboard Maestro 步骤，同样将紫色部分的 /Users/apple/Databases/Tech/Script 更换为你的文件夹。

这样通过全局搜索框搜索、插入代码，有如热刀切黄油般流畅，再也不用频频跳转于代码管理工具和编辑器之间。类似的操作在封闭数据库的工具中难以想象，也只有纯文本才能如此灵活。

## 用 DEVONthink 高亮显示代码语法

”代码高亮“功能看似是代码管理工具的专利，实际上，目前相当多的笔记工具已经支持了高亮显示，包括流行的 Markdown 编辑器 Typora 和笔记工具 Obsidian。在笔记工具的进军下，SnippetsLab 这种老牌代码管理工具的地位令人尴尬，直接用前述两款笔记软件也没问题，实在没有动力掏钱买专用工具（前面两款工具都是均为免费）。

DEVONthink 也内置了代码高亮工具 Prism，可以离线使用，支持两百多种编程语言的高亮显示。

DEVONthink 默认关闭了 Prism，需要在其”Preferences\-Media\-Markdown\-Prism support“选项中开启。随后，所有标注过所属语言的代码块都会高亮显示（在剪藏时已经通过自动化工具标上），无需再手动操作。话说，DEVONthink To Go 也可以高亮代码，不过大概也没有人在手机上写代码吧？

同时，DEVONthink 也支持索引（Index）外部文件夹，你可以把代码文件夹整个搬进（Index）DEVONthink，享受 Prism 高亮效果同时，不影响剪藏、搜索\-插入以及云同步等功能。开放的文件管理方式遇上最流行的代码高亮引擎，用 DEVONthink 浏览代码可谓天时地利人合。

唯一的遗憾是，DEVONthink 内置的 Prism 版本并非最新（截至发稿可能已有改进），如果遇到无法高亮的代码，则需要手动安装最新版的 Prism，DEVONthink 官方论坛也有 详细步骤。

前文所介绍的代码剪藏和代码搜索\-插入功能，很大程度上借鉴了笔记管理或文摘管理工具，本节的代码高亮也见诸不少主流笔记工具。这些工具都有一个共通点——纯文本：Typora 是一款 Markdown 编辑器，Obsidian 在 Markdown 语法上加入了链接语法，DEVONthink 也支持导入纯文本文件……将它们用到代码管理，也是顺理成章。基于纯文本——更准确地说是基于 Markdown——的代码管理方式何其灵活，由此可见一斑。

## 小结

称职的代码管理工具少矣，能够照顾到非专业人士的更是寥寥无几。但是在某种程度上，正是因为“非专业”，才更需要直奔代码管理的核心功能；当然，职业人员也不会排斥更轻松的管理方式。对于前述两类人士，纯文本都是一种可贵的思路。

在线表单工具 Airtable 在 Excel 的统治下异军突起，一部分原因就是它聚焦于表单工具的核心——组织数据，并将其做得更加顺手：

> “Spreadsheets are really optimized for numerical analysis and Snancial calculations\. But almost 90% of spreadsheets don’t have formulas\. Most are used for organizing purposes\.” \(Howie Liu, founder, Airtable\)——How Airtable Became a Unicorn by Reinventing the Spreadsheet

代码管理亦然。其实业余爱好者也好，专业人士也罢，与其美名其曰“某某管理”，不如大大方方承认具体需要哪些功能。剪藏、快速插入、高亮浏览，可能再加上一个跨平台同步，基本构成了代码管理的核心功能，先处理好它们，才算“做正确的事情”。

🛍 我撰写的付费栏目《信息管理，文件为本位的方案》正在 UNTAG 售卖，对本文话题有进一步讨论，欢迎选购。

🔗 付费栏目链接

---

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