article_image

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

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

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

  1. 通过剪藏工具,将代码片段收录到专门文件夹;
  2. 通过插入工具,随时随地搜索、插入代码片段;
  3. 通过 DEVONthink 浏览代码,高亮显示绝大多数编程语言的语法结构;1
  4. 纯文本文件兼容任何云同步工具,只需将代码文件置于云文件夹中,即可实现同步。
Alt text
DEVONthink 桌面端和手机端的代码展示效果

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

快速剪藏代码

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

Alt text
Stackoverflow 上常有高质量的代码,值得收集

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

Alt text
推荐根据代码语言划分文件夹

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

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

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

Alt text
剪藏下来的代码为 Markdown 代码块格式

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

  1. 自定义代码片段存储位置:图中 /Users/apple/Databases/Tech/Script/ 部分是我在自己电脑上存储代码片段的文件夹,将其修改为你的文件夹路径即可。一般只需要将文件夹拖到代码编辑器就能获得路径。注意路径需要以 / 结尾,不能遗漏,否则会找不到文件夹。
  2. 预设常用编程语言:将代码文件夹中的子文件夹名称预设在动作中,例如 {"AppleScript","BASH","HTML","Python","Javascript"},这样就能显示常用语言选单。3你可以根据需要增减编程语言,注意需要用英文双引号 "" 包起来,同时两两之间用英文逗号 , 隔开。
Alt text
配置图中高亮显示的两处代码后即可使用

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

随时搜索、插入代码

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

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

Alt text
分别在 LaunchBar 和 Keyboard Maestro 中实时搜索代码

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

Alt text
修改 LaunchBar 和 Keyboard Maestro 动作中的代码文件夹位置

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

用 DEVONthink 高亮显示代码语法

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

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

Alt text
Prism 支持两百多种编程语言

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

Alt text
在 DEVONthink 中开启 Prism 支持

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

Alt text
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 售卖,对本文话题有进一步讨论,欢迎选购。

🔗 付费栏目链接


  1. 其他支持代码渲染的工具也可以,相对而言 DEVONthink 比较简单,不用恶补编程知识。
  2. Stackoverflow 是一个代码问答网站,可以理解为代码领域的”知乎“。不过,现在可能是“面向 ChatGPT 编程”了。
  3. 更优雅的解决方案是自动读取代码文件夹下的所有子文件夹,但我不确定是否所有自动化工具都相关权限,为”向下兼容“,还是手动配置。

author_avatar

Lawyer, macOS/iOS Automation Amateur