当我卸载了 oh-my-zsh 之后

Published: by

  • Categories:

当我卸载了 oh-my-zsh 之后

事件起因

事情的起因是这样的,很久很久以前,我开始使用 zsh 的时候,根据「大部分」人推荐的方案,使用 oh-my-zsh 来对我的终端模拟器进行个性化的配置和设置。但是随着时间的推移,久而久之我就发现一个比较大的问题——自从安装使用了 oh-my-zsh 之后,我的 iTerm 启动速度肉眼可见的变慢了,而且有时候还无法正常加载配置。

根据某位同学所言:「卸载了 oh-my-zsh 之后,zsh 的速度快了许多。」

于是,我决定卸载 oh-my-zsh 了。

当我卸载了 oh-my-zsh 之后,zsh 启动变快了不少。

oh-my-zsh 卸载方法

在终端输入下面的命令,即可卸载 oh-my-zsh。但是需要注意的是,你很可能接下来不得不自己配置 zsh。

uninstall_oh_my_zsh

自行配置 zsh

前期准备

home 目录里找到一个 .zshrc 的文件,使用你喜欢的文本编辑器打开它。如果没有,创建一个。

使用下面的命令可以在不重新登录的情况下生效修改的配置。

source ~/.zshrc

本文默认您已经安装了 Homebrew 或者 Linuxbrew。如果您不知道这是什么,点击查看

自定义 zsh 的提示符

首先需要保证提示符在启动时加载,在 .zshrc 文件里写入下面内容。

# 加载提示符
autoload -U promptinit

随后,可以根据自己的需要和喜好来自定义提示符。比如我是这样定义的,让提示符的前面显示一个小的 Apple™️ 标志。根据 zsh 可以设置右侧提示符,我将它设置为显示系统当前时间。

# 提示符颜色
autoload -U colors && colors
PROMPT="%{$fg[magenta]%}%n%{$reset_color%}@%{$fg[magenta]%}%m %{$fg[cyan]%}%1~ %{$reset_color%}%# "
RPROMPT="[%{$fg[magenta]%}%*%{$reset_color%}]"

下面提供提示符的一些转义变量。

转义变量 描述
%T 系统时间(时:分)
%* 系统时间(时:分:秒)
%D 系统日期(年-月-日)
%n 你的用户名
%B - %b 从开始到结束使用粗体打印
%U - %u 从开始到结束使用下划线打印
%d 你当前的工作目录
%~ 你当前的工作目录相对于 ~ 的路径,~ 前面带数字可以设定最多显示几层目录(有些版本的 zsh 可能会乱码)
%M 计算机的主机名
%m 计算机的主机名,在第一个句点之前截断
%l 你当前的 tty

然后加点颜色,根据你的习惯搭配,提高辨识度,降低出错率。把配置放在 %{ [...] %} 里面确保光标不移动。

命令 描述
$fg[color] 设置文本的颜色
%F{color} [...] %f 和前面介绍的 $fg 是一样的,但是更简洁。还可以在 F 前面添加数字
$fg_no_bold[color] 设置文本为非粗体同时设定文本颜色
$fg_bold[color] 设置文本为粗体同时设定文本颜色
$reset_color 重置文本颜色(改为默认颜色),不会重置粗体设定,使用 %b 来重置粗体设定,可以使用 %f 来简化配置
%K{color} [...] %k 设置背景颜色,和非粗体文本颜色一样,任何单一数字前缀会设置背景为黑色

可以选择的颜色值,列在下方表格中。

颜色 英文表示 数字表示 颜色 英文表示 数字表示
黑色 black 0 蓝色 blue 4
红色 red 1 紫色 magenta 5
绿色 green 2 青色 cyan 6
黄色 yellow 3 白色 white 7

文件目录的颜色

为了让使用 ls 的命令时显示文件目录的不同类型文件有不同的颜色表示,我开启了 ls 命令的颜色显示,并根据使用习惯把颜色设定为 Linux 的默认配置。

# 文件目录颜色
export CLICOLOR="Yes"
export LSCOLORS="ExGxFxdaCxDaDahbadacec"

LSCOLORS 字串中的字母两个为一组,表示对应文件的颜色和显示方式。一共 22 个字母,定义了 11 种文件类型。文件类型的顺序依次列出如下。

