Fish 4.x:开箱即用的智能 shell,含语法高亮、自动补全、历史提示。默认 Emacs 键位,可选 vi 模式。快捷键按 Fish 4.x 笔记整理;终端和自定义绑定可能覆盖默认值,用
bind与fish_key_reader核对。
核心特性速览#
| 特性 | 说明 |
|---|---|
| 语法高亮 | 输入时实时着色:有效命令蓝色、无效红色、路径下划线、引号黄色 |
| 自动建议 (Autosuggestion) | 灰色文字提示历史匹配命令,按 → 或 Ctrl+f 接受 |
| Tab 补全 | 可导航、可搜索的菜单式补全列表 |
| 缩写 (Abbr) | 输入缩写 → 空格后自动展开为完整命令 |
| Web 配置 | fish_config 在浏览器中选主题、改提示符 |
| Man page 快捷 | Alt+h 打开当前命令的手册 |
通用快捷键(Emacs 和 Vi 模式共享)#
补全
| 快捷键 | 动作 |
|---|---|
Tab / Ctrl+i |
补全当前 token |
Shift+Tab |
补全并打开搜索结果 |
Ctrl+Space |
插入空格但不展开缩写 |
光标移动
| 快捷键 | 动作 |
|---|---|
← / → |
移动一个字符;在行末按 → 接受自动建议 |
Alt+← / Alt+→ |
移动一个参数/单词;空行时浏览目录历史 |
Ctrl+← / Ctrl+→ |
移动一个单词;在行末接受一个单词的建议 |
Shift+← / Shift+→ |
移动一个"大词"(不含标点停顿) |
历史搜索
| 快捷键 | 动作 |
|---|---|
↑ / ↓ / Ctrl+p / Ctrl+n |
按当前输入内容搜索历史 |
Alt+↑ / Alt+↓ |
按光标所在的 token 搜索历史 |
Shift+Delete |
从历史中删除当前项/自动建议 |
删除与剪切
| 快捷键 | 动作 |
|---|---|
Ctrl+u |
从行首删到光标(→ kill ring) |
Ctrl+w |
删除前一个路径组件(以 / : @ 为界 → kill ring) |
Alt+d |
删除下一个单词(→ kill ring) |
Ctrl+Delete |
删除下一个单词(→ kill ring,macOS 上是下一个参数) |
Alt+Delete |
删除下一个参数(→ kill ring,macOS 上是下一个单词) |
剪贴板
| 快捷键 | 动作 |
|---|---|
Ctrl+x |
复制当前命令行到系统剪贴板 |
Ctrl+v |
从系统剪贴板粘贴 |
Ctrl+y |
从 kill ring 粘贴(yank) |
Alt+y |
粘贴后轮转到 kill ring 前一项(yank-pop) |
实用操作
| 快捷键 | 动作 |
|---|---|
Alt+h / F1 |
显示当前命令的 man page |
Alt+l |
列出当前目录;光标在目录参数上则列出该目录 |
Alt+o |
在 pager 中打开光标处的文件;光标在脚本命令上则用 $EDITOR 打开该脚本 |
Alt+p |
在光标处的任务后追加 `& |
Alt+w |
显示光标处命令的简短描述(whatis) |
Alt+e / Alt+v |
在外部编辑器中编辑当前命令行 |
Alt+s |
在命令前添加 sudo(空行则添加到上一条命令) |
Alt+Enter |
在光标处插入换行 |
Ctrl+c |
中断当前命令 |
Ctrl+d |
删除光标右字符;空行时退出 fish |
Ctrl+l |
清屏 |
Emacs 模式(默认)#
行内移动与编辑
| 快捷键 | 动作 |
|---|---|
Home / Ctrl+a |
移到行首 |
End / Ctrl+e |
移到行尾;在行末接受自动建议 |
Ctrl+b |
左移一个字符 |
Ctrl+f |
右移一个字符/接受自动建议 |
Alt+b |
左移一个单词/接受一个单词;空行时向前浏览目录历史 |
Alt+f |
右移一个单词/接受一个单词;空行时向后浏览目录历史 |
Alt+< |
移到命令行开头 |
Alt+> |
移到命令行末尾 |
删除
| 快捷键 | 动作 |
|---|---|
Backspace / Ctrl+h |
删除前一个字符 |
Delete |
删除后一个字符 |
Ctrl+Backspace |
删除前一个单词(macOS 上是前一个参数) |
Alt+Backspace |
删除前一个参数(macOS 上是前一个单词) |
Ctrl+k |
删到行尾 |
大小写转换
| 快捷键 | 动作 |
|---|---|
Alt+c |
当前单词首字母大写 |
Alt+u |
当前单词全大写 |
字符/单词交换
| 快捷键 | 动作 |
|---|---|
Ctrl+t |
交换最后两个字符 |
Alt+t |
交换最后两个单词 |
撤销/重做
| 快捷键 | 动作 |
|---|---|
Ctrl+z / Ctrl+_ / Ctrl+/ |
撤销最近的编辑 |
Alt+/ / Ctrl+Shift+z |
重做 |
历史搜索
| 快捷键 | 动作 |
|---|---|
Ctrl+r |
打开历史 pager;重复按下搜索更旧条目 |
Ctrl+s |
在 pager 中跳到更新条目(非 pager 中切换搜索) |
取消
| 快捷键 | 动作 |
|---|---|
Escape / Ctrl+g |
取消当前操作;撤销自动补全 |
Vi 模式#
在 config.fish 中启用:
fish_vi_key_bindings启动后通常进入 Insert 模式;以下按三个子模式组织:Normal(按 Escape 进入)、Insert(i/a/o 等)、Visual(v)。
Normal 模式
移动
| 快捷键 | 动作 |
|---|---|
h |
左移一个字符 |
l |
右移一个字符 |
k |
搜索上一条历史命令(多行时光标上移) |
j |
搜索下一条历史命令(多行时光标下移) |
0 |
移到行首 |
Backspace |
左移一个字符 |
g,g |
移到命令行开头 |
G |
移到命令行末尾 |
进入 Insert 模式
| 快捷键 | 动作 |
|---|---|
i |
在光标处插入 |
I |
在行首插入 |
a |
在光标后插入 |
A |
在行尾插入 |
o |
在下方插入新行 |
O |
在上方插入新行 |
删除与粘贴
| 快捷键 | 动作 |
|---|---|
d,d |
删除整行(→ kill ring) |
D |
删到行尾 |
p |
粘贴 kill ring 内容 |
撤销/重做
| 快捷键 | 动作 |
|---|---|
u |
撤销 |
Ctrl+r |
重做 |
大小写
| 快捷键 | 动作 |
|---|---|
~ |
切换当前字符大小写,光标前进 |
g,u |
到词尾全部转小写 |
g,U |
到词尾全部转大写 |
历史搜索
| 快捷键 | 动作 |
|---|---|
[ |
按光标 token 搜索前一条历史 |
] |
按光标 token 搜索后一条历史 |
/ |
打开历史 pager |
退出
| 快捷键 | 动作 |
|---|---|
:,q |
退出 fish |
Insert 模式
| 快捷键 | 动作 |
|---|---|
Escape |
进入 Normal 模式 |
Backspace |
删除前一个字符 |
Ctrl+n |
接受自动建议 |
Visual 模式
| 快捷键 | 动作 |
|---|---|
h / l |
扩展选中(左右一个字符) |
k / j |
扩展选中(上下行) |
b / w |
扩展选中(单词级) |
d / x |
删除选中 → kill ring,回到 Normal |
c / s |
删除选中 → Insert 模式 |
y |
复制选中 → kill ring,回到 Normal |
",*,y |
复制选中到系统剪贴板,回到 Normal |
X |
删除整行 → kill ring,回到 Normal |
~ |
切换选中区域大小写,回到 Normal |
g,u |
选中区域转小写,回到 Normal |
g,U |
选中区域转大写,回到 Normal |
Escape / Ctrl+c |
回到 Normal 模式 |
Tab 补全系统#
基本操作
| 快捷键 | 动作 |
|---|---|
Tab |
触发补全/展开建议 |
Shift+Tab |
补全并打开 pager 搜索 |
Ctrl+s |
在补全 pager 中搜索 |
补全规则示例
# 列出 systemctl 子命令补全
systemctl <Tab> # → enable, disable, start, stop, status...
# 路径补全
ls ~/Doc<Tab> # → ~/Documents/
# Git 分支/文件补全
git checkout <Tab> # → 列出所有分支
# 命令选项补全
git commit -<Tab> # → -m, -a, --amend, --no-verify...
# 进程 PID 补全
kill <Tab> # → 列出所有进程 PID + 命令名常用配置 (~/.config/fish/config.fish)#
别名 → 缩写
# 别名适合函数式包装
alias ga="git add"
# 缩写在输入时展开,展开后可见且可编辑;别名仍然有效
abbr -a ga "git add"
abbr -a gc "git commit"
abbr -a gco "git checkout"
abbr -a gp "git push"
abbr -a gst "git status"模式切换
# Vi 模式(vim 用户推荐)
fish_vi_key_bindings
# 改回 Emacs
# fish_default_key_bindings
# Vi 模式下光标形状
set -g fish_cursor_default block
set -g fish_cursor_insert line
set -g fish_cursor_replace_one underscore
set -g fish_cursor_visual block自定义补全颜色
# 让自动建议更低调
set -g fish_color_autosuggestion brblackGreeting
# 禁用欢迎语
set -g fish_greetingPATH 管理
# 前置新目录(自动去重)
fish_add_path ~/.local/bin
# 明确追加到 fish_user_paths 的尾部
fish_add_path --append ~/bin
# 已有目录也移到所选位置,而不是保持原位置
fish_add_path --move ~/bin事件钩子
# 退出时执行
function on_exit --on-event fish_exit
echo "Goodbye from" (hostname)
end私有模式#
# 启动私有 session(不记录历史,不影响其他 session)
fish --private
# 或
fish -P
# 在运行中检查
echo $fish_private_mode # 1 表示私有模式自定义快捷键#
# 查看某个按键的转义序列名
fish_key_reader
# 绑定新快捷键
bind \cg 'echo "Ctrl+G pressed"'
# 在 Vi 模式特定子模式下绑定
bind --mode insert \cf 'echo "Insert mode specific"'
# 查看所有当前绑定
bind
# 恢复默认
bind --erase \cg常用内置命令速查#
| 命令 | 用途 |
|---|---|
fish_config |
Web UI 配置(主题、提示符、快捷键) |
fish_key_reader |
按键序列诊断 |
fish_add_path |
PATH 管理(自动去重) |
fish_update_completions |
重建补全缓存 |
fish_default_key_bindings |
切换到 Emacs 键位 |
fish_vi_key_bindings |
切换到 Vi 键位 |
abbr -a |
添加缩写 |
bind |
查看/设置键位绑定 |
set -Ux |
设置通用变量 |
set -gx |
设置全局变量 |
string |
字符串处理 |
functions |
查看/管理函数 |
funced |
交互式编辑函数 |
funcsave |
保存函数 |
type |
显示命令类型(函数/内置/外部) |
prompt 管理#
# 在终端选择内置提示符
fish_config prompt choose disco
# 查看可用提示符
fish_config prompt show
# 保存选择
fish_config prompt save参考与延伸
根据技术笔记重新整理,示例使用通用名称。