1. 为什么要改robbyrussell:默认主题的痛点与定制思路
1.1 先看清楚robbyrussell到底做了什么
oh-my-zsh 安装完成后,绝大多数人见到的第一个提示符长这样:
user@hostname ~/workspace/project git:(main) $这就是 robbyrussell 主题的默认渲染结果。它的信息量其实不小:当前用户、主机名、所在目录、git 分支、权限符。但说实话,我用了一段时间之后,越看越觉得不对劲。默认的青色目录 + 绿色用户名的组合在深色终端里还可以,白天在浅色背景下简直看不清;git 分支信息虽然有,但只显示分支名,不显示当前是否有未提交的改动;最让我受不了的是,当目录层级一深,整行提示符比命令还长,看一眼都要愣半天。
我这人有个习惯,凡是每天要看几十次的东西,就值得花时间优化。终端提示符恰恰是程序员每天盯得最多的界面元素之一。robbyrussell 好是好,但它是给所有人用的默认方案,不是给我用的方案。这也是这篇文章的初衷:教你像拆玩具一样把 robbyrussell 拆开,改成一个真正顺手的样子。
1.2 修改之前先搞懂oh-my-zsh的加载机制
很多人上来就直接编辑~/.oh-my-zsh/themes/robbyrussell.zsh-theme这个文件,改完发现不生效,或者一升级 oh-my-zsh 就全部白改。这里面的关键坑,在于没搞清楚 oh-my-zsh 的主题加载机制。
整个链路是这样的:当你打开一个终端窗口,zsh 会先读取~/.zshrc文件,这个文件里有一行ZSH_THEME="robbyrussell"。oh-my-zsh 的启动脚本根据这个变量,去~/.oh-my-zsh/themes/目录下查找对应的.zsh-theme文件,然后把它加载进来执行。加载完成之后,主题文件里定义的PROMPT变量就决定了你的提示符长什么样。
所以实际操作上,有两个完全不同的修改层次:
- 修改
ZSH_THEME变量,换成另一个现成主题 - 修改主题文件内部定义的
PROMPT等变量,定制现有主题
我这个场景是第二种。但注意,我强烈不建议直接编辑~/.oh-my-zsh/themes/robbyrussell.zsh-theme原文件。oh-my-zsh 的升级脚本在更新时会覆盖这个目录下的所有文件,你改的东西会全部丢失。正解是新建一个自定义主题文件,放进~/.oh-my-zsh/custom/themes/目录。oh-my-zsh 加载主题时会优先查找这个目录,它的优先级更高,而且升级时不会被触碰。这个习惯我从第一次改主题就养成了,后来每次升级 oh-my-zsh 都没出过问题。
具体操作很简单:
mkdir -p ~/.oh-my-zsh/custom/themes cp ~/.oh-my-zsh/themes/robbyrussell.zsh-theme ~/.oh-my-zsh/custom/themes/myrobby.zsh-theme然后修改~/.zshrc里的配置:
ZSH_THEME="myrobby"保存后执行source ~/.zshrc就能看到效果。这样改主题文件,怎么折腾都不心疼,随时可以回退到默认版。
2. 主题文件解剖:一条配置是怎么控制整个提示符的
2.1 从主题文件到渲染结果的完整链路
robbyrussell 的完整主题源码其实就这么几行:
PROMPT='%{$fg_bold[green]%}%n@%m%{$reset_color%} %{$fg[cyan]%}%~%{$reset_color%} $(git_prompt_info) %{$fg[blue]%}$%{$reset_color%} ' PROMPT2='%{$fg[cyan]%}%_%{$reset_color%} ' ZSH_THEME_GIT_PROMPT_PREFIX="git:(" ZSH_THEME_GIT_PROMPT_SUFFIX=") " ZSH_THEME_GIT_PROMPT_DIRTY="*" ZSH_THEME_GIT_PROMPT_CLEAN=""别看代码短,信息密度相当高。这一行PROMPT拆开看,是由好几段拼接起来的:先是连接符,里面夹着绿色加粗的%n@%m,也就是用户名@主机名;然后%{$reset_color%}把颜色重置;接着是青色加粗的%~,即当前目录路径;再重置颜色,然后用$(git_prompt_info)调用了 oh-my-zsh 内置的一个函数,负责在 git 仓库里输出分支状态;最后以蓝色$结尾。%{...%}这个包装,是为了告诉 zsh 括号里面的内容不占实际屏幕宽度。因为颜色转义序列在终端里是不可见字符,如果你不告诉 zsh 这一点,它就算不对提示符的实际长度,命令换行时会出现光标错位、输入重叠的诡异现象。
这里最容易被忽略的是PROMPT2。它不是主提示符,是命令没有输入完、zsh 等你继续输入时显示的次级提示符。比如你输入了一个for循环或者多行命令,zsh 会自动用PROMPT2作为续行前缀。robbyrussell 里它显示的是%_,也就是当前正在解析的 shell 结构,比如if、for、while这些关键词。我之前有个同事把PROMPT2改得特别花哨,结果写多行命令时屏幕乱成一团,后来他才明白次级提示符也得单独设计,不能跟主提示符共用同一套逻辑。
2.2 颜色代码与格式转义的速查要点
修改主题文件,本质上就是改这些转义符。我整理了一份常用的对照,改主题时随手看一眼比查文档快得多。
| 转义符 | 作用 | 示例 |
|---|---|---|
%n | 当前用户名 | root 显示 root |
%m | 主机名(短格式) | my-mac 显示 my-mac |
%~ | 当前目录,带~缩写 | /Users/me/proj显示~/proj |
%d | 当前日期 | 显示2025/01/18 |
%D{%H:%M} | 当前时间,可自定义格式 | 显示14:30 |
%# | 权限符,root 显示#,普通用户显示% | 对应提示符末尾 |
%_ | 当前解析的 shell 结构 | 续行显示for等 |
%{$fg[red]%} | 切换到红色前景 | 后续文本变红 |
%{$fg_bold[green]%} | 切换到绿色加粗 | 后续文本变绿加粗 |
%{$reset_color%} | 重置所有颜色属性 | 恢复默认样式 |
%(条件.真值.假值) | 条件表达式三元判断 | %(!.#.%) |
颜色名除了red、green、cyan、blue、yellow、magenta、white、black这 8 个基础色,还有带_bold后缀的加粗版本,以及fg_bold这种把加粗放进变量里的写法。如果你用 256 色终端,还可以用$FG[编号]这样的方式用到更多颜色,比如$FG[208]是橙红色。不过 robbyrussell 这种极简主题用基础色就够,引入太多颜色反而显得杂乱。
另一个需要注意的点是转义里的嵌套顺序。%{$fg_bold[green]%}%n@%m%{$reset_color%}这段,是把颜色设置放在文本之前,文本结束立刻重置。如果不重置,后面的所有内容都会带着绿色继续渲染,一直延续到整个提示符结束,看起来就像有人在提示符上打了条荧光绿的标记。我第一次改主题时偷懒,少写了几个%{$reset_color%},出来的效果就像彩虹糖中毒了一样。所以说,每一段颜色都要有始有终,这算是我改主题踩过的第一个坑。
2.3 git_prompt_info 究竟在哪定义的
刚开始改主题的人经常会问一个问题:$(git_prompt_info)这个函数为什么在主题文件里没有定义,它却能正常工作?这个函数的实际定义在~/.oh-my-zsh/lib/git.zsh文件里,oh-my-zsh 在加载主题之前会先把lib/目录下的所有公共函数加载进来。也就是说,主题文件里调用的工具函数其实是框架预置的,你可以在任何自定义主题里继续使用这些函数,不用自己实现。
git_prompt_info的返回值由几个环境变量控制,robbyrussell 主题文件里定义的那三行ZSH_THEME_GIT_PROMPT_PREFIX、ZSH_THEME_GIT_PROMPT_SUFFIX、ZSH_THEME_GIT_PROMPT_DIRTY就是在配置它的输出格式。默认时,它会在 git 仓库中输出类似git:(main)这样的内容;如果当前分支有未提交的改动,就变成git:(main*),那个星号由DIRTY变量定义,值为空字符串表示干净。
理解了这个机制,你就能自由扩展了。比如我想让 git 分支显示得更直观,可以这样改:
ZSH_THEME_GIT_PROMPT_PREFIX="%{$fg[magenta]%}[" ZSH_THEME_GIT_PROMPT_SUFFIX="]%{$reset_color%}" ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[red]%}✗%{$reset_color%}" ZSH_THEME_GIT_PROMPT_CLEAN="%{$fg[green]%}✓%{$reset_color%}"这段配置的意思是:分支外层的方括号用洋红色,如果有未提交改动,在括号里显示红色叉号;如果全部提交干净了,显示绿色对勾。这样一眼就能看出当前仓库的状态,不用额外敲git status。当然,✓和✗这两个符号需要字体支持,我的建议是直接用等宽字体里自带这些符号的版本,比如 JetBrains Mono、Fira Code、Source Code Pro 的新版本都能正常显示。
3. 实操:按你习惯定制robbyrussell主题
3.1 最小改动方案:调整颜色和布局
如果只是想让 robbyrussell 的配色看得舒服一点,改动量非常小。把主题文件复制到自定义目录后,我尝试过很多种搭配,最后最常用的一套是:
PROMPT='%{$fg_bold[green]%}%n@%m%{$reset_color%} %{$fg_bold[blue]%}%~%{$reset_color%} $(git_prompt_info) %{$fg_bold[yellow]%}$%{$reset_color%} '改动就两处:目录部分从普通青色改成了加粗蓝色,$符号从蓝色改成了加粗黄色。别小看这两处变化,实际观感完全不一样了。在深色终端下,蓝色加粗的目录路径比青色更容易聚焦,黄色$是整行的入口点,你的注意力会不自觉地落在那里。在浅色终端下,黄色也比蓝色耐用得多。
如果你觉得整行太长,可以把用户名和主机名去掉。我试过在云服务器上操作时,那些机器的主机名又长又绕,每次显示都占掉一截,去掉之后清爽得多。但要留个心眼:如果你同时管理多台服务器,去掉主机名以后,很容易在执行命令时搞不清自己登录的是哪一台机器。我因为这事儿在错误的机器上跑过rm -rf(幸好目录写错了没删掉),所以现在凡是生产服务器我都保留主机名,只是把它改成简短一截的%m短格式。
3.2 给提示符加上时间和虚拟环境信息
我日常最依赖的两个改动:一是显示时间,二是显示 Python 虚拟环境。
时间这个东西,平时你可能觉得多余,但当你盯着终端翻历史记录的时候,就知道它有多重要了。我经常遇到这种情况:半小时前跑了个测试,现在回来看输出,根本不知道那是几点跑的。在提示符上加上时间,配合终端的历史记录,整个操作轨迹就非常清晰了。
改法是在PROMPT的最前面加一段:
PROMPT='%{$fg[green]%}[%D{%H:%M}]%{$reset_color%} %{$fg_bold[green]%}%n@%m%{$reset_color%} %{$fg_bold[blue]%}%~%{$reset_color%} $(git_prompt_info) %{$fg_bold[yellow]%}$%{$reset_color%} '%D{%H:%M}会渲染成[14:30]这样的格式,放在提示符最前边,一眼能扫到。注意这个格式里的{%H:%M}是 zsh 的strftime格式占位,H代表小时,M代表分钟,可以自由改成%H:%M:%S精确到秒,或者加上日期%y/%m/%d %H:%M。
虚拟环境信息是 Python 开发者的刚需。如果你经常在多个venv、conda 环境之间切换,指不定哪天就在错误的环境里执行了pip install,装了一堆不该装的包。zsh 里获取虚拟环境名很简单,就是读取$VIRTUAL_ENV环境变量,然后用basename提取最后一段路径:
PROMPT='%{$fg[green]%}[%D{%H:%M}]%{$reset_color%} %{$fg[magenta]%}${VIRTUAL_ENV_PROMPT}%{$reset_color%} %{$fg_bold[green]%}%n@%m%{$reset_color%} %{$fg_bold[blue]%}%~%{$reset_color%} $(git_prompt_info) %{$fg_bold[yellow]%}$%{$reset_color%} '这里直接用$VIRTUAL_ENV_PROMPT是因为新版 Python 的 venv 模块会自动在激活环境时设置这个变量,它的值通常带有尾随空格,比如(venv),连格式都不用自己调,直接塞进提示符就能用。如果你用的是老版本 Python 或者 conda,可以退而求其次用${${VIRTUAL_ENV:t}:+(${VIRTUAL_ENV:t}) }这种写法。这个表达式的意思是:如果VIRTUAL_ENV变量存在,就取出它的最后一段路径,包上括号;不存在就什么都不输出。整个过程不会报错,在没有虚拟环境时也完全不影响提示符的渲染。我自己实测下来,magenta 紫色的环境名是整行提示符里最抢眼的信息,基本不可能再犯进错环境的低级错误。
3.3 把git状态信息做得更顺手
robbyrussell 默认的分支显示是普普通通的文本,分支一多,视觉上平平无奇。我用了一段时间后,把 git 信息做成了带颜色区分的形式,前面提过的红叉绿勾就是用ZSH_THEME_GIT_PROMPT_DIRTY和ZSH_THEME_GIT_PROMPT_CLEAN控制的。但光有分支状态还远远不够,我经常需要知道当前分支和远程分支有没有分叉、有无未推送的提交。oh-my-zsh 其实内置了相关函数,只是 robbyrussell 这个极简主题根本没有调用它们。
比如git_prompt_status这个函数,可以告诉我们暂存区、工作区、未追踪文件的改动情况。函数定义在lib/git.zsh,它的输出由下面这几个变量控制:
ZSH_THEME_GIT_PROMPT_ADDED="%{$fg[green]%} ✚" ZSH_THEME_GIT_PROMPT_MODIFIED="%{$fg[blue]%} ✹" ZSH_THEME_GIT_PROMPT_DELETED="%{$fg[red]%} ✖" ZSH_THEME_GIT_PROMPT_UNTRACKED="%{$fg[yellow]%} ?" ZSH_THEME_GIT_PROMPT_RENAMED="%{$fg[magenta]%} ➜" ZSH_THEME_GIT_PROMPT_UNMERGED="%{$fg[cyan]%} ═"这些变量同样可以在自定义主题文件里覆盖。设置好之后,再把PROMPT里的$(git_prompt_info)替换成:
PROMPT='... $(git_prompt_info) $(git_prompt_status) ...'于是提示符里会多出一段类似✚ ✹ ✖ ?的标记,分别对应有新文件暂存、有文件修改、有文件删除、有未跟踪文件。这样一来,你在提示符后面敲命令之前就已经清楚了当前工作区的整体状态,不用专门跑去敲git status。这套方案唯一的小缺点是提示符会变长,所以我后来把 git 状态单独放到了右侧提示符RPROMPT上,这样既不干扰左边敲命令的主区域,又能随时瞥一眼状态信息。这个做法的设置方式是:
RPROMPT='$(git_prompt_info) $(git_prompt_status) %{$fg[cyan]%}[%D{%H:%M:%S}]%{$reset_color%}'右侧提示符里的内容会在终端行的最右侧靠右对齐显示,命令本身在左侧输入,两者互不干扰。我把时间和 git 状态都放在右侧之后,左边的主提示符就只剩用户、目录、$三样,输入命令的空间大了很多,整个终端看起来也清爽很多。这里有个小坑要提醒你:RPROMPT里千万别放太长又经常变化的内容,否则当命令长度超过终端宽度时,右侧提示符会和命令产生视觉重叠,看起来非常难受。时间戳精确到秒就会一直跳,放在右侧合适;放左侧的话,每秒钟跳一次很容易让人分心。
4. 常见问题与排查技巧实录
4.1 修改不生效、颜色错乱、符号显示成一堆问号
我自己改主题这几年,遇到的情况基本逃不出下面这张表。整理出来,遇到直接对号入座就行。
| 现象 | 原因 | 解决办法 |
|---|---|---|
| 修改主题文件后提示符没变化 | 没重新加载配置 | source ~/.zshrc或重开终端窗口 |
ZSH_THEME改成了自定义名但仍显示旧主题 | 自定义文件放错目录或文件名后缀不对 | 确认文件在~/.oh-my-zsh/custom/themes/下,且以.zsh-theme结尾 |
提示符里出现%、%n等字面字符 | 转义符写错,或PROMPT没生效 | 检查是否写了setopt prompt_subst,它是$(...)命令替换生效的前提 |
| 颜色一直延伸串到下一个区域 | 缺少%{$reset_color%}收尾 | 每一段颜色结束时都要显式重置 |
特殊符号(如➜、✘、✓)显示成问号或方块 | 当前字体不支持这些字形 | 换用 Nerd Font 或 JetBrains Mono 等包含符号的字体 |
| 多行命令时提示符重叠、光标错乱 | 颜色转义没包%{...%},zsh 统计了不可见字符 | 所有颜色控制都必须写成%{$fg[...]%}形式 |
| 升级 oh-my-zsh 后自定义丢失 | 直接改了框架目录下的原主题文件 | 以后一律用custom/themes目录自定义 |
4.2 一个最容易忽视的坑:prompt_subst 选项
$(git_prompt_info)这种写法看起来平平无奇,但它在 zsh 里要正常工作,必须启用prompt_subst这个选项。它的作用是让 zsh 在渲染PROMPT变量时,执行里面的命令替换。oh-my-zsh 默认已经帮你开启了,所以你直接用默认主题没问题。但是如果你从网上抄了一段主题代码,放在自己的主题里,恰好那段代码在这个选项没开的 shell 环境里运行,你看到的就不是分支名,而是一行字面量的$(git_prompt_info)。
排查方法很简单,在终端里敲一下:
setopt | grep prompt_subst如果有输出,说明选项是开的;没输出就把它加进~/.zshrc:
setopt prompt_subst这个选项最好是全局设置而不是只在主题文件里设置,因为主题文件加载顺序比.zshrc晚,有些依赖 prompt 的环境检测逻辑在主题加载之前就已经跑过了。我遇到过不止一次,有人把setopt prompt_subst写进主题文件,结果补全插件和自定义函数里使用 prompt 的代码反而失效了。所以记住,这种 shell 级别的选项放.zshrc,主题文件里只做外观定义。
4.3 符号字体问题的完整处理方案
➜这个箭头符号是很多主题的默认提示符开头,robbyrussell 里其实没用它,用的是$权限符。但如果你在网上看到好玩的方案,想要那些箭头、星星、勾叉符号,就得注意字体的支持问题了。系统自带的等宽字体比如 Menlo、Consolas、DejaVu Sans Mono,对 Unicode 符号的支持参差不齐。我踩过最狠的一次坑是给git_prompt_status配了✹符号,在 macOS 的 Terminal.app 里正常,切到 iTerm2 里就变成一个空心方块,再切到 VS Code 内置终端又正常了。折腾了半天,最后归根到底就是一个东西:字体有没有覆盖这个码位。
我的建议是直接在终端里装一款 Nerd Font。这类字体是把大量图标、符号、箭头统一塞进字体文件的,比如MesloLGS NF、FiraCode Nerd Font,装完后在终端的设置里切换过去,绝大多数符号都能正常显示。macOS 用户推荐 iTerm2 的 14 天脚本安装方式,Windows 用户直接在项目里下载.ttf文件安装,Linux 用户用发行版的包管理器装fonts-firacode-nerd之类的包就行。装完记得不仅要切换终端的字体,还要切换 IDE 集成终端的字体,以及 tmux 内部的字体,这一步很容易漏掉。
4.4 排查思路:从头验证每一步
如果你改出来的提示符完全乱了,不要瞎猜。我的排查顺序是固定的,从底到顶一层一层看:
第一步,先确认语法没写错。把主题文件里所有%{和%}成对地数一遍,括号必须闭合。第二步,在终端里手动执行整条PROMPT赋值语句,就能看到即时渲染结果,不用反复重启终端。比如:
PROMPT='%{$fg_bold[green]%}%n@%m%{$reset_color%} %{$fg_bold[blue]%}%~%{$reset_color%} $(git_prompt_info) %{$fg_bold[yellow]%}$%{$reset_color%} '如果条语句在交互终端里执行后立刻生效,就说明语法没问题。如果执行后还是老的提示符,说明你的环境有其他机制在覆盖PROMPT,比如 powerlevel10k 主题自带的初始化脚本。第三步,检查有没有优先级冲突。如果你同时开了 powerlevel9k、starship 这类工具,或者配置了precmd钩子函数重新设置了PROMPT,主题文件里的赋值会在每次执行命令时被覆盖掉。可以用which precmd或type precmd看看有没有可疑的钩子函数在起作用。
5. 进阶玩法:让主题真正“为我所用”
5.1 分支显示在右侧的取舍
把 git 信息挪到右侧之后,我遇到了一个比较微妙的问题:右侧提示符在命令运行期间是会随时更新的吗?答案是看配置。zsh 的右侧提示符RPROMPT默认在每次命令执行完都会被重新渲染,所以分支状态和时间的更新是实时的,不需要手动干预。但我实测发现,如果命令行太长,占据了整个终端宽度,右侧的 git 状态就会被顶到下一行,视觉上变得支离破碎。这在宽屏终端里问题不大,在窄窗口里就很烦。
后来我用一个办法解决了:给RPROMPT套一个截断逻辑,让它在终端宽度足够时才显示完整状态。这个逻辑用 zsh 的条件展开可以写成:
RPROMPT='${PR_BG[cyan]}${VIRTUAL_ENV_PROMPT}${PR_RESET} $(git_prompt_info) $(git_prompt_status)'不过说实话,这个方案需要引入额外的 PR 变量体系,对只想简单改造 robbyrussell 的人来说有点重了。我的实际做法是干脆把 git 分支状态留在左侧提示符,把时间戳放到右侧。分支是高频信息,放左边好看也好点;时间相对低频,放右边偶尔扫一眼足够了。我的最终方案是:
PROMPT='%{$fg[green]%}[%D{%H:%M}]%{$reset_color%} %{$fg_bold[green]%}%n@%m%{$reset_color%}:%{$fg_bold[blue]%}%~%{$reset_color%} $(git_prompt_info) %{$fg_bold[yellow]%}$%{$reset_color%} ' RPROMPT=''这套配置左半边集中了所有高频信息,右半边干干净净,命令输出的空间彻底释放,属于我试了十几套方案之后综合体验最好的。
5.2 与tmux状态栏联动的玩法
改完终端提示符之后,我又顺手做了一件让工作体验提升不少的事:把 git 分支状态同步到 tmux 的状态栏。tmux 是我日常必用的终端复用工具,开着多个窗口,每个窗口里跑着不同的项目。默认情况下,tmux 的状态栏只显示会话和窗口编号,根本看不出哪个窗口对应哪个项目。要手动记住,过五分钟就忘了。
实现这个联动的思路很简单:在每次命令执行完,precmd钩子去更新 tmux 状态栏的某个占位变量。在~/.zshrc里加一段函数:
precmd() { local branch="" if [[ -d .git ]] || command git rev-parse --git-dir >/dev/null 2>&1; then branch=$(command git symbolic-ref --short HEAD 2>/dev/null || echo 'detached') tmux set-option -q "@git_branch" "$branch" fi }然后在 tmux 配置文件~/.tmux.conf里设置状态栏格式,调用这个变量:
set -g status-left "#S #[fg=blue]#(tmux show-option -qv @git_branch)"设好之后,tmux 状态栏的每个窗口会显示当前所在的 git 分支名,切换目录和分支时自动更新。它和 robbyrussell 主题里的分支显示形成了一个互补:终端提示符里告诉你当前分支内部是否存在改动,tmux 状态栏告诉你整个窗口正在跑哪个分支。这两套信息配合好了,多任务操作的迷糊感能少很多。这个联动方案我已经跑了一年多,稳定性很好,唯一要注意的是 tmux 的变量更新有延迟,不会立刻刷新,需要习惯一下。
5.3 定制主题的四个设计原则
改主题改久了,我总结出四条自己的设计原则,写给刚开始动手的人参考。
第一条,信息分层。不是所有信息都值得放在同一个水平位置。高频信息(用户、目录、分支)放最靠前,低频信息(时间、虚拟环境)放中间或靠后。如果信息量特别大,就拆一部分到右侧。我见过有人把所有状态全堆在一行,结果提示符比 cmd 还长,找重点的难度反而增加了。
第二条,颜色克制。一个提示符最多用三到四种颜色,每种颜色对应一类意义。我自己的习惯是:绿色表示身份(用户、主机),蓝色表示位置(路径),洋红色表示环境(虚拟环境),黄色表示可操作状态(命令符)。这样看久了能形成条件反射,看到颜色就知道是哪类信息。
第三条,每段颜色必收尾。这是规避提示符错乱最有效的办法。每次颜色开始都写%{...%},颜色结束立刻写%{$reset_color%},这是原则问题,不要省。宁可代码看起来啰嗦一点,也不要让终端渲染出错。
第四条,经常迭代。提示符这东西,你用两周后才会发现自己真正需要什么。第一次改完不要觉得大功告成,先跑一段时间,把觉得多余的东西删掉,把缺的信息补上,慢慢就会趋于稳定。我自己的 robbyrussell 定制版本已经迭代了四五轮,每一轮都是根据实际感受微调出来的,而不是一次设计定稿。
改主题这个事,说大不大,说小不小,但它真真实实地影响着我每天的工作流。一个顺手、好用、有个人印记的终端提示符,能让你在敲命令时心情都不一样。如果你在用 oh-my-zsh,不妨从复制一个 robbyrussell 主题文件开始,按自己的习惯改上一轮,体验一下这个定制的过程。我打包票,改完第一版,你大概率会回来继续调第二版的。