序号 类型说明
1 目录
2 链接
3 socket 文件
4 管道文件
5 可执行文件
6 块设备文件
7 字块设备文件
8 设定了 suid 的可执行文件
9 设定了 guid 的可执行文件
10 拥有 sticky 位的目录,组外用户拥有写权限
11 没有 sticky 位的目录,组外用户拥有写权限

相应地,颜色的配色方案也列表如下,可以自由搭配,两个一组,格式为:前景色背景色,连续写。

小写字母 颜色解释 大写字母 颜色解释
a 黑色 A 黑色粗体
b 红色 B 红色粗体
c 绿色 C 绿色粗体
d 棕色 D 棕色粗体
e 蓝色 E 蓝色粗体
f 洋红色 F 洋红色粗体
g 青色 G 青色粗体
h 浅灰色 H 浅灰色粗体
x 系统默认颜色    

zsh 的自动补全

开启 zsh 自己的命令补全。

# 命令补全
autoload -U compinit

zsh 的代码高亮和自动补全提示以及其他插件

# 实用插件
plugins=(git zsh-syntax-highlighting zsh-autosuggestions)
source /opt/homebrew/Cellar/zsh-syntax-highlighting/0.7.1/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
source /opt/homebrew/Cellar/zsh-autosuggestions/0.7.0/share/zsh-autosuggestions/zsh-autosuggestions.zsh

把插件的名称放在 plugins=(...) 的括号中,注意插件与插件之间使用空格分开。插件可以使用 source <dir> 命令引入,source 后面跟着插件安装的位置目录。

环境变量和路径

这个根据自己的开发需要进行修改和配置,例如 Python 的解释器路径、Java 的环境变量、 Go 的 GOPATH 等等,如果不需要进行修改则可以忽略。这里不详细解释。

# Python 环境变量和路径
export PATH="/opt/homebrew/opt/python@3.10/bin:$PATH"

# Java 路径
export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk-18.0.1.jdk"

# Go 路径
export GOPATH="$HOME/CodingSpace/go"

# Ruby 路径
export PATH="/opt/homebrew/Cellar/ruby/3.1.0/bin:$PATH"

我的 zsh 配置分享

可以拿去用,自行根据需要修改。可能有些字符不能显示。

# 加载提示符
autoload -U promptinit

# 提示符颜色
autoload -U colors && colors
PROMPT="%{$fg[magenta]%}%n%{$reset_color%}@%{$fg[magenta]%}%m %{$fg[cyan]%}%1~ %{$reset_color%}%# "
RPROMPT="[%{$fg[magenta]%}%*%{$reset_color%}]"

# 文件目录颜色
export CLICOLOR="Yes"
export LSCOLORS="ExGxFxdaCxDaDahbadacec"

# 命令补全
autoload -U compinit

# 实用插件
plugins=(git zsh-syntax-highlighting zsh-autosuggestions)
source /opt/homebrew/Cellar/zsh-syntax-highlighting/0.7.1/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
source /opt/homebrew/Cellar/zsh-autosuggestions/0.7.0/share/zsh-autosuggestions/zsh-autosuggestions.zsh

# Java 路径
export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk-18.0.1.jdk"

# Ruby 路径
export PATH="/opt/homebrew/opt/ruby/bin:$PATH"

想法及总结

你不需要花哨的提示符。 ——摘自 Zhihu

zsh 的界面是给我们提供方便的。如果它严重影响到了终端的性能和效率,比如 oh-my-zsh,启动和加载都要几秒甚至更长(在一些性能较差的计算机上),我完全没有理由去使用它,因为它已经背离我做 shell 美化的初衷了。

我为什么要花大力气去自己配置 zsh 之类的设置?完全是为了自己平时用的顺手,如果您平时不使用 Terminal 和 shell,请当我没有说。

除此之外,我发现在「简体中文网络」上搜索 zsh 的配置方案,结果有 99% 都是使用 oh-my-zsh 进行辅助配置。在这一点上,我认为 oh-my-zsh 是非常成功的,但是,根据我的日常使用情况来看,它的效率和性能实在是不敢恭维,显然没有自己写 .zshrc 配置来的高效。

由此,我自己重新配置了 .zshrc 文件,并写下这些文字记录,以供参考。

Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.