你还在手敲长命令?这个 Shell 插件帮你自动提醒别名和现代替代工具
每天在终端里敲命令的你,是否也遇到过这些场景:明明设了
alias gs='git status',却总是习惯性地敲完整的git status?用cat查看文件却不知道bat能给你语法高亮和行号?写了一长串find . -name "*.log" -type f,完全忘了fd更快更简洁?
如果你也有这些困扰,那 you-should-use 这个 Shell 插件就是为你打造的。
项目简介
you-should-use 是一个跨 Shell 的智能提醒插件,支持 Zsh、Bash、Fish、Nushell 四种主流 Shell。它的核心理念很简单:让你的终端帮你养成好习惯。
它做三件事:
- 别名提醒 — 当你手动输入了一个已有别名的命令时,温柔地提醒你
- 现代工具建议 — 当你使用老旧命令时,建议已安装在你系统上的 Rust/Go 现代替代品
- AI 智能建议 — 通过本地 Ollama 大模型,给出更优雅的命令写法
项目主页:ysu.codelife.me | GitHub:vangie/you-should-use
为什么需要这样一个插件?
问题一:别名设了等于没设
我们经常在 .zshrc 里写一堆 alias:
alias gs='git status'
alias gc='git commit'
alias gp='git push'
alias ll='ls -la'
alias k='kubectl'
但实际使用时,手指比脑子快,总是习惯性地敲完整命令。久而久之,alias 形同虚设。
you-should-use 的做法:每次你输入完整命令时,它会在输出后轻轻提醒一句:
$ git status
YSU ~> You have an alias: gs
不阻断你的工作流,只是一个友好的提示。���天下来,你会发现自己不知不觉就开始用 alias 了。
问题二:不知道有更好的工具
Rust 和 Go 社区这几年造了一大批优秀的命令行工具,性能更好、输出更美观、使用更友好。但很多人根本不知道它们的存在,或者知道了却懒得换。
you-should-use 的做法:当你用 cat、ls、find 等老命令时,如果你的系统上已经装了现代替代品,它会自动建议:
$ cat README.md
YSU ~> Try bat instead of cat — Syntax highlighting, line numbers
install: brew install bat
$ ls -la
YSU ~> Try eza -la instead of ls -la — Modern listing with icons
$ grep -r "TODO" .
YSU ~> Try rg "TODO" instead of grep — Faster, respects .gitignore
注意最后一行的 install hint:如果你系统上没有装 bat,它还会告诉你怎么装。而且它能自动检测你的包管理器(brew / apt / pacman / dnf 等),给出正确的安装命令。
问题三:命令写得不够优雅
有些命令虽然能用,但写法可以更好。比如一长串管道组合、冗余的参数、或者可以用一个命令替代的多步操作。
you-should-use 的做法:集成本地 LLM(支持 Ollama),异步分析你的命令并给出改进建议。完全本地运行,不发送任何数据到外部服务器。
$ find . -name "*.py" -exec grep -l "import os" {} \;
YSU ~> [AI] Try: rg -l "import os" --type py
Faster and simpler with ripgrep's built-in file type filter
内置命令映射一览
插件内置了丰富的现代命令映射,覆盖了最常用的命令行工具:
| 旧命令 | 现代替代 | 改进点 |
|---|---|---|
cat | bat | 语法高亮、行号、Git 集成 |
ls | eza / lsd | 图标、Git 状态、树形视图 |
find | fd | 语法更简单、速度更快、尊重 .gitignore |
grep | rg / ag | Ripgrep 速度碾压,尊重 .gitignore |
du | dust / ncdu | 可视化磁盘使用 |
top | btop / htop | 颜值在线的资源监控 |
ps | procs | 现代化进程查看器 |
diff | delta | 语法高亮、并排对比 |
sed | sd | 正则语法更直觉 |
curl | httpie | 人类友好的 HTTP 客户端 |
man | tldr | 社区驱动的简化手册 |
cd | zoxide | 智能学习你的 cd 习惯 |
vim | nvim | 现代化的 Vim 分支 |
dig | dog | 带颜色的 DNS 客户端 |
ping | gping | 带图表的 ping |
只有当现代替代工具确实安装在你系统上时,才会触发建议。不会推荐你没装的东西。
当有多个替代品时(比如 ls → eza 或 lsd),会优先推荐第一个已安装的。你也可以自定义映射:
typeset -gA YSU_MODERN_COMMANDS
YSU_MODERN_COMMANDS=(
cat "bat:语法高亮神器"
ls "eza:现代文件列表|lsd:带图标的 ls"
vim "nvim:Neovim"
)
安装极其简单
方式一:Homebrew(macOS 推荐)
brew install vangie/formula/you-should-use
方式二:一行命令安装
curl -fsSL https://raw.githubusercontent.com/vangie/you-should-use/main/install.sh | sh
自动检测你的 Shell 类型,克隆仓库,配置 rc 文件,一步到位。
方式三:插件管理器
oh-my-zsh:
git clone https://github.com/vangie/you-should-use \
${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/you-should-use
# 然后在 ~/.zshrc 中添加:
plugins=(... you-should-use)
zinit:
zinit light vangie/you-should-use
Fisher (Fish):
fisher install vangie/you-should-use
支持的插件管理器还包括 zplug、Antidote、Oh My Fish 等,详见 README。
丰富的配置选项
频率控制 — 不打扰你
担心提醒太频繁?可以设置概率和冷却时间:
YSU_PROBABILITY=50 # 50% 概率显示提示
YSU_COOLDOWN=30 # 两次提示之间至少间隔 30 秒
排除列表
某些 alias 你就是不想用?可以排除:
YSU_IGNORE_ALIASES="g gc" # 不提醒这些 alias
YSU_IGNORE_COMMANDS="cat ls" # 不建议这些命令的替代品
自定义消息格式
YSU_MESSAGE_FORMAT="{prefix} {arrow} {message}"
# 支持占位符:{prefix}、{arrow}、{message}
主题系统
内置多款深色/浅色主题,终端颜色和谐统一:
YSU_THEME="dark"
YSU_DARK_THEME="tokyo-night" # 还支持 dracula, monokai, catppuccin-mocha
YSU_LIGHT_THEME="solarized" # 还支持 catppuccin-latte, github
AI 智能建议(Ollama 集成)
这是 you-should-use 最有趣的功能之一。如果你本地运行了 Ollama,插件会自动检测并启用 AI 建议,无需任何配置。
工作原理
- 你执行一条命令
- 插件在后台异步发送给本地 LLM 分析
- 下一次按回车时,显示 AI 的建议
- 结果会缓存,相同模式的命令不会重复请求
完全本地运行,你的命令不会离开你的机器。
单命令 vs 多命令分析
YSU_LLM_MODE="single" # 逐条分析(默认)
YSU_LLM_MODE="multi" # 分析最近 N 条命令的组合模式
YSU_LLM_MODE="both" # 两者都启用
YSU_LLM_WINDOW_SIZE=5 # 多命令窗口大小
多命令模式特别有用 — 它能发现你的工作流模式,比如你总是先 cd、再 git pull、再 npm install,它可能会建议你写一个 shell function 来一步完成。
兼容任何 OpenAI 接口
虽然默认对接 Ollama,但支持任何 OpenAI 兼容的 API:
YSU_LLM_API_URL="https://api.openai.com/v1"
YSU_LLM_API_KEY="sk-..."
YSU_LLM_MODEL="gpt-4o-mini"
实用子命令
you-should-use 不只是一个被动的提醒插件,它还提供了一系列实用命令:
ysu status — 配置仪表盘
一览你的所有配置、统计信息、LLM 状态:
$ ysu status
╭─ you-should-use status ─────────────────────╮
│ Alias Reminders: ✓ enabled │
│ Modern Suggest: ✓ enabled │
│ LLM Suggest: ✓ enabled (auto: qwen2.5) │
│ Theme: dark (tokyo-night) │
│ Cache entries: 42 │
│ Package manager: brew │
╰──────────────────────────────────────────────╯
ysu discover — 别名发现
扫描你的 Shell 历史记录,找出高频重复命令,建议你创建 alias:
$ ysu discover
git checkout -b (used 47 times)
alias gcb='git checkout -b'
docker compose up (used 23 times)
alias dcu='docker compose up'
kubectl get pods (used 19 times)
alias kgp='kubectl get pods'
ysu doctor — 诊断工具
遇到问题?跑一下诊断:
$ ysu doctor
✓ Shell: zsh 5.9 (compatible)
✓ Hooks: preexec/precmd registered
✓ Load time: 12ms
✓ Config: no conflicts
✓ Package manager: brew
✓ Ollama: connected (model: qwen2.5-coder:7b)
✓ Dependencies: curl ✓, jq ✓, md5sum ✓
其他命令
ysu config— 交互式配置向导(含主题预览)ysu cache clear/size— LLM 缓存管理ysu update— 一键更新到最新版ysu uninstall— 干净卸载(自动检测安装方式)
技术亮点
作为开发者,你可能会对一些实现细节感兴趣:
跨 Shell 架构
- Zsh:使用
preexec/precmd钩子 - Bash:使用
DEBUGtrap +PROMPT_COMMAND(兼容 Bash 3.2+) - Fish:使用
fish_preexec事件 + 并行数组 - Nushell:使用
pre_execution钩子 + 结构化数据
四种 Shell 功能完全对齐,配置变量统一为 YSU_ 前缀。
智能别名解析
不只是简单的字符串匹配。支持:
- sudo 前缀剥离:
sudo git status也能匹配到gs别名 - 链式别名解析:嵌套的 alias 也能正确识别
- zsh-abbr 兼容:支持 zsh-abbr 的缩写格式
LLM 异步 + 缓存
- 完全异步:后台 curl 请求,不阻塞终端
- 智能缓存:相同命令模式的结果存储在
~/.cache/ysu/ - 只在有意义时触发:退出码非 0、包含管道/重定向、参数较多时
237+ 自动化测试
使用 bats-core 测试框架,覆盖 Zsh、Bash、Fish 三种 Shell,GitHub Actions CI 全自动运行。
与同类项目的区别
你可能知道 MichaelAqworter/zsh-you-should-use,那是一个很棒的 Zsh 插件,但:
| 特性 | zsh-you-should-use | vangie/you-should-use |
|---|---|---|
| Shell 支持 | 仅 Zsh | Zsh + Bash + Fish + Nushell |
| 别名提醒 | ✓ | ✓ |
| 现代工具建议 | ✗ | ✓(13+ 内置映射) |
| AI 建议 | ✗ | ✓(Ollama / OpenAI) |
| 安装提示 | ✗ | ✓(自动检测包管理器) |
| 主题系统 | ✗ | ✓(7 款主题) |
| 别名发现 | ✗ | ✓(历史分析) |
| 诊断工具 | ✗ | ✓(ysu doctor) |
| 频率控制 | 部分 | ✓(概率 + 冷却) |
快速体验
30 秒安装体验:
# 1. 安装
curl -fsSL https://raw.githubusercontent.com/vangie/you-should-use/main/install.sh | sh
# 2. 重新加载 Shell
exec $SHELL
# 3. 试试看
cat README.md # 如果你装了 bat,会提醒你
git status # 如果你有 gs alias,会提醒你
ysu discover # 看看你应该创建哪些 alias
ysu status # 查看插件状态
写在最后
命令行效率的提升往往来自一些小习惯的积累:用一个短 alias 代替长命令、用一个更快的现代工具代替老旧工具。you-should-use 做的就是帮你在日常使用中自然而然地养成这些好习惯,而不需要你刻意去记忆。
如果你觉得这个项目有用,欢迎:
- 在 GitHub 上给个 Star
- 提 Issue 或 PR
- 分享给你的命令行爱好者朋友
GitHub:github.com/vangie/you-… 项目主页:ysu.codelife.me