macOS 终端环境升级指南:用 Homebrew + Fish 打造高效开发终端
以前在 macOS 上配置终端,很多教程都会推荐 Zsh、Oh My Zsh、Zinit 以及一堆插件。那套方案依然能用,但现在如果你想要一个配置更少、交互更自然、开箱体验更好的 Shell,可以考虑换成 Fish Shell。
这里说的 Fish,指的是官方开源项目 fish-shell/fish-shell,全称是 friendly interactive shell。它是一款独立的命令行 Shell,不是 Zsh 插件,也不是终端模拟器。Fish 官方介绍中明确提到,它面向 macOS、Linux 等系统,内置语法高亮、输入时自动建议和更友好的 Tab 补全,而且这些功能基本不需要额外配置就能使用。
这篇文章会从 Homebrew 开始,一步步完成 macOS 上的 Fish 终端环境搭建。
一、安装 Homebrew:macOS 上的包管理利器
Homebrew 依然是 macOS 上最常用的包管理工具。它可以帮你安装命令行工具、开发依赖、图形界面软件、字体以及各种效率工具。
Homebrew 官方推荐的安装命令是:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
注意,这里建议使用官方给出的 /bin/bash 命令,而不是把它改成 /bin/zsh 或 /bin/fish。Homebrew 文档也说明,安装脚本会把 Homebrew 安装到默认支持路径:Apple Silicon 芯片 Mac 通常是 /opt/homebrew,Intel Mac 通常是 /usr/local。
安装完成后,终端通常会提示你配置环境变量。Apple Silicon 用户一般执行:
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"
Intel Mac 用户一般执行:
echo 'eval "$(/usr/local/bin/brew shellenv)"' >> ~/.zprofile
eval "$(/usr/local/bin/brew shellenv)"
验证 Homebrew 是否安装成功:
brew --version
能看到版本号,就说明 brew 已经可以正常使用。
二、国内网络环境下的安装建议
以前很多教程会推荐第三方一键安装脚本,但现在更建议优先使用 官方安装脚本 + 可信镜像源 的方式。原因很简单:Homebrew 是你后续安装开发工具的基础环境,安装链路越透明越好。
Homebrew 官方文档提供了 Git 远程镜像配置方式。网络访问 GitHub 不稳定时,可以通过 HOMEBREW_BREW_GIT_REMOTE 和 HOMEBREW_CORE_GIT_REMOTE 指定镜像源,再执行官方安装脚本。
示例:
export HOMEBREW_BREW_GIT_REMOTE="你的 Homebrew/brew 镜像地址"
export HOMEBREW_CORE_GIT_REMOTE="你的 homebrew-core 镜像地址"
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
日常维护常用命令:
brew update
brew upgrade
brew cleanup
安装完成后,如果你想清理已经卸载的软件及其依赖,安装下面的插件
brew tap beeftornado/rmtree
brew rmtree <软件名>
brew cleanup
搜索软件:
brew search 软件名
三、安装 Fish Shell:更友好的现代 Shell
Fish 官方 GitHub 仓库给出的 macOS 安装方式之一就是通过 Homebrew 安装:
brew install fish
安装完成后,查看版本:
fish --version
临时进入 Fish:
fish
退出 Fish:
exit
第一次使用时,可以先通过 fish 命令临时体验。确认使用习惯没问题之后,再把 Fish 设置成默认 Shell。
四、把 Fish 设置为默认 Shell
Fish 官方文档推荐的方式是:先把 Fish 的路径加入 /etc/shells,再使用 chsh 修改默认 Shell。
执行:
command -v fish | sudo tee -a /etc/shells
chsh -s "$(command -v fish)"
然后重新打开终端,查看当前默认 Shell:
echo $SHELL
Apple Silicon Mac 上通常会看到:
/opt/homebrew/bin/fish
Intel Mac 上通常会看到:
/usr/local/bin/fish
到这里,Fish 就已经成为你的默认 Shell 了。
五、Fish 的配置文件:不再使用 .zshrc
切换到 Fish 之后,原来的 ~/.zshrc 就不再是主要配置文件了。
Fish 的主配置文件是:
~/.config/fish/config.fish
Fish 官方文档也说明,Fish 会读取 ~/.config/fish/config.fish,同时 ~/.config/fish/conf.d/ 目录下的 .fish 文件也会自动执行。
创建配置文件:
mkdir -p ~/.config/fish
touch ~/.config/fish/config.fish
打开配置文件:
nano ~/.config/fish/config.fish
建议先加入 Homebrew 路径初始化:
# Homebrew
if test -x /opt/homebrew/bin/brew
eval (/opt/homebrew/bin/brew shellenv)
else if test -x /usr/local/bin/brew
eval (/usr/local/bin/brew shellenv)
end
这里要注意,Fish 的命令替换语法是 (...),不是 Bash/Zsh 里的 $(...)。所以在 Fish 配置文件里应该写:
eval (/opt/homebrew/bin/brew shellenv)
而不是:
eval "$(/opt/homebrew/bin/brew shellenv)"
六、Fish 自带的好用功能
Fish 的优势在于:很多 Zsh 需要靠插件实现的功能,Fish 默认就已经内置了。
1. 语法高亮
输入命令时,Fish 会根据命令是否存在、路径是否有效、参数是否合理进行颜色提示。命令写错时,你能更快发现问题。
2. 自动建议
Fish 会根据历史命令给出灰色建议。看到合适的建议后,按右方向键即可补全。
3. 智能 Tab 补全
Fish 的 Tab 补全比传统 Shell 更友好,会显示候选项、命令参数和部分说明。Fish 官方文档也把语法高亮、自动建议、Tab 补全列为核心交互特性。
这也是为什么 Fish 不需要像 Zsh 那样一上来就安装 zsh-autosuggestions、zsh-syntax-highlighting、zsh-completions 这一类基础插件。
七、配置别名和缩写:alias 与 abbr
在 Fish 里,你仍然可以使用 alias:
alias ll="ls -la"
alias gs="git status"
alias gc="git commit"
alias gp="git push"
不过 Fish 里更推荐使用 abbr,也就是 abbreviation。它的特点是:输入短命令后按空格,会自动展开成完整命令。
例如:
abbr -a g git
abbr -a gs git status
abbr -a ga git add
abbr -a gc git commit
abbr -a gp git push
abbr -a gl git log --oneline --graph --decorate
abbr -a ll ls -la
abbr -a c clear
当你输入:
gs
按下空格后,它会自动展开为:
git status
这种方式比传统 alias 更直观,因为你最终看到的是完整命令,长期使用也更容易形成命令记忆。
八、添加 PATH:使用 fish_add_path
在 Bash 或 Zsh 里,我们经常这样添加 PATH:
export PATH="$HOME/bin:$PATH"
在 Fish 里,更推荐使用:
fish_add_path ~/bin
fish_add_path ~/.local/bin
Fish 官方文档也提到,相比手动修改 PATH,fish_add_path 更简单,并且可以避免重复添加路径。
九、使用 fish_config 可视化配置主题
Fish 还提供了一个内置配置工具:
fish_config
执行后,它会启动本地 Web 配置界面,可以查看函数、变量、历史记录,也可以调整提示符和颜色配置。Fish 文档说明,fish_config 不带参数或使用 fish_config browse 时,会打开基于 Web 的配置界面。
也可以直接在终端里查看可用提示符:
fish_config prompt list
fish_config prompt show
查看主题:
fish_config theme list
fish_config theme show
选择主题:
fish_config theme choose "Dracula"
Fish 自带的配置工具非常适合新手,很多时候不用手写太多配置,就能把终端调整到比较舒服的状态。
十、安装 Fisher:Fish 插件管理器
Fish 自带功能已经足够强,但仍然可以通过插件进一步增强,比如 Node.js 版本管理、目录跳转、fzf 集成等。
Fish 常用的插件管理器是 Fisher。Fisher 官方仓库给出的安装命令是:
curl -sL https://raw.githubusercontent.com/jorgebucaran/fisher/main/functions/fisher.fish | source && fisher install jorgebucaran/fisher
安装完成后,可以使用这些命令:
fisher list
fisher update
fisher remove 插件名
安装插件的格式是:
fisher install 作者/插件名
例如:
fisher install jorgebucaran/nvm.fish
Fisher 会把插件记录到 Fish 配置目录下的 fish_plugins 文件中,方便你把配置同步到新电脑或 dotfiles 仓库。
十一、推荐的 Fish 插件
Fish 不需要安装语法高亮、自动建议这类基础插件,因为它已经内置了。下面这些插件更适合用来增强开发体验。
1. nvm.fish:Node.js 版本管理
前端开发者可以安装:
fisher install jorgebucaran/nvm.fish
使用示例:
nvm install latest
nvm use latest
node -v
2. z:快速目录跳转
经常在多个项目目录之间切换,可以安装:
fisher install jethrokuan/z
使用一段时间后,直接输入目录关键字即可快速跳转到常用目录。
3. fzf.fish:模糊搜索增强
先安装 fzf:
brew install fzf
再安装 Fish 插件:
fisher install PatrickF1/fzf.fish
它可以增强历史命令搜索、文件搜索、Git 分支切换等体验。
4. done:长任务完成提醒
执行耗时任务时,比如安装依赖、构建项目、跑测试,可以安装:
fisher install franciscolourenco/done
命令执行完成后,它会给出提醒,适合经常跑长任务的开发者。
十二、使用 Starship 美化命令提示符
Fish 默认提示符已经能用,但想要更漂亮、更现代的效果,可以使用 Starship。
Starship 是一个跨 Shell 的命令提示符工具,支持 Fish、Zsh、Bash、PowerShell 等多种 Shell。它可以显示 Git 分支、语言版本、命令执行状态、耗时等信息。Starship 官方也提供了 Homebrew 安装方式,并支持 Fish 初始化配置。
安装 Starship:
brew install starship
然后编辑 Fish 配置文件:
nano ~/.config/fish/config.fish
在文件末尾加入:
starship init fish | source
Starship 官方还建议安装并启用 Nerd Font,否则一些图标可能无法正常显示。
可以通过 Homebrew 安装字体:
brew install --cask font-jetbrains-mono-nerd-font
然后到 iTerm2、Terminal、Warp、Ghostty 或 VS Code 终端设置里,把字体改成 JetBrainsMono Nerd Font。
十三、推荐的完整 config.fish
下面是一份适合大多数开发者的基础配置:
# --- Homebrew 配置 ---
# Fish 推荐使用 fish_add_path,它会自动处理路径是否存在且不重复添加
fish_add_path /opt/homebrew/bin
fish_add_path /opt/homebrew/sbin
fish_add_path /opt/homebrew/opt/postgresql@17/bin
fish_add_path $HOME/.local/bin
# Homebrew 镜像设置 (使用 set -gx 代替 export)
set -gx HOMEBREW_UPDATE_FROM_GIT 1
set -gx HOMEBREW_BREW_GIT_REMOTE "https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git"
set -gx HOMEBREW_CORE_GIT_REMOTE "https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-core.git"
set -gx HOMEBREW_BOTTLE_DOMAIN "https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles"
# --- 代理设置函数 ---
function proxy_on
set -l port (test -n "$argv[1]"; and echo "$argv[1]"; or echo "7890")
set -gx http_proxy "http://127.0.0.1:$port"
set -gx https_proxy "http://127.0.0.1:$port"
set -gx all_proxy "socks5://127.0.0.1:$port"
echo "代理已开启,端口: $port"
echo "http_proxy: $http_proxy"
echo "https_proxy: $https_proxy"
echo "all_proxy: $all_proxy"
end
function proxy_off
set -e http_proxy
set -e https_proxy
set -e all_proxy
echo "代理已关闭"
end
# --- 环境变量与语言设置 ---
set -gx LANG en_US.UTF-8
set -gx LC_CTYPE UTF-8
# --- Python 管理 (Alias) ---
alias python='uv run python'
alias pip='uv run pip'
# --- nvm-desktop 配置 ---
set -gx NVMD_DIR "$HOME/.nvmd"
fish_add_path "$NVMD_DIR/bin"
# --- 欢迎语优化 (可选) ---
# 禁用 Fish 启动时的默认欢迎文本
set -g fish_greeting ""
# --- goenv 配置 ---
set -gx GOENV_ROOT "$HOME/.goenv"
fish_add_path "$GOENV_ROOT/bin"
# 修正这里:将错误路径改为 /dev/null
if command -v goenv > /dev/null
source (goenv init - | psub)
end
# 核心修正:先确保 shims 在路径中
fish_add_path "$GOENV_ROOT/shims"
# 然后添加 GOPATH/bin
fish_add_path (go env GOPATH)/bin
保存后重新加载配置:
source ~/.config/fish/config.fish
十四、从 Zsh 迁移到 Fish 时要注意什么
Fish 很适合作为交互式 Shell,但它不是 Bash/Zsh 的完全兼容替代品。Fish 官方文档也专门提醒,Fish 和 Bash/Zsh 有一些语法差异,想了解差异时可以查看 Fish for Bash Users 或官方教程。
几个最常见的差异:
1. 命令替换不同
Bash/Zsh:
echo $(pwd)
Fish:
echo (pwd)
2. 环境变量写法不同
Bash/Zsh:
export EDITOR=code
Fish:
set -gx EDITOR code
3. PATH 配置方式不同
Bash/Zsh:
export PATH="$HOME/bin:$PATH"
Fish:
fish_add_path ~/bin
4. 配置文件不同
Zsh:
~/.zshrc
Fish:
~/.config/fish/config.fish
所以迁移时不要直接把 .zshrc 里的内容整段复制到 config.fish。更稳妥的做法是:只迁移必要的 PATH、环境变量、alias,再按 Fish 语法重写。
十五、一键安装顺序整理
新 Mac 可以按下面这个顺序安装:
# 1. 安装 Homebrew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# 2. 安装 Fish
brew install fish
# 3. 设置 Fish 为默认 Shell
command -v fish | sudo tee -a /etc/shells
chsh -s "$(command -v fish)"
# 4. 安装 Starship
brew install starship
# 5. 安装 Nerd Font
brew install --cask font-jetbrains-mono-nerd-font
然后创建 Fish 配置文件:
mkdir -p ~/.config/fish
touch ~/.config/fish/config.fish
写入基础配置:
# Homebrew
if test -x /opt/homebrew/bin/brew
eval (/opt/homebrew/bin/brew shellenv)
else if test -x /usr/local/bin/brew
eval (/usr/local/bin/brew shellenv)
end
# PATH
fish_add_path ~/.local/bin
fish_add_path ~/bin
# Abbr
abbr -a g git
abbr -a gs git status
abbr -a ga git add
abbr -a gc git commit
abbr -a gp git push
abbr -a ll ls -la
# Starship
starship init fish | source
最后重新打开终端即可。
总结:用更少配置,获得更好的终端体验
过去我们用 Zsh 打造开发终端,通常需要安装插件管理器,再配置语法高亮、自动建议、命令补全、主题和提示符。Fish 的思路更直接:把最常用的交互能力内置进 Shell,让你安装后就能获得比较完整的体验。
这套新版方案可以概括为:
Homebrew:安装和管理软件
Fish Shell:提供现代化交互式 Shell 体验
Fisher:管理 Fish 插件
Starship:美化和增强命令提示符
Nerd Font:让终端图标正常显示
对于日常开发来说,Fish 最大的优势不是“能不能配置得很复杂”,而是“不怎么配置也很好用”。语法高亮、自动建议、智能补全这些能力打开终端就能用,配合 Homebrew、Fisher 和 Starship,很快就能搭出一个简洁、高效、现代化的 macOS 开发终端。
参考链接
- Fish Shell GitHub:https://github.com/fish-shell/fish-shell
- Fish 官方文档:https://fishshell.com/docs/current/index.html
- Fish
fish_config文档:https://fishshell.com/docs/current/cmds/fish_config.html - Homebrew 官网:https://brew.sh/
- Homebrew 安装文档:https://docs.brew.sh/Installation
- Fisher GitHub:https://github.com/jorgebucaran/fisher
- Starship 官网:https://starship.rs/
评论区