994 字
5 分钟
fish shell 配置

介绍#

fish-shell
/
fish-shell
Waiting for api.github.com...
00K
0K
0K
Waiting...

fish shell(the friendly interactive shell) 是一个开源的终端命令行工具, 它具有许多功能, 如 自动补全 / 语法高亮 / 命令历史记录

为什么使用 fish shell#

  • 开箱即用的 语法高亮
  • 开箱即用的 输入时建议 / 基于历史记录补全 🔥
  • 丰富的 插件 🔌 / 主题 🎨
  • 简洁友好的 语法 🌿

兼容性#

WARNING

fish shellmacOS 自带的 zsh 最大的不同就是, fish shell 不完全兼容 bash POSIX shell, 这会导致在 fish 中执行一些 shell 脚本时会报错

安装#

MacOS#

brew install fish

Linux#

sudo apt-add-repository ppa:fish-shell/release-3
sudo apt update
sudo apt install fish

windows#

在 windows 上, fish shell 可以在 Windows Subsystem for Linux 上安装, 其他终端环境的兼容性不详, 更多信息可以参考 windows - fish shell

设置为 默认 shell#

macOS 为例:

  1. 查看 fish 路径
wihch fish
/opt/homebrew/bin/fish
  1. 尝试使用 chsh 命令设置 fish 为默认 shell
chsh -s /opt/homebrew/bin/fish
  1. 退出终端并打开新终端测试
exit # 退出当前终端

打开新终端:

# 如果未进入 fish shell, 则需要在 /etc/shells 文件末尾增加 fish shell 的路径, 然后再次进入新终端测试
echo "/opt/homebrew/bin/fish" | sudo tee -a /etc/shells > /dev/null
WARNING

至此 fish shell 已经安装并设置为默认 shell, 但在某些 Linux 系统上, 可能会遇到各种报错, 若无法解决, 也可以在每次进入终端后执行 fish 进入 fish shell

配置#

fish shell 的配置文件在 ~/.config/fish/config.fish

配置文件#

fish shell 的配置文件中一般会设置一些 环境变量 / function / fish 配置 等, 以下是一些示例:

环境变量#

~/.cargo/bin 加入系统环境变量 PATH 中:

# rust
set -Ux CARGO_HOME $HOME/.cargo
set -Ux PATH $CARGO_HOME/bin $PATH

function#

增加用于设置代理的 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_proxy
end

function noproxy
    set -e all_proxy
    set -e http_proxy
    set -e https_proxy
end

设置成功后可直接执行 proxy / noproxy 来启用和关闭代理

proxy # 开启代理
noproxy # 关闭代理

fish 配置#

fish shell 也提供了一些配置项, 我这里只设置了 vi key bindings:

~/.config/fish/config.fish:

fish_vi_key_bindings
source ~/.config/fish/config.fish

此时 在终端命令行中就可以使用 vim 的常用操作了, 对于 vim 党非常友好, 例如:

  • 模式:

    • Insert Mode
    • Command Mode
    • Visual Mode
  • 光标移动: hjkl / 0 / $ / w / b / e / ...

  • 编辑: dd / D / u / C-r / ...

  • 其他: / 搜索历史记录

fish_config#

fish_config 是一个图形化配置工具, 可以通过它来配置 fish shellcolors / prompt / functions / …

fish_config # 执行后会打开一个网页

TIP

在选择好 colors / prompt 后, 需要点击 Set Theme / Set Prompt 才会生效, 已有的终端也需要 source ~/.config/fish/config.fish 才会生效

oh-my-fish#

oh-my-fish
/
oh-my-fish
Waiting for api.github.com...
00K
0K
0K
Waiting...

oh-my-fish 是一个开源的 fish shell 的插件管理器, 类似于 zshoh-my-zsh, 可以通过它来安装一些常用的 插件 / 主题

安装主题#

在开源社区有非常多有意思的主题, 查看所有主题: Themes

例如安装 bobthefish theme

omf install bobthefish

示例:

安装字体#

TIP

由于 bobthefish theme 使用了一些特殊符号, 我们电脑中的默认字体中并没有这些符号, 所以需要安装 patched-fonts 来支持这些特殊符号, 详见 patched-fonts

这里推荐从 ryanoasis/nerd-fonts 找到自己喜欢的字体, 并在 releases 中下载对应的字体文件并在系统上安装, 字体文件比较多, 并不需要都安装, 选择一个系列的全选右键打开安装即可

安装完字体后, 还需要在自己的终端软件中设置字体, 例如在 iTerm2 中:

  1. 点击 iTerm2 > Settings > Profiles > Text
  2. 进入 Text > Font, 选择 Use a different font for non-ASCII text 并选择 Non-ASCII Font 字体, 或直接在 Font 中选择安装的字体

TIP

如果启用了 Hotkey Window, 需要同步设置 Default / Hotkey Window

获取帮助#

fish shell 提供了一个帮助文档, 执行 help 命令即可打开一个帮助文档网页

help

参考#

fish shell 配置
http://blog.xiaban.run/posts/2025/fish-shell/
作者
Ryan
发布于
2025-02-19
许可协议
CC BY-NC-SA 4.0