侧边栏壁纸
博主头像
MicroMatrix 博主等级

明月别枝惊鹊,清风半夜鸣蝉

  • 累计撰写 135 篇文章
  • 累计创建 41 个标签
  • 累计收到 2 条评论

目 录CONTENT

文章目录

让你的 Mac 终端更炫酷:iTerm2 + Homebrew + Zsh,装起来!

David
2024-01-12 / 0 评论 / 0 点赞 / 44 阅读 / 0 字

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_REMOTEHOMEBREW_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-autosuggestionszsh-syntax-highlightingzsh-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/

0

评论区