程序猿这个物种有个习性:拿到一台新的电脑之后,就会开始 随意地敲击键盘(至少在外人看来是这样的),直到它可以舒服地使用这台电脑为止。
世界上有两种人:一种人用电脑纯粹为了完成工作,另一种人则乐于折腾电脑直到它们完全符合使用习惯才开始工作。 ref
折腾电脑和手机,永远都是程序员、数码爱好者和各种「效率达人」无法离开的母题。当年 越狱 和 root 如此,现在的各种 快捷指令、效率 app 和 Tasker 亦如是。
写这篇文章的由头,除了我本人就是一个 computer tinker(该怎么翻译,「电脑匠人」?)之外,还有另一件事:本来手头上的 M3 Pro MacBook Pro 用得好好的,结果最后笔记本上的 MagSafe 芯片似乎烧坏了,没办法通过 MagSafe 充电,于是拿到了天才吧修了一星期。最终他们把我的 MacBook 上的数据全部清空。我当时还想着可以通过时间机器(Time Machine)恢复,但不知为何,无法解密我的硬盘…… 于是乎,一怒之下将它设置为全新的 Mac。但也是时候可以重新做一下 Mac 上的「配置体操」。
以下就是我这次给 Mac 做的「配置体操」的一些成果,用了一个月,还不赖,顺手记录一下。
编码助手 & 操作代理:Claude Code
一个比较靠谱的「身边统计学」是,当一件事情被你家的长辈知道的时候,这件事情在人群中的渗透率已经是极高水平。微信如此,抖音如此,AI 也是如此。只不过,对于大多数人而言,他们接触 AI 的第一款应用大概率是聊天机器人(无论是 ChatGPT 还是 DeepSeek 还是别的什么),但对于包括我在内的很多「臭写代码的」,第一款接触的基于 LLM 的产品其实是 GitHub Copilot。
现在,宣传可以让你「写代码效率提升」的 AI 工具数不胜数,能用的工具也很多。现阶段用得比较多的工具之一叫 Cursor,它是一款深度集成了 AI 的 IDE。国内字节跳动有一个对标产品,叫做 TRAE。还有一种 AI 工具是集成在你的终端环境中的,例如 Claude Code 和 Gemini CLI 这种在终端中直接使用的,或是 Wrap 这样的终端拟真器。
我也是 GitHub Copilot 最早一批的用户——不仅仅是内测,更是因为在正式推出的早期,我 靠着我 Monash 学生资格 白嫖了很长一段时间。GitHub Copilot 最早期只有联想功能,而询问和改代码功能要到大约一两年之后才正式推出。而 Cursor 集成程度要更深一些,但实现的功能可能也差不太多。但最后我选择花 100 美金怒开 Claude Max 来用 Claude Code。
放弃 GitHub Copilot 的最大的原因是,它(对我来说)最好用的功能就是代码联想功能,但也仅此而已。虽然 GitHub Copilot 的联想功能可能真的是所有 AI 里的独一家(我基本没有看到有其他比 GitHub Copilot 好用的 AI 联想功能),但它能做的事情也就仅此而已。一个 使用本地模型就能做到 的玩意,到头来就要收每年 100 美金,这事情我觉得投入产出比有点高,显得没那么值。
而 Cursor 和 TRAE 呢?它们引以为豪的 Agent 代码生成功能在很多情况下确实很能从零做出一个成品。但是 —— 既然读别人写的代码是一件痛苦的事情,那么读 AI 的代码更是。所以我目前阶段 不太喜欢让 AI 帮我写太多大块的代码,否则我就只有两种选择:要么继续央求 AI agent 帮我接着改,要么就硬着头皮读 AI 的代码(虽然你也可以接着问 AI 你是怎么写的)。
虽然上面这段话听着像是个被时代抛弃的老头儿拿着传统「老人机」在抱怨,但这并不代表我完全不再使用 AI agent 来改代码,但不如说,相比较于单纯帮我改代码这件事,能够帮我做到更多事情的 agent 可能是我当下更需要的。这就是为什么我几乎全面转向使用了 Claude Code。我第一次意识到 Claude Code 潜力,是通过阮一峰推荐的 Claude Code is My Computer 这篇文章,作者分享了一些使用 Claude Code 的经验,最重要的是,你可以将它作为你的「终端助理」,让 Claude Code 帮你做一些日常琐碎的电脑维护工作,而不仅仅只是完成编码工作。

终端(CLI)界面有两个特点:一是指令是固定的(也就是说,传统上你需要「背指令」才能正确使用终端);第二是终端「文字指令输入」和「文字结果输出」本身就是一个天然的「聊天界面」。Claude Code 和 Wrap 最天才的地方,就是在终端上「套」一个 AI agent 层,你和 agent 交互,和你直接在终端里输入指令的体验几乎是一模一样的。而终端纯文本的「输入输出」特性,也天然地对 LLM 更加友好。
最后的结果和我的设想差不太多:现在我会在终端添加一个 cc
的别名,用于快速唤起 Claude Code。除了我明确需要的任务之外,我都会直接唤起它,帮我完成大部分电脑维护操作(当然也会用一些额外的工具,这些在这篇文章之后再聊)。甚至,有一次我将一个简单的视频切黑边的任务交给它,它会自动调用 FFmpeg 帮我完成任务,整个任务用时大约十分钟不到——十分钟只够我下载一个必剪 app……

