---
url: https://eoht.net/vps/settings/oh-my-zsh.md
description: >-
  区分 zsh、Oh My Zsh 与第三方插件，介绍 macOS 和 Debian/Ubuntu 安装、默认 Shell 切换、主题设置，以及
  autojump、自动建议、语法高亮和补全的正确加载方式。
---

# Oh My Zsh 安装与配置：主题、插件和补全加载顺序 {#install-and-configure-oh-my-zsh}

zsh 是 Shell，Oh My Zsh 是管理 zsh 配置的框架，插件提供额外功能。`brew install zsh` 只安装 Shell，不会同时安装 Oh My Zsh。下面的插件按需选择，同一个插件不要同时通过 Homebrew 和 Git 加载两遍。

先检查已有环境：

```sh
zsh --version
command -v zsh
```

macOS 通常已有 `/bin/zsh`；如需 Homebrew 版本，可运行 `brew install zsh`。Debian/Ubuntu 可安装：

```sh
sudo apt update
sudo apt install zsh
```

先用 `zsh` 打开一个会话体验。需要更改当前用户的默认 Shell 时，核对 `command -v zsh` 返回的完整路径已列在 `/etc/shells`，再执行 `chsh -s /实际/zsh/路径`，重新登录生效。不要用 `sudo chsh` 意外修改 root 的登录 Shell。

## 安装 Git 与下载工具 {#install-git}

已有这些工具时无需重复安装：

::: code-group

```sh [macOS Homebrew]
brew install git curl
```

```sh [Debian/Ubuntu]
sudo apt install git curl
```

:::

## Oh My Zsh 安装与主题配置 {#configure-oh-my-zsh}

### 安装框架 {#install-oh-my-zsh}

先备份现有 `~/.zshrc`；已经安装 Oh My Zsh 的用户可以直接进入配置步骤。以下将官方脚本保存到当前目录，检查后再执行：

```sh
if [ -f "$HOME/.zshrc" ]; then
  cp "$HOME/.zshrc" "$HOME/.zshrc.backup.$(date +%Y%m%d%H%M%S)"
fi
curl -fL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh -o omz-install.sh
less omz-install.sh
```

确认下载完整并了解脚本会修改哪些配置后执行：

```sh
sh omz-install.sh
```

