定制你的外壳
定制你的外壳
由 Mux 赞助的 DEV 全球展示挑战赛:展示你的项目!
原文发布于我的博客。
本文是 Balthazar Rouberol 和Etienne Brodu (他们曾是室友、朋友和同事)自出版书籍项目的一部分,旨在赋能新一代开发者。我们目前正在努力完成这个项目!
如果您对本项目感兴趣,欢迎加入邮件列表!
目录
定制你的外壳
程序员们常常会
花费数小时调整和定制终端和 shell,添加或编写新的插件,这一切都是为了追求
“完美环境”并提高工作效率。而另一些人则恰恰相反
,他们完全避免调整 shell,以确保
在每台机器上都能获得相同的体验。
就我个人而言,我倾向于尽可能地使用个性化的操作系统外壳
。我觉得现在不同电脑之间的文件共享
问题已经很普遍了,而且个性化工作环境带来的好处实在太大,所以我很乐意付出 在电脑之间同步配置这点
小小的代价。
在本章中,我们将深入了解 shell 以及如何配置
终端环境以使其更符合您的需求。请注意,
部分建议仅代表个人喜好,可能并不
适用于您。我们鼓励您自行探索并找到最
适合自己的方法,但我们希望至少能为您指明正确的方向。
我应该使用哪个终端?
首先,如果您是终端新手,可能还没
意识到终端程序有很多种。macOS 预装了
Terminal,大多数 Linux 发行版预装
了 xterm、Gnome-terminal 或 Konsole,此外还有大量
其他终端程序可供选择。
我认为在选择“合适”的终端应用程序方面,并没有一个绝对正确且毋庸置疑的答案。
你问不同的人,可能会得到不同的答案。话虽如此,我至少可以分享一下
我个人的推荐和偏好。
无论你最终使用哪个终端,我认为根据自己的喜好和偏好进行配置都至关重要。作为一名程序员,你
可能会花费大量时间在终端上,为了让你
感到高效且充满掌控感,终端必须能够满足你的需求。
终结者
如果你使用的是 Linux 系统,我个人更喜欢 Terminator 1而不是
默认选项。它有几个我觉得很有用的功能:
- 标签页系统,允许您在同一个窗口中打开多个终端标签页
- 网格系统,允许您在同一标签页中拥有多个终端。

我可以在同一个标签页的多个窗格中工作,每个项目也可以使用一个标签页。
以下是我认为最有用的终结技快捷键:
| 捷径 | 行动 |
|---|---|
| Ctrl——ShiftE | 将屏幕垂直分割 |
| Ctrl——ShiftO | 水平分割屏幕 |
| Ctrl——ShiftT | 打开新标签页 |
| Ctrl-PageUp | 切换到下一个标签页 |
| Ctrl-PageDown | 切换到上一个标签页 |
| Ctrl-N | 打开新窗口 |
| Ctrl——Shift+ | 放大 |
| Ctrl——Shift- | 缩小 |
| Ctrl-D | 关闭当前终端 |
iTerm2
就 macOS 而言,我觉得默认终端(就叫
Terminal)很难用。macOS
编程社区普遍接受的终端是 iTerm2 2。它不仅具备上面提到的所有
功能,还有更多(真的很多)其他功能!

iTerm2 的外观与 Terminator 类似,但功能要强大得多。
我觉得 iTerm2 最实用的键盘快捷键是:
| 捷径 | 行动 |
|---|---|
| Cmd-D | 将屏幕垂直分割 |
| Cmd——ShiftD | 水平分割屏幕 |
| Cmd-T | 打开新标签页 |
| Cmd——Shift+ | 放大 |
| Cmd——Shift- | 缩小 |
| Cmd-N | 打开新窗口 |
| Cmd-D | 关闭当前终端 |
以下章节将介绍一些我个人
觉得方便的非默认 iTerm2 设置。再次强调,这些只是我的个人偏好,并非
强制性要求。您可以根据自己的需要随意忽略它们。
打开文件快捷方式
iTerm2 的一个我很喜欢的功能是,只需
Cmd按住鼠标左键并点击文件路径或 URL,即可
使用默认的关联程序打开资源。例如,它会
在浏览器中打开 URL,用预览程序打开本地 PDF 文件,
用你常用的文本编辑器打开文本文件等等。
新终端位置直观。
我对 iTerm2 做的另一个调整是更改了新终端默认打开的工作目录。我想要的是……
- 在我的主目录中打开一个新的终端窗口
- 在我的主目录中打开一个新的终端标签页
- 在上一个会话的目录中打开一个新的终端分屏窗口
我这样做是因为我经常发现,当我想在同一个项目中运行多个命令时,需要拆分当前选项卡,而每次拆分窗格时,我都必须进入项目目录
。cd