另一个让我觉得 AI agent 很有用的场景是,我在我的家目录(~
)下创建了一个以 Markdown 文件和文件夹组织起来的笔记库。在这个笔记库里调用 Claude Code,我就可以和 AI 交互来读写笔记。这件事情很酷的地方在于,让 agent 来帮我整理笔记,在很大程度上就让 agent 成了我的「个人搜索引擎」。(想想看我订阅了几年的 Rewind.ai,每次它最有用的时候就是我在 macOS 上打国际服《最终幻想 XIV》复盘刚刚打完的副本……)可惜的是,这样的使用体验暂时还不能移植到手机上,甚至连使用成本(包括学习和金钱成本)都有点高。也许之后可能会有这样一个类似的产品,但现阶段来说,只有 Claude Code 和类似的产品能做到这样的程度。
软件安装与管理:Homebrew
如果你算是一个 macOS 上的「程序员老炮」,看到这标题的时候估计就该鄙夷我了:啥玩意,这包管理器不是「新电脑必装」没有之一了吗——「没有之一」指的是「你可以不装微信、QQ、Chrome,也得装个 Homebrew」。
要是真是这样我也没必要在这篇文章里给它专门开个部分。而 Homebrew 在新装 macOS 上最有用的地方则是 Homebrew Cask。简单来说,Homebrew Cask 是 Homebrew 本体的一个扩展,专门用于安装带有图形界面(即 GUI)的应用程序。而我最新发现的一个 Homebrew Cask 用法是,配合上一节提到的 Claude Code 来完成软件管理工作。要详细解释,得拆成两个部分来说。
首先是软件安装和管理本身。Homebrew Cask 几乎可以完成日常 90% 软件的安装和管理,包括新装和升级等。但很多情况下(特别是中文社区里的英文营销名称不太清晰的软件包),你可能得费一点功夫才能得知它的 Cask 包名。这就是 Claude Code 出场的时候了——你只需要对它说「安装 小米互联服务」,它就会自动猜测包名可能携带 xiaomi
关键词,然后帮我安装正确的软件包。而像是这个例子里的「小米互联服务」app 这种,在 Homebrew Cask 上的软件包名并没有「xiaomi」这个关键词。这个情况下,Claude Code 还能调用在线搜索找到这个 app 的正确包名是 hyperconnect
。 (虽然我第一次用 Claude Code 安装小米互联服务的时候它并没有搜出来,是之后打算提交新包的时候 Claude Code 发现已经有人用这个名字提交了)
其二是软件列表备份。由于我 Mac 上的数据有 99% 都是云端可存取的(包括我的配置文件等),因此对我来说设置一台 Mac 最耗时的就是重新安装软件。而 Homebrew 不像是其他的包管理器那样拥有动态的 lockfile(可以简单地理解为「软件安装列表」),因此我需要一个能够实时反映我的 Mac 上所有(通过 Homebrew 和 mas
)安装的软件的列表。
还是有请 Claude Code。我创建了一个 mac-setup
的仓库,这个仓库主要存放两个东西,其中一个就是实时更新的 lockfile,即我会要求 Claude Code 操作包管理器的同时,更新仓库里的 Mac 初始化脚本文件;脚本文件里的初始化流程里有一个安装所有软件包的流程,里面的软件包列表即是由 Claude Code 管理的。这样,当我设置新的 Mac 时,我只需要调用一个链接,就能把配置、软件等等东西全部初始化好。