按提示处理默认 Shell 与已有配置。新开 zsh 终端后检查 `~/.oh-my-zsh` 和 `~/.zshrc`，不要覆盖备份中的自定义环境变量。[Oh My Zsh 官方安装说明](https://github.com/ohmyzsh/ohmyzsh#basic-installation)

### 配置主题 {#configure-zsh-theme}

在编辑器中打开 `~/.zshrc`，修改已有的 `ZSH_THEME`，例如：

```zsh
ZSH_THEME="awesomepanda"
```

配置应位于 `source "$ZSH/oh-my-zsh.sh"` 之前；保留模板中的这条加载语句一次即可。保存后新开终端检查主题，不把配置内容逐行当作安装命令执行。

### 随机主题 {#enable-random-theme}

如需每次启动时随机选择主题，将上面的值改为：

```zsh
ZSH_THEME="random"
```

## 插件安装与加载 {#recommended-oh-my-zsh-plugins}

`plugins=(...)` 是 `~/.zshrc` 中的一个数组，应在同一处合并已有插件，而不是为每个插件新增一个数组覆盖前面的设置。先安装插件文件，再启用插件名称。

### autojump {#install-autojump}

::: code-group

```sh [macOS Homebrew]
brew install autojump
```

```sh [Debian/Ubuntu]
sudo apt install autojump
```

:::

使用 Oh My Zsh 时，把内置的 `autojump` 插件加到已有数组中，例如 `plugins=(git autojump)`，并保留后面的 Oh My Zsh 加载语句。新开终端，用 `command -v autojump` 和 `type j` 检查程序与跳转函数都可用；它需要先积累访问过的目录才能匹配。

若发行版安装路径没有被自动识别，按本机 `/usr/share/doc/autojump/README.Debian` 或 `brew info autojump` 给出的初始化路径配置。只克隆 autojump 仓库并不等于已经安装其程序。[autojump 官方说明](https://github.com/wting/autojump#installation)

### zsh-autosuggestions {#install-zsh-autosuggestions}

以下两种方式任选一种。

使用 Oh My Zsh 插件目录：

```sh
git clone https://github.com/zsh-users/zsh-autosuggestions.git "${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/zsh-autosuggestions"
```

然后在已有 `plugins=(...)` 中加入 `zsh-autosuggestions`。目标目录已经存在时不要重复克隆，应先检查已有安装。

使用 Homebrew：

```sh
brew install zsh-autosuggestions
```

将下面一行加在 `~/.zshrc` 的 Oh My Zsh 加载语句之后；这种方式不再把插件名加入 `plugins`：

```zsh
source "$(brew --prefix)/share/zsh-autosuggestions/zsh-autosuggestions.zsh"
```

新开终端，输入历史命令的前几个字符检查灰色建议是否出现。[插件安装说明](https://github.com/zsh-users/zsh-autosuggestions/blob/master/INSTALL.md)

### zsh-syntax-highlighting {#install-zsh-syntax-highlighting}

使用 Oh My Zsh 插件目录：

```sh
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git "${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting"
```

将 `zsh-syntax-highlighting` 放在已有插件数组的最后。若还在 Oh My Zsh 之后手动加载其他会注册编辑控件的插件，则改用手动 `source`，让语法高亮最后加载，不要重复启用。

Homebrew 的替代方式是先运行 `brew install zsh-syntax-highlighting`，然后将以下配置放在 `~/.zshrc` 末尾：

```zsh
source "$(brew --prefix)/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh"
```

新开终端输入命令，检查有效命令和未知命令的显示差异；无需真的执行未知命令。[加载顺序说明](https://github.com/zsh-users/zsh-syntax-highlighting/blob/master/INSTALL.md)

### zsh-completions {#install-zsh-completions}

它扩充补全定义。按上游当前建议，**不要把 `zsh-completions` 当作普通插件加入 `plugins`**；将其路径加入 `fpath`，并放在补全初始化和 Oh My Zsh 加载之前。

Git 安装方式：

```sh
git clone https://github.com/zsh-users/zsh-completions.git "${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/zsh-completions"
```

在 `~/.zshrc` 中使用对应路径：

```zsh
fpath=("${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/zsh-completions/src" $fpath)
```

Homebrew 用户可改用 `brew install zsh-completions`，并只添加这一条路径：

```zsh
fpath=("$(brew --prefix)/share/zsh-completions" $fpath)
```

路径配置之后、原有 `source "$ZSH/oh-my-zsh.sh"` 之前，按上游方案初始化补全：

```zsh
autoload -U compinit
compinit
```

新开终端，对已安装程序按 Tab 检查补全。[zsh-completions 安装说明](https://github.com/zsh-users/zsh-completions#oh-my-zsh)

如果出现 `insecure directories`，先运行 `autoload -Uz compaudit` 和 `compaudit` 查看具体目录，再核对目录所有者与可写权限。只修正确认不应被组或其他用户写入的目录，不要盲目修改整棵 Homebrew 目录，也不要通过禁用检查掩盖问题。

## 进阶配置与排错 {#advanced-customization}

下列设置按需放在 Oh My Zsh 加载语句之前：

```zsh
# 粘贴 URL 等文本时出现异常，再尝试关闭 magic functions
DISABLE_MAGIC_FUNCTIONS="true"

# 可选：启用命令拼写纠正
ENABLE_CORRECTION="true"

# 可选：补全等待时显示提示
COMPLETION_WAITING_DOTS="true"
```

保存后先运行 `zsh -n ~/.zshrc` 检查语法，再打开新终端验证；语法通过不代表插件路径和功能都可用。若出现 `plugin ... not found`，检查插件实际目录与安装渠道；若补全异常，先检查 `fpath` 和加载顺序。保留原终端及备份，确认新会话正常后再关闭旧会话。
