介绍
fish shell(the friendly interactive shell) 是一个开源的终端命令行工具, 它具有许多功能, 如 自动补全 / 语法高亮 / 命令历史记录 等
为什么使用 fish shell
- 开箱即用的 语法高亮 ✨
- 开箱即用的 输入时建议 / 基于历史记录补全 🔥
- 丰富的 插件 🔌 / 主题 🎨
- 简洁友好的 语法 🌿
兼容性
WARNING
fish shell与macOS自带的zsh最大的不同就是,fish shell不完全兼容bashPOSIX shell, 这会导致在fish中执行一些shell脚本时会报错
安装
MacOS
brew install fishLinux
sudo apt-add-repository ppa:fish-shell/release-3sudo apt updatesudo apt install fishwindows
在 windows 上, fish shell 可以在 Windows Subsystem for Linux 上安装, 其他终端环境的兼容性不详, 更多信息可以参考 windows - fish shell
设置为 默认 shell
以 macOS 为例:
- 查看 fish 路径
wihch fish/opt/homebrew/bin/fish- 尝试使用 chsh 命令设置 fish 为默认 shell
chsh -s /opt/homebrew/bin/fish- 退出终端并打开新终端测试
exit # 退出当前终端打开新终端:
# 如果未进入 fish shell, 则需要在 /etc/shells 文件末尾增加 fish shell 的路径, 然后再次进入新终端测试echo "/opt/homebrew/bin/fish" | sudo tee -a /etc/shells > /dev/nullWARNING至此
fish shell已经安装并设置为默认 shell, 但在某些Linux系统上, 可能会遇到各种报错, 若无法解决, 也可以在每次进入终端后执行fish进入fish shell
配置
fish shell 的配置文件在 ~/.config/fish/config.fish
配置文件
在 fish shell 的配置文件中一般会设置一些 环境变量 / function / fish 配置 等, 以下是一些示例:
环境变量
将 ~/.cargo/bin 加入系统环境变量 PATH 中:
# rustset -Ux CARGO_HOME $HOME/.cargoset -Ux PATH $CARGO_HOME/bin $PATHfunction
增加用于设置代理的 proxy function:
function proxy set -Ux all_proxy http://127.0.0.1:7890 set -Ux http_proxy http://127.0.0.1:7890 set -Ux https_proxy http://127.0.0.1:7890 echo all_proxy=$all_proxy echo http_proxy=$http_proxy echo https_proxy=$https_proxyend
function noproxy set -e all_proxy set -e http_proxy set -e https_proxyend设置成功后可直接执行 proxy / noproxy 来启用和关闭代理
proxy # 开启代理noproxy # 关闭代理fish 配置
fish shell 也提供了一些配置项, 我这里只设置了 vi key bindings:
~/.config/fish/config.fish:
fish_vi_key_bindingssource ~/.config/fish/config.fish此时 在终端命令行中就可以使用 vim 的常用操作了, 对于 vim 党非常友好, 例如:
-
模式:
Insert ModeCommand ModeVisual Mode
-
光标移动:
hjkl/0/$/w/b/e/... -
编辑:
dd/D/u/C-r/... -
其他:
/搜索历史记录
fish_config
fish_config 是一个图形化配置工具, 可以通过它来配置 fish shell 的 colors / prompt / functions / …
fish_config # 执行后会打开一个网页
TIP在选择好 colors / prompt 后, 需要点击
Set Theme/Set Prompt才会生效, 已有的终端也需要source ~/.config/fish/config.fish才会生效
oh-my-fish
oh-my-fish 是一个开源的 fish shell 的插件管理器, 类似于 zsh 的 oh-my-zsh, 可以通过它来安装一些常用的 插件 / 主题
安装主题
在开源社区有非常多有意思的主题, 查看所有主题: Themes
例如安装 bobthefish theme
omf install bobthefish示例:

安装字体
TIP由于 bobthefish theme 使用了一些特殊符号, 我们电脑中的默认字体中并没有这些符号, 所以需要安装 patched-fonts 来支持这些特殊符号, 详见 patched-fonts
这里推荐从 ryanoasis/nerd-fonts 找到自己喜欢的字体, 并在 releases 中下载对应的字体文件并在系统上安装, 字体文件比较多, 并不需要都安装, 选择一个系列的全选右键打开安装即可
安装完字体后, 还需要在自己的终端软件中设置字体, 例如在 iTerm2 中:
- 点击
iTerm2 > Settings > Profiles > Text - 进入
Text > Font, 选择Use a different font for non-ASCII text并选择Non-ASCII Font字体, 或直接在Font中选择安装的字体

TIP如果启用了
Hotkey Window, 需要同步设置Default/Hotkey Window
获取帮助
fish shell 提供了一个帮助文档, 执行 help 命令即可打开一个帮助文档网页
help