跳转至

从zsh飞到fish: 高效终端配置

原本笔者是坚定的zsh党, 但发现在6202年, zsh早已是“历史的尘埃”了

最直接的原因是:

之前zsh乱七八糟的配置, 导致了 vscode copilot Agent 不能"看见" CLI. [一个非常精彩的错误. 后面有时间会复盘整理一下, 单开一篇文章]

笔者试图花了5-6h进行修复, 最终只有一个暴力方式, 非常非常不美观.

由于“锅”完全来自zsh, 笔者索性直接全盘抛弃, 全面转向fish.

一方面是跟上时代潮流, 另一方面是自动解决了上述棘手问题!


本文聚焦:

  1. 如何在 MacOS (Apple Silicon) 安装 fish
  2. fish 的基础配置
  3. fish 的基础指令用法

fish 安装

Bash
1
2
3
4
5
6
7
8
9
# 安装 Fish Shell
brew install fish

# 将 Fish 设置为默认 Shell
echo "$(which fish)" | sudo tee -a /etc/shells

# 更改你当前用户的默认 Shell
# chsh: change shell
chsh -s "$(which fish)"

激活和验证:

完全关闭并重新启动你的终端, 运行 echo $SHELL, 得到 /opt/homebrew/bin/fish.

刷新fish配置:

Bash
1
2
# 配置文件: ~/.config/fish/config.fish
source ~/.config/fish/config.fish

fish 基础配置

(1) 快速配置样式

Bash
1
fish_config

这会在浏览器中打开一个配置页面, 我们可以在那里轻松选择主题、更改Prompt样式、查看函数

alt text

自定义好, 在 CLI 中输入 ctrl+c 关闭, 然后就行了. 立马生效!

(2) 让fish认识brew

我们要将 Homebrew 永久添加到配置文件, 这样每当开启一个终端窗口(fish), 就会自动认识brew了

注意, 要把 eval "$(/opt/homebrew/bin/brew shellenv)" 加在配置文件的最开头!

Bash
1
2
3
4
5
eval "$(/opt/homebrew/bin/brew shellenv)"

if status is-interactive
    # Commands to run in interactive sessions can go here
end
  1. 为什么要这么做?
    • 因为当我们使用 brew install ... 之后, 这些下载好的软件都在Homebrew目录(/opt/homebrew)
    • 但是fish并不知道它们在这里!
    • 因此我们要在每次fish启动后, 告诉他, “homebrew目录在这里, 下载好的软件从这里调用”
  2. 验证: brew --version. 应该得看见 brew 的版本号才对.
  3. 刷新: source ~/.config/fish/config.fish

(3) 推荐插件 zoxide|bat|gping

这是我的“懒人版” config.fish, 基于alias创建了一些“别名”用来简化:

Bash
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
eval "$(/opt/homebrew/bin/brew shellenv)"

if status is-interactive
    # Commands to run in interactive sessions can go here
end

zoxide init fish | source

alias cd "z"
alias cls "clear"
alias fishconfig "vim ~/.config/fish/config.fish"
alias rt "source ~/.config/fish/config.fish"

alias cat "bat"

fish 常用指令

fish和传统bash的语法、使用命令有很多差异, 因此要注意:

Bash
1
2
3
4
# 刷新fish配置
source ~/.config/fish/config.fish
# 激活.venv虚拟环境
source .venv/bin/activate.fish

fish相较于传统shell, 有很多显著优点:

  1. 语法高亮: 可以在 fish_config 自定义
  2. 推荐命令并补全
    • tab: 推荐命令
    • 方向键右键: 整条命令补全
  3. 基于 Web 的配置, 自动保存: fish_config
  4. 自动识别切换目录: 内置用 zoxide 代替 cd
  5. 交互式历史搜索:
    • ctrl+r 打开
    • Esc 退出
    • alt text

oh-my-fish 安装配置

oh-my-fish, aka: omf

注意: omf可能会覆盖或修改我们现有的 ~/.config/fish/config.fish 文件

好在笔者刚刚起步, 也没配置啥玩意, 因此就上omf吧!

(1) 安装 OMF:

Bash
1
curl https://raw.githubusercontent.com/oh-my-fish/oh-my-fish/master/bin/install | fish

安装程序会自动运行

(2) 选择炫酷的"主题" 🤩:

omf theme docs

看看自己喜欢哪一款, 等会安装

(3) 常用操作:

  • omf list: 查看omf已安装的插件和主题
  • omf theme: 查看已安装主题

主题有关:

Bash
1
2
3
4
omf install [主题名]  #安装主题
omf theme [主题名]  #更换主题
omf search [主题名]  #搜索主题
omf search -t [主题名]  #关键词搜索主题

插件有关:

Bash
1
2
3
omf install [插件名]  #安装
omf search [插件名]  #搜索
omf search -p [插件名]  #关键词搜索主题