本文同步发布于 少数派,欢迎去帮咱点个 Like(逃。
在月初召开的 WWDC 2019 上,Apple 公布了下一代 macOS —— macOS Catalina。除了全新的音乐和电视等 app、支持 iPad 作为外置显示器等显而易见的更新,macOS Catalina 还为专业用户带来了一项重大变化 —— zsh 将取代 bash,成为操作系统的默认 shell。
尽管 Apple 没有对这一改变作出解释,但根据 The Verge 的 猜测,这可能与 GPLv3 协议有关。macOS 目前使用的 bash 3.2 版本基于 GPLv2 协议,但新版 bash 已经转移到了 GPLv3 协议。GPLv3 协议对 Apple 这样的大公司有着更严格的限制,这可能是 Apple 不再将 bash 作为默认 shell 的原因。
而相比 bash 来说,zsh 也拥有许多更强大的功能:更智能的自动补全、命令选项提示、更丰富的主题,等等。在今秋体验到 macOS Catalina 正式版之前,我们可以先将默认 shell 切换到 zsh,熟悉一下新版 shell 的功能。
本文的目标:
Zsh 与 Oh My Zsh
zsh 本体有着强大的功能,但碍于其复杂的配置,对普通用户而言并不太适合。但是,一个开源项目的出现打破了这一局面 —— 它就是本文的主角,Oh My Zsh。借助 Oh My Zsh,你只需要进行极为简单的安装配置,就可以用上 zsh,并享受许多酷炫的功能。下面就让我们正式开始安装过程。
安装 Oh My Zsh
macOS Mojave 已经自带了 zsh,所以我们直接安装 Oh My Zsh。安装过程极为简单,打开终端,执行一行命令即可:
sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
在安装过程中会提示 Do you want to change your default shell to zsh? [Y/n]
(是否将默认 shell 切换到 zsh),按下 Y
并回车即可。随后会提示 Password for xxx
,输入你的用户密码并回车即可。当你看见大大的 Oh my zsh
标志时就表示 Oh My Zsh 已经安装成功了。
基本设置
安装好 Oh My Zsh 后,使用以下命令打开 zsh 的设置文件:
vim ~/.zshrc
在 vim 编辑器下,你可以使用方向键移动光标,按 i
进入编辑模式,编辑好后按 esc
退出编辑模式,随后输入 :wq
并回车即可保存。有关 vim 的更多使用方法你可以参考 这篇教程。另外,Mac 下的 vim 默认是没有显示行号 & 开启语法高亮的,你可以参考以下命令打开行号显示 & 语法高亮:
cp /usr/share/vim/vimrc ~/.vimrc # 复制 vim 配置模版
echo 'syntax on' >> ~/.vimrc # 开启语法高亮
echo 'set nu!' >> ~/.vimrc # 开启行号显示
zsh 的配置文件中提供了详细的注释,你可以根据注释修改相关设置,满足自己的要求。例如,你想关闭 zsh 的自动更新,则定位到 DISABLE_AUTO_UPDATE
一行,根据前面的注释,删除行前的注释符号 #
即可。
保存退出之后,使用以下命令使 zsh 的配置立即生效:
source ~/.zshrc
设置主题
Oh My Zsh 自带了大量主题文件。你可以执行以下命令查看自带的主题:
ls ~/.oh-my-zsh/themes
对于自带主题的样式和呈现效果,你可以前往 Oh My Zsh 官方 Wiki 查看。
在这里,我选择使用 agnoster 作为我的主题。我们需要通过编辑 zsh 配置文件来修改主题:
vim ~/.zshrc
定位到 ZSH_THEME
一行,将双引号中的内容修改为自己选择的主题名即可。
保存退出后,执行以下命令使 zsh 的配置立即生效:
source ~/.zshrc
Update: 我现在使用的主题是 Powerlevel10k,它不仅简洁美观、性能优异,还提供 Instant prompt 等功能以优化你的使用体验,强烈推荐。使用以下命令安装:
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k
随后别忘了在 ~/.zshrc
中将主题修改为 powerlevel10k/powerlevel10k
并使其生效,同时首次启用 powerlevel10k 主题时会弹出设置向导,请根据个人需要进行相关设置。
注意: Instant prompt 功能可能会导致 GPG 无法签名 Git commits,需要修改 ~/.zshrc
,具体请参考我之前写的《macOS 下使用 GPG 签名 Git commits》中「配置 gpg-agent 环境变量」这一部分。
安装 Powerline 字体
主题设置完成后,终端中却出现了乱码的字符:
这是由于我使用的 agnoster 主题中含有特殊字符,需要安装 Powerline 字体支持才能正常显示。打开终端,参考以下命令安装 Powerline 字体:
cd ~/Downloads && git clone https://github.com/powerline/fonts.git # 将 Powerline 字体文件下载到「下载」文件夹中
cd fonts && ./install.sh # 安装所有 Powerline 字体
cd && rm -rf ~/Downloads/fonts # 删除下载的字体文件
随后,我们按 ⌘,
打开终端偏好设置,在描述文件 > 文本中更改字体。
在弹出的窗口中选择一款 Powerline 字体(所有可选项请参考 Powerline 的 GitHub 页面),调整一下字体大小即可。在这里我选择了 DejaVu Sans Mono for Powerline 字体 (逮虾户!),大小设置为 14 磅。
此时回到终端,发现表示文件目录的箭头已经可以正常显示了:
配置终端颜色方案
主题上的配置至此就差不多了,然而 macOS Mojave 默认终端的黑底白字看起来还是有些不舒服。在这里,我们不妨使用 iTerm 2 版本 的 Solarized 配色方案来进一步美化终端。首先,使用以下命令下载 iTerm 2 配色方案:
cd ~/Downloads && git clone https://github.com/mbadolato/iTerm2-Color-Schemes.git # 将配色方案下载到「下载」文件夹中
下载完毕后,我们按 ⌘,
打开终端偏好设置,点击描述文件 > ⚙︎ ⌄ > 导入…。
在弹出的窗口中,定位到 下载 > iTerm2-Color-Schemes > terminal
,双击 Solarized Dark.terminal
导入暗色的 Solarized 配色方案。
随后,我们在描述文件中选中 Solarized Dark,点击「默认」将其设为默认配色方案;别忘了把字体改为 Powerline 字体并调整大小。
其他细节修改
重启一下终端 —— 到这里,我们漂亮的终端就已经基本完成了。不过还有一些细节需要注意:
窗口标题 & 窗口大小
在终端偏好设置 > 描述文件 > Solarized Dark > 窗口下,可以自定义终端窗口的默认标题及大小,你可以根据需要自行修改。
声明终端类型
打开终端偏好设置 > 描述文件 > Solarized Dark > 高级 > 声明终端为:,选择 xterm-256color
以确保终端颜色能够正确显示。
当前账户提示
还有一项让我不爽的地方 —— 文件目录前那个长长的 demo@Stevens-MacBook-Pro
。通过修改主题配置文件,我们就能去掉它。使用以下命令编辑 agnoster 主题的配置文件:
cp ~/.oh-my-zsh/themes/agnoster.zsh-theme ~/.oh-my-zsh/custom/themes/agnoster.zsh-theme # 复制 agnoster 主题配置模版
vim ~/.oh-my-zsh/custom/themes/agnoster.zsh-theme # 编辑配置文件
定位到以下内容:
# Context: user@hostname (who am I and where am I)
prompt_context() {
if [[ "$USER" != "$DEFAULT_USER" || -n "$SSH_CLIENT" ]]; then
prompt_segment black default "%(!.%{%F{yellow}%}.)%n@%m"
fi
}
在 prompt_segment black default "%(!.%{%F{yellow}%}.)%n@%m"
前面加一个注释符号 #
,保存退出,执行 source ~/.zshrc
使配置立即生效即可。
配置插件
Oh My Zsh 支持许多强大的插件,可以实现语法高亮、命令自动补全等功能。你可以执行以下命令查看自带的插件:
ls ~/.oh-my-zsh/plugins/
对于自带插件的功能及使用,你可以前往 Oh My Zsh 官方 Wiki 查看。
要启用某个插件,只需要用 vim ~/.zshrc
编辑 zsh 配置文件,定位到 plugins
一行,在括号中添加需要的插件名称,以空格分隔。保存退出后,别忘了执行 source ~/.zshrc
使配置立即生效。
我使用的插件:
- git
默认启用的插件,提供了各种 git
命令的缩写。其 官方说明 提供了所有缩写的参考。
- z
自带插件,添加到配置文件中即可启用,可以帮助你快速跳转到访问过的文件夹。具体使用方法请自行 Google 或参考 GitHub 文档。
- autoupdate-oh-my-zsh-plugins
可以自动升级 $ZSH_CUSTOM
下的自定义插件。使用以下命令安装:
git clone https://github.com/TamCore/autoupdate-oh-my-zsh-plugins $ZSH_CUSTOM/plugins/autoupdate
下载完成后,别忘了把 autoupdate
添加到配置文件的 plugins
中,并执行 source ~/.zshrc
使配置生效。
之后,在 Oh My Zsh 进行自动更新时,也会同步检查自定义插件的更新。你可以通过修改 ~/.zshrc
中的 UPDATE_ZSH_DAYS
来定义自动检查更新的间隔天数,另外你也可以执行 upgrade_oh_my_zsh_custom
来手动检查自定义插件的更新。
- zsh-syntax-highlighting
输入正确的命令会以绿色高亮显示,输入错误则会显示其他的颜色。使用以下命令安装:
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
下载完成后,别忘了把 zsh-syntax-highlighting
添加到配置文件的 plugins
中,并执行 source ~/.zshrc
使配置生效。
- zsh-autosuggestions
输入命令时,会用浅色字体给出建议的命令,按 → 即可自动补全。使用以下命令安装:
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
下载完成后,别忘了把 zsh-autosuggestions
添加到配置文件的 plugins
中,并执行 source ~/.zshrc
使配置生效。
为了让提示的字体颜色正确显示,我们还需要执行:
echo "ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=24'" >> ~/.zshrc # 设置建议命令的文字颜色
你可以修改 fg=
后的数字来指定建议命令的文字颜色,数字与颜色的对应表请参考 这里。
- zsh-osx-autoproxy
可以自动读取 macOS 的系统代理配置并为命令行设置环境变量。使用以下命令安装:
git clone https://github.com/sukkaw/zsh-osx-autoproxy ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-osx-autoproxy
下载完成后,别忘了把 zsh-osx-autoproxy
添加到配置文件的 plugins
中,并执行 source ~/.zshrc
使配置生效。
小结
至此,你已经完成了 Oh My Zsh 在 macOS 下的基本配置。现在你获得了一个更漂亮、更强大的终端,相信这能让你在终端下进行操作时事半功倍。