Fish Shell 完整配置指南
0. 安装 Fish Shell
0.1 Ubuntu/Debian 安装
1. 方法一:使用官方 PPA(推荐,获取最新版本)
sudo apt-add-repository ppa:fish-shell/release-3
sudo apt update
sudo apt install fish
1. 方法二:使用默认仓库(版本可能较旧)
sudo apt update
sudo apt install fish
0.2 其他系统安装
1. macOS (使用 Homebrew)
brew install fish
1. Fedora
sudo dnf install fish
1. Arch Linux
sudo pacman -S fish
1. CentOS/RHEL 8+
sudo dnf install fish
0.3 验证安装
1. 检查版本
fish --version
1. 临时进入 Fish
fish
0.4 设置 Fish 为默认 Shell
添加到可用 Shell 列表
1. 查看 Fish 安装路径
which fish
1. 检查是否已在 shell 列表中
cat /etc/shells
1. 如果没有,添加 Fish 到列表(使用实际路径)
echo /usr/bin/fish | sudo tee -a /etc/shells
更改默认 Shell
1. 方法一:使用 chsh(推荐)
chsh -s $(which fish)
1. 方法二:使用 usermod(需要 root)
sudo usermod -s /usr/bin/fish $USER
注意:更改后需要完全退出并重新登录才能生效。
验证更改
1. 重新登录后检查
echo $SHELL
1. 基础环境设置
1.1 创建配置文件
1. 创建配置目录
mkdir -p ~/.config/fish
1. 创建主配置文件
touch ~/.config/fish/config.fish
1.2 基础配置
在 ~/.config/fish/config.fish 中添加:
1. 设置默认编辑器
set -gx EDITOR vim # 或 nano, code 等
1. 配置PATH(fish_add_path会自动去重)
fish_add_path ~/bin
fish_add_path ~/.local/bin
1. 设置语言环境
set -gx LANG zh_CN.UTF-8
set -gx LC_ALL zh_CN.UTF-8
1. 取消欢迎信息
set -g fish_greeting ""
1. 启用24位真彩色
set -gx fish_term24bit 1
2. Fisher 插件管理器
2.1 安装 Fisher
curl -sL https://raw.githubusercontent.com/jorgebucaran/fisher/main/functions/fisher.fish | source && fisher install jorgebucaran/fisher
2.2 Fisher 常用命令
fisher list # 列出已安装插件
fisher install owner/plugin # 安装插件
fisher update # 更新所有插件
fisher remove owner/plugin # 移除插件
3. 必备插件
3.1 fzf.fish – 模糊搜索增强
1. 首先安装 fzf 二进制文件
1. Ubuntu/Debian
sudo apt install fzf
1. 或使用 git 安装最新版
git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install
1. 然后安装 Fish 插件
fisher install PatrickF1/fzf.fish
配置快捷键(在 config.fish 中添加):
1. Ctrl+R: 搜索历史
1. Ctrl+T: 搜索文件
1. Alt+C: 搜索目录
1. Ctrl+G: 搜索 git log
1. Ctrl+S: 搜索 git status
fzf_configure_bindings --history=\cr --variables=\cv --directory=\cf --git_log=\cg --git_status=\cs
3.2 z – 快速目录跳转
fisher install jethrokuan/z
使用示例:
cd ~/projects/my-project # 首次访问
z proj # 之后可以快速跳转
z -l # 查看记录的目录
z -c proj # 限制在当前目录子目录中搜索
z -r proj # 按访问时间排序
3.3 其他实用插件
1. 自动匹配括号
fisher install laughedelic/pisces
1. Git 缩写支持
fisher install jhillyerd/plugin-git
1. 运行 bash 脚本
fisher install edc/bass
1. 更好的提示符(可选)
fisher install IlanCosman/tide@v6
4. 实用配置
4.1 命令缩写(Abbreviations)
1. 系统命令
abbr -a ll 'ls -lah'
abbr -a la 'ls -A'
abbr -a l 'ls -CF'
1. Git 命令
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 gpl 'git pull'
abbr -a gco 'git checkout'
abbr -a gb 'git branch'
abbr -a gd 'git diff'
abbr -a gl 'git log --oneline --graph'
1. 其他常用
abbr -a .. 'cd ..'
abbr -a ... 'cd ../..'
abbr -a df 'df -h'
abbr -a du 'du -h'
abbr -a cls 'clear'
4.2 实用函数
1. 创建并进入目录
function mkcd -d "创建目录并进入"
mkdir -p $argv && cd $argv
end
1. 备份文件
function backup -d "备份文件"
cp $argv[1] $argv[1].bak.(date +%Y%m%d_%H%M%S)
end
1. 静默启动程序(后台运行)
function s -d "静默启动程序"
command $argv >/dev/null 2>&1 & disown
end
1. 提取压缩文件
function extract -d "解压文件"
if test -f $argv
switch $argv
case '*.tar.bz2'
tar xjf $argv
case '*.tar.gz' '*.tgz'
tar xzf $argv
case '*.tar.xz'
tar xJf $argv
case '*.bz2'
bunzip2 $argv
case '*.gz'
gunzip $argv
case '*.tar'
tar xf $argv
case '*.zip'
unzip $argv
case '*.rar'
unrar x $argv
case '*.7z'
7z x $argv
case '*'
echo "不支持的文件格式"
end
else
echo "文件不存在"
end
end
1. 查看端口占用
function port -d "查看端口占用"
if test (count $argv) -eq 0
echo "用法: port <端口号>"
return 1
end
sudo lsof -i :$argv
end
1. 快速查找进程
function psg -d "grep 进程"
ps aux | grep -v grep | grep -i $argv
end
5. 环境变量管理
5.1 通用环境变量
1. 代理设置函数(根据实际端口修改)
function proxy_on -d "启用代理"
set -gx http_proxy http://127.0.0.1:7890
set -gx https_proxy http://127.0.0.1:7890
set -gx all_proxy socks5://127.0.0.1:7890
set -gx no_proxy localhost,127.0.0.1,::1
echo "代理已开启 (端口: 7890)"
end
function proxy_off -d "关闭代理"
set -e http_proxy
set -e https_proxy
set -e all_proxy
set -e no_proxy
echo "代理已关闭"
end
1. 查看当前代理状态
function proxy_status -d "查看代理状态"
if set -q http_proxy
echo "代理已开启: $http_proxy"
else
echo "代理未开启"
end
end
5.2 开发环境配置
1. Node.js (使用 nvm)
if test -e ~/.nvm
fisher install jorgebucaran/nvm.fish
end
1. Python 虚拟环境自动激活
function __auto_source_venv --on-variable PWD --description "自动激活Python虚拟环境"
if test -e .venv/bin/activate.fish
source .venv/bin/activate.fish
else if test -e venv/bin/activate.fish
source venv/bin/activate.fish
else if test -e env/bin/activate.fish
source env/bin/activate.fish
end
end
1. Go 环境
if test -d $HOME/go
set -gx GOPATH $HOME/go
fish_add_path $GOPATH/bin
end
1. Rust 环境
if test -d $HOME/.cargo
fish_add_path $HOME/.cargo/bin
end
6. 性能优化
6.1 条件加载
1. 只在交互式会话中加载
if status is-interactive
1. 命令缩写、键绑定等
source ~/.config/fish/abbreviations.fish
1. 主题和提示符设置
1. 如果使用 tide,它会自动处理
end
1. 只在登录会话中设置
if status is-login
1. PATH 和其他环境变量
1. 避免重复添加 PATH
end
6.2 延迟加载示例
1. 延迟加载 rbenv
if command -q rbenv
function ruby -d "延迟加载 rbenv"
functions -e ruby
status --is-interactive; and rbenv init - | source
ruby $argv
end
end
1. 延迟加载 pyenv
if command -q pyenv
function python -d "延迟加载 pyenv"
functions -e python
pyenv init - | source
python $argv
end
end
7. 自定义键绑定
1. 在 config.fish 中添加
function fish_user_key_bindings
1. Ctrl+Delete 删除到词尾
bind \e\[3\;5~ kill-word
1. Ctrl+Backspace 删除到词首
bind \cH backward-kill-word
1. Ctrl+Left/Right 按词移动
bind \e\[1\;5C forward-word
bind \e\[1\;5D backward-word
1. Alt+上下箭头 在目录历史中导航
bind \e\[1\;3A nextd-or-forward-word
bind \e\[1\;3B prevd-or-backward-word
end
8. 实用技巧
8.1 命令历史
1. 搜索历史(除了 Ctrl+R)
history search --prefix "git" # 搜索以 git 开头的命令
history search --contains "push" # 搜索包含 push 的命令
history merge # 合并所有会话的历史
1. 清除重复历史
history delete --duplicates
8.2 调试配置
1. 查看函数定义
functions mkcd
1. 查看函数文件位置
functions -D mkcd
1. 查看变量值
set -S PATH # 显示 PATH 的详细信息
1. 检查命令类型
type ls # 显示 ls 是什么(别名、函数还是命令)
1. 重新加载配置
source ~/.config/fish/config.fish
1. 或简单地
exec fish
8.3 Fish 特有功能
1. Web 配置界面
fish_config # 打开浏览器配置界面
1. 更新自动补全
fish_update_completions
1. 生成网页版本的手册
help git # 在浏览器中打开 git 的手册
9. 备份配置
创建备份脚本:
function fish_backup -d "备份 fish 配置"
set backup_dir ~/dotfiles/fish/(date +%Y%m%d)
mkdir -p $backup_dir
1. 备份配置文件
cp ~/.config/fish/config.fish $backup_dir/
cp -r ~/.config/fish/functions $backup_dir/
cp ~/.config/fish/fish_plugins $backup_dir/ 2>/dev/null
cp -r ~/.config/fish/completions $backup_dir/ 2>/dev/null
1. 导出缩写
abbr -s > $backup_dir/abbreviations.fish
echo "配置已备份到: $backup_dir"
end
function fish_restore -d "恢复 fish 配置"
if test (count $argv) -eq 0
echo "用法: fish_restore <备份目录>"
return 1
end
set backup_dir $argv[1]
if test -d $backup_dir
cp $backup_dir/config.fish ~/.config/fish/
cp -r $backup_dir/functions ~/.config/fish/ 2>/dev/null
cp $backup_dir/fish_plugins ~/.config/fish/ 2>/dev/null
1. 恢复缩写
if test -f $backup_dir/abbreviations.fish
source $backup_dir/abbreviations.fish
end
1. 重新安装插件
fisher update
echo "配置已恢复"
else
echo "备份目录不存在"
end
end
10. 故障排除
10.1 常见问题
-
函数未找到
1. 确保配置文件已加载 source ~/.config/fish/config.fish 1. 或将函数保存到独立文件 funcsave <函数名> -
PATH 重复
1. 使用 fish_add_path 而不是直接设置 PATH 1. fish_add_path 会自动去重 -
插件未生效
1. 检查插件列表 fisher list 1. 重新安装 fisher update -
主题问题
1. 重置为默认提示符 fish_config prompt choose default
快速配置清单
- ✅ 安装 Fish Shell (Ubuntu:
sudo apt install fish) - ✅ 设置为默认 Shell (
chsh -s $(which fish)) - ✅ 安装 Fisher 插件管理器
- ✅ 安装基础插件:fzf.fish、z、pisces
- ✅ 配置常用缩写和函数
- ✅ 设置环境变量和代理函数
- ✅ 根据需要添加开发工具集成
- ✅ 备份配置文件
记住:Fish 的设计理念是开箱即用,很多功能(语法高亮、自动建议、智能补全)都是默认启用的,无需额外配置。