那么这时候就又会有吴彦祖要问了,「你每次都要提示 Claude Code 更新脚本,万一哪次忘了怎么办呢?」这就是我的 mac-setup
仓库放的另外一个东西了:CLAUDE.md
文件。它其实是一个针对 Claude Code 的提示词(prompt),Claude Code 在目录里被唤醒的时候将会优先读取目录中的这个文件。我在家目录给这个文件做了一个 软链接,将其导向仓库中的同名文件,并在初始化设置脚本中创建同样的软链接。这样,提示词的更新也就可以延续到初始化设置中。在提示词文件中,我特意指明 Claude Code 在操作包管理器后必须更新脚本。这样一来,无论我是新装还是卸载软件,只需要说「安装软件」,Claude Code 就能包办剩下的所有杂活,不需要再担心忘了某个步骤。
写代码:Neovim、BB Edit 和 Xcode
想当初,我也是一位拜倒在 Visual Studio Code 石榴裙下的可人儿 —— 凭借其强大的生态力和本身开源特性,它几乎是这个世界上最流行的代码编辑器和 IDE(如果它能叫 IDE 的话)。虽然也能支持其他编辑器,但作为微软同门师弟的 GitHub Copilot,自然是对 VS Code 有着一流的集成程度。
但对我来说,VS Code 有着最致命的硬伤:它是 Electron 应用!换句话来说,Electron 应用本身就是「网页套壳」的,即每一个基于 Electron 的应用,都会携带一个(精简版)Chromium。鉴于 Chromium / Chrome 的 Blink 引擎在「占用海量内存」方面的前科…… 让我尽可能地 避免在电脑上安装基于 Chromium 的应用。
所以我几乎在放弃 GitHub Copilot 的同时,也尝试在放弃 VS Code(虽然放弃 VS Code 要稍微早一点,并且那时候还尝试在别的编辑器中安装 GitHub Copilot 插件)。而在之后我的选择是 Neovim。
在使用 Neovim 之前,我在终端编辑文本通常会选择用 Vim,甚至还在浏览器里安装过 使用 Vim 手势操作浏览器的插件,但真想把它当成主力编辑器的话,Vim 配置文件编辑起来还真是一坨屎山。而 Neovim 稍微好点——它的配置文件是 Lua,至少是那种「我也不算会,但它写出来我知道啥意思」的范畴。(反正最后还是请 Claude Code 帮我改配置 🥴)
相比较普通人而言,我对「Vi 家族」的编辑器适应性要好得多——毕竟用它来改服务器上的配置文件也用了至少七八年,将它改的更 fancy 一点,基本上能满足我 80% 的需求,用人话说就是「该有的都有」(甚至还能在里面开一个终端会话)。至于 Vim 的指令,其实我从真的改用它做主力编辑器到现在,都还没有完全脱离速查表,但已经比刚开始改用要熟练得多。

说是完成了 80% 的需求,剩下的 20% 可能就是一些边角的功能,例如偶尔会出现的「大段代码修改」这种。别装了,这种偶尔出现又不值得你花脑子存储这些可能之后三天、七天甚至几个月都用不了几次的指令的时候,用鼠标点点,效率肯定比记一堆文本指令高到不知道哪里去了。所以我还是安装了一个 GUI 文本编辑器 BBEdit。虽然是一个付费软件,但 BBEdit 的功能也是相当强大,包括函数查找、高级替换和 Git 管理等等。
至于 Xcode 嘛…… 库克!Craig!
额外章节:Windows 的一些设置
严格来说,我有两台 Windows 设备——一台是搭载 RTX 3060 显卡的台式机,另一台是 ROG Ally X 掌机。原本我有一台 Steam Deck,而且我个人更喜欢使用 Linux 桌面环境,但奈何…… 我是一位 没有人权的 国服《最终幻想 XIV》玩家,which means 在澳洲的我想要连回位于上海或北京的游戏服务器,就必须要安装网游加速器;但现在几乎所有的网游加速器都没有提供 Linux 版本,所以我只能乖乖地接着被微软蹂躏。
说是被蹂躏,但其实还是可以在有限的选择中拉开一个口子的。例如,我使用 AtlasOS 做了许多 tinker 工作,包括移除大部分微软的远控、禁用不必要的系统功能、卸载 Microsoft Edge 等等。但是在 ROG Ally X 上有一个小问题:AtlasOS 默认会禁用混合休眠(Hybrid Sleep),而待机超时或者点按电源键默认是进入普通休眠模式,这就会导致我的 ROG Ally X 待机功率极高,甚至从保护包里拿出来的时候都是烫的……
虽然天天骂微软,但偶尔微软还是能干点好事的。比如,推出了官方的包管理器 Windows Package Manager(a.k.a. WinGet
)。这就允许用户通过终端来安装、管理软件,包括来自 Microsoft Store 的软件。虽然不能有静态的安装列表,但至少可以通过 winget export -o packages.json
指令输出一个静态的 JSON 文件,重装之前记得导出一下就可以了。
尾声
原本这篇文章的标题是「人工智障调教指南」,打算写的是怎么样配置 Claude Code 来操作电脑,但最后发现,不如整点「数码博主」们喜欢的花活,也刚好撞上 macOS 重新设置的节点。
工具真的是个很有趣的东西:人们在主动选择、主动改造工具,但工具最后又在反过来影响人类。这就和有些人重装系统后立刻就能上手工作,而有些人就是要把系统改造成自己最舒服的配置才能工作一样。我并不是想要鄙夷那些「适应力强」的人,也并非在说「改造系统就没什么意义」。就像是「从 A 点到 B 点可以有无数种方法、每种方法都有优缺点」一样,每个人都要从效率、金钱和各种资源中,与工具达成某种「交易」,从而最大化收益。
所以,下次再见到程序猿物种随机敲打键盘的时候,请为它们多给予一点关爱,并友善地和它一起争论「代码缩进要四个空格还是两个空格」,感谢您的耐心。