终端环境重新配置记

作者:早睡失败者 发布时间: 2026-08-13 阅读量:27 评论数:0

上个月我把用了四年的终端配置全删了重来。这篇是那两天的实录,包括我删掉什么、按什么顺序加回来、中间踩了哪个坑。

起因:一秒八

触发点很具体。我某天顺手测了一下 shell 的启动时间,一点八秒。我一天开新终端窗口大概八十次,也就是每天有两分半钟在等提示符出现。两分半不算多,但让我难受的是另一件事:我不知道这一点八秒花在哪儿了

我打开配置文件想查,看到的是六百多行、掺着注释、有一半我已经不记得为什么写的东西。里面有三个不同的版本管理器,两套补全系统,一个我两年前试用过的提示符主题的残骸。

第一步是删,不是优化

我做的第一件事是把整个配置目录改名成 old,然后新建一个空的配置文件,重启终端。启动时间零点零四秒。裸终端能用,只是很难用。

然后我给自己定了个规矩:只有当我因为缺少某个功能而真的卡住的时候,才去 old 里把对应的那段翻出来加回去。 不预先加,不凭记忆加。

接下来一周实际加回来的东西

按时间顺序,这就是真实的列表:

  1. 历史搜索。第一个小时就加了。这是我使用频率最高的功能,没有之一。
  2. 提示符里的分支名。第二个小时。但这次我没用现成的主题包,自己写了四行,只显示当前目录和分支,脏工作区加个星号。旧的主题包会去查远端状态,那是启动慢的元凶之一。
  3. 几个别名。第一天下午。最终只有七个:git 的四个,加上 ls、grep 各一个变体,和一个跳回项目根目录的。旧配置里有六十三个别名,我居然只想起来七个。
  4. 模糊查找工具。第二天。接在历史命令和文件跳转上。
  5. 目录跳转记忆。第三天。
  6. 语言版本管理器。第四天,因为要切一个老项目的版本。这次只装了一个,而且改成懒加载——不在启动时初始化,第一次调用相关命令时才初始化。

一周之后,配置文件八十九行,启动时间零点一一秒。旧文件里剩下的五百多行,我一行都没想起来要加。

踩到的坑:拆得太碎

中间我犯了个错。因为觉得单文件不优雅,我把配置拆成了七个小文件,按功能分:别名、环境变量、补全、提示符、函数、平台差异、私密变量。看起来很整洁。

三天后我要改一个别名,先想它在哪个文件,打开发现不在那儿,又找了两个文件。拆分带来的整洁是给读者的,而配置文件唯一的读者是我,而且我一年只读三次。 我合并回了两个文件:一个主文件,一个不进版本库的私密文件。

另一个决定:我放弃了跨平台通用

旧配置里有大量 if 判断,处理不同系统的路径差异。写的时候很有成就感,实际上我已经两年没在另一个系统上用过它了。这次我直接假设只有一个平台。哪天真需要了再说。

这是我这次最大的心态转变:配置文件不是软件,不需要考虑未来兼容性和其他用户。 它是给现在的我用的一次性工具,重写它的成本比维护它的成本低得多。

版本管理的处理

配置进 git,但我加了一条以前没有的规矩:每次改配置必须写清楚为什么改。所以我的提交信息现在是「加历史搜索:手敲长命令太累」这种,而不是「update zshrc」。四年后的我会感谢这个。

代价

说实话,代价是有的。我丢掉了一些确实有用但我暂时没想起来的东西——比如一个批量重命名文件的函数,两周后我需要用的时候得重写。那次重写花了十五分钟。

和四年积攒的一点八秒相比,十五分钟很便宜。我打算每两年做一次这个动作。不是因为配置会变坏,是因为我会变。

评论