通过这些设置,我减少了进入项目目录所花费的时间cd。首选项 > 配置文件 > 常规 > 工作目录 > 高级配置 > 编辑
我应该使用哪种字体?
使用自己喜欢的字体至关重要。如果你经常
在终端上阅读和写作,那么最好使用一种让
你感觉舒适的字体。
我个人非常喜欢 Fira Code 3字体,无论是在文本编辑器
还是终端中。它不仅看起来赏心悦目,还
包含一系列连字,可以将多个字符组合在一起,
例如将“ !&”和“& =”合并为一个字符,从而让您更轻松地阅读
代码和解码符号。
请注意,并非所有终端都支持带连字的字体。例如,
iTerm2 支持,但 Terminator 不支持。
注:虽然我个人偏爱 Fira Code 字体,但还有其他一些设计精良
、包含连字功能的字体,例如 JetBrains Mono。4
我应该用哪个外壳?
我们之前已经暗示过:bash它并非唯一的 shell。
您可以自由使用其他 shell,例如zsh、fish、nushell等等。就像终端一样,“好”的终端
实际上取决于您对“好”的定义。如果您非常在意
在每台机器上使用相同的 shell,那么bash可能
适合您。它自 1989 年以来一直存在,稳定、成熟,并且是几乎所有
UNIX 系统的 默认 shell 。
在撰写本书的过程中,我惊讶地发现, Z-shell zsh(或者说它
本身)并非“末代”产品,它
早在1990年就已发布,仅仅比第一个稳定版的bash晚一年!
你可以期待它在稳定性、成熟度甚至语法方面(很大程度上
,除了配置方面)与bash不相上下。
我个人认为,zsh它最大的亮点在于提供了强大的默认
自动补全体验以及更多配置选项。由于它与的语法zsh兼容,我建议您尝试使用 它们,直到您觉得其中一个用起来更顺手为止。bash
fish6 shell进行了彻底的变革bash,zsh它
提供了一种不兼容但“简单明了”的语法、一个极其
强大的命令建议系统和一个交互式配置
向导。
如果你刚开始使用 shell,我个人
建议你坚持使用bashor zsh,等你更有信心后再尝试其他
shell,看看它们能带来什么价值。
更改默认 shell
chsh`change shell` (代表change shell )命令允许您更改
默认 shell。
例如:
# Switching to bash by default
$ chsh -s /bin/bash
# Switching to zsh by default
$ chsh -s /bin/zsh
运行此命令后chsh,您打开的任何新终端窗口都将运行您的
新默认 shell。
配置你的 shell
到目前为止,我们看到的每个示例都是
直接在 shell 中定义环境变量、别名和函数。但是,如果我们
关闭该 shell,所有这些更改都会被撤销,
下次打开新 shell 时就必须重新开始。幸运的是,所有
这些设置都可以保存在配置文件中。将
别名、环境变量和函数添加到该文件中,可以确保
每次打开新 shell 时它们都会被导入。
这些文件通常位于您的主目录中,并以.bashrcbash 和.zshrczsh 命名。
$ cat ~/.zshrc
export EDITOR=vim
export PATH=$HOME/bin
alias ls='ls -G'
alias ..='cd ..'
alias ...='cd ../..'
alias filesize='ls --size --human-readable -1'
function mkcd {
local target=$1
mkdir -p $target
cd $target
}
在向 shell 配置文件添加任何内容后,您需要运行`shell install` source ~/.zshrc(或 ` source ~/.bashrcshell install`,具体取决于您使用的 shell)。source内置命令 `shell install` 会读取并执行
当前 shell 环境中指定参数文件中的命令。换句话说,运行 `shell install`source ~/.<file>会使 shell 重新加载其配置。
`--run` rc代表运行命令。实际上,当你source运行
配置文件时,你会运行其中包含的命令。`--run` 的微妙之处
在于,它会在当前sourceshell中执行参数脚本,这意味着任何通过 `--source` 执行的命令都会对 当前运行的 shell产生副作用。
如果你总是记不住某个命令的选项,或者总是
需要输入一组命令,我建议你
在 shell 配置文件中定义别名和函数。它们能让
你每天都感觉效率更高,尤其是在别名
和工具能够抽象化复杂命令的情况下。
注:上一章结尾给出了一些别名和函数的实际示例
。您可以随意将它们添加到您的 shell 配置文件中。
配置您的提示符
配置提示符
是 让 shell 尽可能为你服务的一个很好的方法,它
可以为你提供有用的上下文信息,例如时间、上
一个命令是否成功、当前工作目录……虽然它们可以为你提供上下文和信息,但当 你复制粘贴命令及其相关输出时,
这些上下文信息也会传递给任何人。
配置提示符是通过更改环境变量的值来完成的PS1
。
$ export PS1="MY COOL PROMPT $"
MY COOL PROMPT $
我想我们都同意,MY COOL PROMPT目前的提示信息不够详尽
,所以我们来修改一下,让提示符发挥作用。由于和 的提示符
配置略有不同,我们将 分两部分分别讨论这两种情况。bashzsh
配置你的 bash 提示符
环境PS1变量可以通过混合使用
常规字符和特殊字符来定义。常规字符会直接
显示,而反斜杠转义的特殊字符则会在显示
时由 bash 解析并替换为 对应的值。最常用的特殊字符定义如下 。PS1
| 特点 | 意义 |
|---|---|
\h |
主机名直到第一个点为止 |
\t |
当前时间,采用 24 小时制 HH:MM:SS 格式。 |
\u |
当前用户的用户名 |
\w |
当前工作目录($HOME渲染为~) |
\W |
当前工作目录的基本名称($HOME渲染为~) |
\n |
新行 |
每次显示提示时都会对这些特殊字符进行评估,以确保您始终获得最新的上下文。
注意:PROMPTING本手册的这一部分包含了 反斜杠转义的特殊字符bash的完整列表。
示例
$ export PS1='\u@\h \W $'
br@morenika ~ $
$ export PS1='[\t] \u@\h \W $'
[13:33:55] br@morenika ~ $
$ export PS1='[\t \u@\h:\w]\n>>> '
[13:57:55 br@morenika:~/code]
>>>
注意:您可以使用 ezprompt 7等在线工具来尝试不同的
配置,直到找到您喜欢的配置为止。
最终PS1确定的值应该保存并导出到
配置.bashrc文件中。
配置 zsh 提示符
zshbash与提示符配置相比,它提供了更多选项
。两者都PS1可以PROMPT设置环境变量
以达到相同的效果,如果您觉得这种方式PROMPT更明确的话。
zsh 的特殊字符不使用反斜杠转义,而是
以逗号 (,) 开头%,称为提示序列。最常用的提示序列
详见此处。
| 顺序 | 意义 |
|---|---|
%m |
主机名直到第一个点为止 |
%* |
当前时间,采用 24 小时制 HH:MM:SS 格式。 |
%n |
当前用户的用户名 |
%~ |
当前工作目录($HOME渲染为~) |
%1~ |
当前工作目录的基本名称($HOME渲染为~) |
%? |
最后执行的命令的退出状态 |
%% |
A% |
$'\n' |
新行 |
%B (%b) |
开始(停止)粗体字体模式 |
%F (%f) |
如果终端支持,则使用指定的前景色开始(或停止) |
注意:
您可以在 zsh 文档8中找到完整的提示序列列表。
示例
$ export PROMPT='%n@%m %~ $ '
br@morenika ~/code $
$ export PROMPT='[%*] %n@%m %~ $ '
[23:38] br@morenika ~/code $
$ export PROMPT="[%* %n@%m %~]"$'\n'">>> "
[23:41 br@morenika ~/code/izk]
>>>
$ export PROMPT="[%* %n@%m %1~]"$'\n'"%% "
[23:41 br@morenika izk]
%
zsh它更进一步,允许您通过环境变量定义
右侧提示符的内容, 其语法与.RPROMPTPROMPT
例子
$ export PROMPT='%~ $ '; export RPROMPT='%*'
~/code $ 21:04:00
注意:为确保您的更改能够持久保存,PROMPT应将RPROMPT其
导出到您的.zshrc配置文件中。
添加颜色
添加颜色是美化提示符并提供
视觉上下文的好方法。您可以使用颜色来指示您是否
以超级用户权限运行、上一个命令是成功还是
失败,或者只是以不同的方式为提示符的每个部分
(用户名、主机名等)着色,使其更易于
理解。
为你的 bash 提示符添加颜色
Bash 允许您使用 3 位 ANSI 9代码来设置提示符元素的样式,这些
代码定义了与潜在效果关联的区域、前景色
和背景色。
每种效果、背景色或前景色都有一个对应的代码,
如下表所示。这些参数的组合
称为“选择图形渲染”,
它以分号 (;) 分隔的代码列表形式给出。
| 影响 | ANSI 代码 |
|---|---|
| 普通的 | 0 |
| 大胆的 | 1 |
| 头晕的 | 2 |
| 斜体 | 3 |
| 强调 | 4 |
| 划掉 | 9 |
| 背景颜色 | ANSI 代码 |
|---|---|
| 红色的 | 41 |
| 绿色的 | 42 |
| 棕色的 | 43 |
| 蓝色的 | 44 |
| 紫色的 | 45 |
| 青色 | 46 |
| 白色的 | 47 |
| 亮黑色 | 100 |
| 鲜红色 | 101 |
| 亮绿色 | 102 |
| 亮棕色 | 103 |
| 亮蓝色 | 104 |
| 亮紫色 | 105 |
| 亮青色 | 106 |
| 亮白色 | 107 |
| 前景色 | ANSI 代码 |
|---|---|
| 黑色的 | 30 |
| 红色的 | 31 |
| 绿色的 | 32 |
| 棕色的 | 33 |
| 蓝色的 | 34 |
| 紫色的 | 35 |
| 青色 | 36 |
| 白色的 | 37 |
| 亮黑色 | 90 |
| 鲜红色 | 91 |
| 亮绿色 | 92 |
| 亮棕色 | 93 |
| 亮蓝色 | 94 |
| 亮紫色 | 95 |
| 亮青色 | 96 |
| 亮白色 | 97 |
SGR 示例
- 蓝色文字:
34 - 粗体绿色文字:
1;32 - 白色背景上的紫色文字:
35;47 - 醒目的红色文字,亮青色背景:
1;31;106 - 绿色背景上的粗体棕色文字,带有删除线
1;9;33;42
要在 bash 提示符中定义彩色区域,请使用以下
(虽然不太美观)语法:
\e[<SGR>mTEXT\e[m
示例
$ export PS1='[\t] \u@\h \W \e[32m$\e[m '
$ export PS1='\e[31m\u\e[m@\e[32m\h\e[m \e[36m\W\e[m $ '
色彩搭配
注意一下,ANSI 代码只对应一个颜色名称。这是因为终端
需要自行解释并将该颜色名称渲染成 实际的颜色,这意味着相同的提示符配置 在两个不同的终端上可能会呈现不同的颜色。
将 ANSI 颜色名称映射到实际的key="rgb">RGB颜色是通过所谓的 调色板完成
的。
以下是两种不同的配色方案,以及相关的渲染提示,两者都使用了与前面示例中
相同的值 。PS1
如您所见,即使底层提示符 配置完全相同,这两个提示符看起来也与上一个屏幕截图中的提示符截然不同。这意味着,即使使用 16 种颜色 可能
会 让人觉得有限制,但实际上您可以将这些颜色映射到任何您喜欢的颜色。ANSI 颜色系统只是限制了提示符中 最多只能使用 16 种不同的颜色。
注意,我建议您查看mbadolato/iTerm2-Color-Schemes10项目,该项目展示了流行的调色板
,并提供了配置文件,使您可以
在许多终端应用程序中使用它们(而不仅仅是 iTerm2,尽管
它的名称暗示了这一点)。
最多可显示 256 种颜色
随着计算机最终开始配备 256 色显卡,
引入了 8 位 ANSI 代码方案,允许用户在其终端上渲染 256 种
颜色,而不是 16 种。
8 位 ANSI 代码语法中, 0 到 255 之间 的每个值\e[38;5;n对应的颜色 如下表11所示。n

8 位 ANSI 代码允许您渲染超过最初 16 种可用颜色的颜色。
示例
# Using 256-bit ANSI codes
$ TIME="[\e[38;5;33m\t\e[m]" # blue
$ USERNAME="\e[38;5;200m\u\e[m" # pink
$ HOSTNAME="\e[38;5;139m\h\e[m" # purple
$ WORKDIR="\W" # no color
$ DOLLAR="\e[38;5;41m$\e[m" # green
$ export PS1="${TIME} ${USERNAME}@${HOSTNAME} ${PTH} ${DOLLAR} "
注意:并非所有终端都支持 256 色,但大多数现代终端
应该都支持。目前,GNOME Terminal、Konsole、Terminator、XFCE4
Terminal、iTerm2、Terminal (macOS) 和 tmux 都支持 256 色。
与 3 位 ANSI 代码相反,8 位代码对
配色方案的变化不敏感,如下例所示,这两个示例都重复使用了与key="fig:256col-prompt">上一个屏幕截图
相同的配置。PS1
为 zsh 提示符添加颜色
我们在上一节中解释的所有内容仍然适用zsh:您可以完全使用 3 位或 8 位 ANSI 颜色代码。但是,zsh
它也为您提供了一种更简单易读的颜色系统:
- 每种颜色都可以表示为
black、red、green、yellow、blue或,或者0 到 255 之间的数字magenta。cyanwhite %F{color}Text%f:将Text前景色更改为color%K{color}Text%k:将Text背景颜色更改为color%BText%bText:以粗体显示%UText%u:下划线Text
例子
在提示符中显示动态数据
我们可以使提示符显示动态上下文,从而提供更多
信息。为此,我们可以将一个函数作为环境变量的一部分执行。每次 渲染提示符PS1
时,shell 都会调用该函数。
其理念是,在提示中尽可能多地包含信息
,但仅在必要时才使用。
在 bash 中显示动态数据
假设我们想将$提示符的颜色设置为:如果
上一个命令执行成功,则显示为绿色;如果执行失败,则显示为红色。我们可以将这个
逻辑封装到以下colorized_promptbash 函数中,并通过将 `--no-command` 添加 到环境变量中,使其
在每次PS1渲染提示符时都执行。$(colorized_prompt)
语法$(colorized_prompt)表示“调用colorize_prompt函数”,它将被展开为函数的输出(它打印的内容),其中将包含用于为提示符着色的 ASCII 颜色代码。
function colorized_prompt {
if [[ $? ]]; then
printf "\e[32m$\e[m"
else
printf "\e[31m$\e[m"
fi
}
export PS1='[\t] \W $(colorized_prompt) '
`note` $?是一个特殊的 bash 参数,它会展开显示先前执行的命令的退出状态。通常情况下,如果命令执行成功,则退出状态为 0;任何其他退出状态都表示执行错误。
$ pwd
/home/br
$ echo $?
0
$ cmdnotfound
bash: cmdnotfound: command not found
echo $?
127
因此,该语法if [[ $? ]]; then翻译过来就是“如果上一个命令
执行成功,那么……”。
在 zsh 中显示动态数据
动态数据可以通过在渲染时执行函数的方式注入到提示符中,这与在 Bash 中的方式相同。zsh此外,它还提供了
三元条件语句,即
根据条件计算出不同值的表达式,以达到
相同的目的。三元条件语句的语法如下。
%(<condition>.<success value>.<failure value>)
如果条件为真,则表达式的计算结果为
成功值;反之,如果条件为假,则
表达式的计算结果为失败值。
你可以把三元条件语句理解为“如果条件成立,则执行,否则执行”。这
实际上是一种常见的模式,称为三元表达式,你
在许多编程语言中都会遇到。
以下是提供的实用内置条件列表zsh。
| 健康)状况 | 意义 |
|---|---|
n? |
如果前一个命令以退出状态n退出,则为 True。 |
nd |
如果该月的日期等于 n,则为真。 |
nw |
如果星期几等于 n(星期日 = 0),则为真。 |
! |
如果 shell 以超级用户权限(作为root用户)运行,则为真。 |
示例
$ export PROMPT='%F{%(0?.green.red)}$ %f'

如果上一条命令成功,则显示绿色美元符号;如果失败,则显示红色美元符号。
$ export PROMPT='%* %1~ %(!.#.$) '

如果您以普通用户身份运行,则显示美元符号;如果您以超级用户身份运行,则显示井号。
注意:完整的三元条件列表可在 zsh
文档12中找到。
在提示中添加表情符号
现代终端支持非ASCII字符,例如表情符号。与
颜色一样,它们可以非常方便地以
节省空间的方式传递信息。
例如,在写作那本书的过程中,我会
在提示信息中显示总字数,以此激励自己。
不过,只有当我位于
项目根目录时,字数统计才会显示,这符合“只在必要时显示上下文”的原则
。
Shell配置框架
到目前为止,我们已经了解了如何通过添加颜色、
上下文和动态计算的信息来定制提示符。虽然你
当然可以花几个小时进行“完美”的自定义(相信我,我经历
过……),但你也可以走另一条路,利用其他
人的工作成果,使用 shell 配置key="framework">framework。
这些框架为您提供丰富的提示主题、
助手、选项、额外的命令自动完成、插件,并且
由世界各地的开发者社区定期更新。
时至今日,最著名的zsh配置框架仍然是 Oh My
Zsh 13和 Prezto 14。虽然我们不能完全将zshzsh 的成功归功于
它们(Oh My Zsh 大约在 2010 年首次发布,比 zsh 的首次发布晚了 20 年),但它们无疑 在过去几年中
推动了社区的采用15。

比较与 zsh 和 Oh My Zsh 相关的 Google Trends
我们将向您介绍 Oh My Zsh 的基本概念,但之后的
探索、选择以及您喜欢的主题和插件
(甚至完全不使用它们)都将由您自己决定!毕竟,这是您的开发
环境,因此,一切由您做主。
Note bash有一个类似的框架,其灵感来自 Oh My Zsh,名为bash-it. 16我们不会详细介绍它,但
如果您不想使用zsh但仍然想使用
配置框架,我们鼓励您了解一下它。
我的天啊
引用官方网站的话:
Oh My Zsh 是一个令人愉悦的开源社区驱动型框架,用于
管理您的 Zsh 配置。它捆绑了数千个
实用函数、辅助工具、插件、主题,以及一些
让您惊艳的功能……
要安装它,请在 shell 中运行以下命令,该命令将下载
安装脚本,并在您的计算机上运行它。
$ sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
脚本运行完毕后,您应该会看到一条消息,提示Oh My Zsh 已安装,并且 应该通过更改位于以下位置的配置来启用
插件、主题和选项。~/.zshrc
在此之前,让我们检查一下环境变量,看看 Oh My
Zsh 是如何配置自身的。
$ printenv | grep ZSH
ZSH=/home/br/.oh-my-zsh
该ZSH环境变量指向 Oh My Zsh 的安装
目录。该框架还注入了其他几个变量,
用于定义特定的配置值。
$ set | grep ZSH
ZSH=/home/br/.oh-my-zsh
ZSH_ARGZERO=zsh
ZSH_CACHE_DIR=/home/br/.oh-my-zsh/cache
ZSH_COMPDUMP=/home/br/.zcompdump-morenika-5.7.1
ZSH_CUSTOM=/home/br/.oh-my-zsh/custom
ZSH_EVAL_CONTEXT=toplevel
ZSH_NAME=zsh
ZSH_PATCHLEVEL=zsh-5.7.1-0-g8b89d0d
ZSH_SPECTRUM_TEXT='Arma virumque cano Troiae qui primus ab oris'
ZSH_SUBSHELL=1
ZSH_THEME=robbyrussell
ZSH_VERSION=5.7.1
选择一个主题
我们可以看到默认主题是robbyrussell(Robby Russell 17
是 Oh My Zsh 的创建者)。所有可用主题的完整列表以及屏幕截图可
在网上查看18 。
您也可以运行以下命令来获取列表,因为所有
主题都在 中定义$ZSH/themes。
$ ls -1 $ZSH/themes | sed 's/.zsh-theme//'
3den
adben
af-magic
afowler
...
我建议你浏览一下主题维基,或者直接
从之前的命令输出中随机选择一个主题,~/.zshrc
然后修改配置文件中的变量值ZSH_THEME,
再运行source ~/.zshrc命令重新加载。这样你就能获得一个全新的
shell 主题了!
您可以反复尝试,直到找到适合您的主题。如果您
对内置主题都不满意,也可以
浏览外部主题 wiki 19。如果您找到喜欢的外部主题
,请下载其对应的.zsh-theme文件,并将其放置在 `<path>` 目录下$ZSH/themes,然后编辑 `<path>`~/.zshrc并ZSH_THEME
相应地更新 `<path>`。
注意:如果您想使用我们在该章中介绍的一些技巧进一步个性化主题
,我建议您克隆该主题并维护一个
单独的版本,因为您的调整可能会在下次主题
更新时被覆盖。
ZSH_CUSTOM将环境变量导出到$ZSH/custom,然后运行
以下命令。
$ mkdir -p $ZSH/custom/themes
$ cp $ZSH/themes/$ZSH_THEME.zsh-theme $ZSH/custom/themes/$ZSH_THEME-custom.zsh-theme
然后添加ZSH_THEME=<old zsh theme>-custom到你的~/.zshrc。
有用的配置选项
Oh My Zsh 提供了一些可以通过编辑启用或禁用的选项~/.zshrc。我建议您查看这些选项并选择要
启用的功能。以下是一些个人建议。
自动指令纠错
zsh 可以在检测到输入错误的命令时提供命令更正建议。
要启用自动命令更正,请将其添加ENABLE_AUTO_CORRECTION='true'到~/.zshrc.
$ sl
zsh: correct 'sl' to 'ls' [nyae]? y
Android bin Desktop Downloads Firefox_wallpaper.png Pictures
AndroidStudioProjects code Documents Dropbox Music Videos
四个选项分别是:
n(否):运行输入错误的命令y(是):运行建议的命令a(中止):停止并什么也不做e(编辑):请在重新运行命令前对其进行编辑。
注意zsh 的自动纠错功能有时可能过于积极,并非
每个人都喜欢20。如果您反复遇到某个
命令被自动纠错的情况(例如,git status错误地被自动更正为git stats),
您可以通过在命令前加上前缀来定义别名nocorrect。
alias git status='nocorrect git status'
Oh My Zsh 自动更新
为了确保您定期获得新的插件和错误修复,Oh My Zsh 可以
自动定期更新。为此,请
在以下位置设置选项~/.zshrc:
DISABLE_UPDATE_PROMPT=true更新 Oh My Zsh 时未请求确认UPDATE_ZSH_DAYS=30每 30 天更新一次 Oh My Zsh
添加插件
Oh My Zsh 自带超过 250 个插件,每个插件都
为一组特定的
命令定义别名或改进自动补全功能。请参阅 Oh My Zsh wiki 页面21查看
可用插件的完整列表。要启用某个插件,请将其名称添加到plugins列表中~/.zshrc,然后运行source ~/.zshrc。
例子:
- plugins=(git)
+ plugins=(git python)
如果您经常使用插件维基页面中列出的命令,那么您
应该尝试启用相关的插件!不过,我建议
启用以下通用插件。
common-aliases22:常用别名集合,默认情况下未启用,因为它们可能会更改某些用户定义的别名。colored-man-pages:给man页面着色
extract定义一个extract别名,该别名可以提取任何类型的压缩文件(.zip、.tar.gz、.bzip 等)23
以下插件并非默认提供,但我发现它们非常
有用,因此建议您安装并试用一下。
zsh-autosuggestions24:模拟fish自动建议功能,在您输入命令时提供建议,无需使用Ctrl`-`R键查看 shell 历史记录。您可以按回车键接受任何建议,→也可以继续输入忽略。
zsh-syntax-highlighting25:在 zsh 命令行中提供语法高亮显示。它还会将您输入的命令名称以绿色显示(如果找到),以红色显示(如果不存在)。
卸载 Oh My Zsh
如果您觉得 Oh My Zsh 不适合您,可以通过
运行uninstall_oh_my_zsh相应函数将其卸载。您的先前配置
将被恢复。
概括
我坚信,学习如何配置和个性化自己
的 shell 是成为一名开发者的重要组成部分。我甚至
认为这是一种仪式。就我个人而言,它帮助我克服了
终端近乎神秘的印象,让我能够真正掌控它。
配置 shell 可能永远无法真正完成。你是否
经常重复执行冗长的命令?那就把它设为别名。如果
别名不够用,或者命令需要参数,那就改写成 shell
函数。你是否经常不知道
自己当前运行在哪个分支、项目或配置文件上?那就把它添加到提示符里。如果
提示符看起来有点拥挤,你可以尝试
使用颜色和表情符号来简化它。
自己制作工具并定制 shell 是一种投资,但这
也是软件开发人员的必备技能,它
能让你更快、更高效地完成更多工作,并让你在 shell 中感觉更加得心应手
。而且,这本身也很有趣!
更进一步
4.1:查看终端的首选项,尝试更改
配色方案,或将 ANSI 颜色重新映射到不同的 RGB 颜色。
4.2:尝试不同的字体,例如Source Code Pro、Fira Code Pro或Inconsolata,然后选择你 最喜欢的Jetbrains Mono字体。
4.3:探索您的终端偏好设置,并尝试
不同的设置。
4.4
:尝试更改 提示信息中不同部分的颜色
《面向有志成为软件开发者的必备工具与实践》是由巴尔塔扎·鲁贝罗尔和艾蒂安·布罗杜(他们曾是室友、朋友和同事)自费出版的一本书,旨在赋能新一代开发者。我们目前正在努力创作中!
本书将帮助你搭建高效的开发环境,并熟悉各种工具和实践方法。这些工具和方法,连同你选择的编程语言,将极大地促进你作为软件开发人员的成长。本书涵盖的主题包括:掌握终端操作、配置和高效使用 shell、代码版本控制基础知识git、SQL 基础知识、工具(例如Makesrcjq和正则表达式)、网络基础知识以及软件工程和协作最佳实践。
如果您对本项目感兴趣,欢迎加入邮件列表!
-
https://www.theverge.com/2019/6/4/18651872/apple-macos-catalina-zsh-bash-shell-replacement-features ↩
-
http://zsh.sourceforge.net/Doc/Release/Prompt-Expansion.html ↩
-
http://zsh.sourceforge.net/Doc/Release/Prompt-Expansion.html#Conditional-Substrings-in-Prompts ↩
-
来源:
https://trends.google.com/trends/explore? date=all&q=oh%20my%20zsh,%2Fm% 2F0nrgk ↩ -
https://github.com/ohmyzsh/ohmyzsh/wiki/Plugins#common-aliases ↩
-
https://github.com/zsh-users/zsh-autosuggestions/blob/master/INSTALL.md ↩
-
https://github.com/zsh-users/zsh-syntax-highlighting/blob/master/INSTALL.md ↩


















