什么是 fish?
fish 是一个聪明且易用的命令行 shell。它会在你输入时根据历史记录和补全建议命令的其余部分,实时高亮语法,从已安装的手册页生成 Tab 补全,并摒弃了其他 shell 继承下来的晦涩引号规则。这一切开箱即用——无需任何配置,fish 就已经很好用。
⚡ fish 的主要特性
💡 自动建议
输入时,fish 会根据历史记录和补全建议命令的其余部分。按 → 即可采纳。
🎨 语法高亮
命令在书写时即着色,因此拼写错误或未闭合的引号在按下回车前就一目了然。
⌨️ 从手册页生成补全
fish 解析已安装的手册页来生成补全,即使冷门工具也能补全其选项。
🧠 合理的脚本语言
没有分词带来的意外,没有 [[ ]] 与 [ ] 之分,并且有真正的列表。脚本读起来就是它运行的样子。
🔍 可搜索的历史
输入前缀后按 ↑,只在匹配的命令中浏览,并内置子串搜索。
🛠️ 在浏览器中配置
fish_config 会打开一个界面来设置提示符、配色、函数和按键绑定——无需翻找配置文件。
apt upgrade 即可保持最新。
📦 从 deb.griffo.io 安装
步骤 1:添加仓库
sudo install -d -m 0755 /etc/apt/keyrings
curl -fsSL https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | sudo gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg
echo "deb [signed-by=/etc/apt/keyrings/deb.griffo.io.gpg] https://deb.griffo.io/apt $(lsb_release -sc 2>/dev/null) main" | sudo tee /etc/apt/sources.list.d/deb.griffo.io.list > /dev/null
sudo apt updateinstall -d -m 0755 /etc/apt/keyrings
curl -fsSL https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg
echo "deb [signed-by=/etc/apt/keyrings/deb.griffo.io.gpg] https://deb.griffo.io/apt $(lsb_release -sc 2>/dev/null) main" | tee /etc/apt/sources.list.d/deb.griffo.io.list > /dev/null
apt update步骤 2:安装 fish
# 安装最新版 fish
sudo apt install fish
# 验证安装
fish --version# 安装最新版 fish
apt install fish
# 验证安装
fish --version步骤 3:把 fish 设为你的 shell
# 将 fish 设为登录 shell —— 软件包已把它注册到 /etc/shells
chsh -s /usr/bin/fish
# 或仅在本次会话中启动它
exec fish
# 调整提示符、配色和按键绑定
fish_config🎯 基本使用示例
日常交互使用:
# 采纳灰色的自动建议
→ # 或 Ctrl-F
# 在历史中搜索所有以 git 开头的命令
git↑
# 不输入 cd 也能进入目录
/etc/apt
# 打开基于浏览器的配置界面
fish_config没有陷阱的脚本编写:
# 列表就是真正的列表——不会分词
set files *.txt; echo (count $files) 个文件
# 命令替换不需要反引号
echo "今天是 "(date +%A)
# 条件语句读起来很自然
if test -f /etc/os-release; echo 已找到; end
# 遍历列表
for f in *.md; echo 正在处理 $f; end打造你自己的 shell:
# 定义函数并保存以便下次使用
function ll; ls -lh $argv; end; funcsave ll
# 缩写会在输入时展开,这一点与别名不同
abbr -a gco git checkout
# 永久加入 PATH,无需编辑配置文件
fish_add_path ~/.local/bin
# 设置所有 fish 会话共享的通用变量
set -U EDITOR nvim🔧 良好搭配
在现代终端工具链中,fish 是一等公民:
- starship: 跨 shell 提示符,原生支持 fish
- zoxide:
zoxide init fish,按使用频率跳转目录 - fzf: 自带用于历史与文件搜索的 fish 按键绑定
- atuin: 用可搜索、可同步的数据库替换 fish 的历史记录
- Oh My Posh: 另一款带 fish 初始化脚本的提示符引擎
🚀 为什么选择 deb.griffo.io?
- 官方 Ubuntu: 有提供,但冻结在发布时的版本
- 手动安装: 需要 Rust 工具链和 CMake,或手动管理二进制文件
- deb.griffo.io: 最新版本,自动更新
- ✅ 最新特性: 最新的交互改进与性能优化
- ✅ 无需手动设置: 预构建二进制文件,无需 cargo 编译
- ✅ 自动更新: 上游发布后数小时内更新软件包
- ✅ 完整软件包:
fish、fish_indent、fish_key_reader以及手册页 - ✅ 无依赖: 静态链接的 musl 构建;函数与补全均已内嵌,无需安装 fish-common
- ✅ 多发行版: 支持 Ubuntu 22.04、24.04、25.10 和 26.04
- ✅ 易于维护: 使用标准 apt 命令更新
📦 软件包构建仓库
Ubuntu 软件包在此 GitHub 仓库中自动构建和维护:
- 🐟 fish-shell-debian - 最新发布构建
🔗 相关软件包
deb.griffo.io 还提供:
- Starship - 原生支持 fish 的跨 shell 提示符
- zoxide - 更聪明的 cd,带 fish 初始化脚本
- fzf - 带 fish 按键绑定的模糊查找器
- Atuin - 真正可以搜索的 shell 历史