你还在手敲长命令?这个 Shell 插件帮你自动提醒别名和现代替代工具

0 阅读5分钟

你还在手敲长命令?这个 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。它的核心理念很简单:让你的终端帮你养成好习惯

它做三件事:

  1. 别名提醒 — 当你手动输入了一个已有别名的命令时,温柔地提醒你
  2. 现代工具建议 — 当你使用老旧命令时,建议已安装在你系统上的 Rust/Go 现代替代品
  3. 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 的做法:当你用 catlsfind 等老命令时,如果你的系统上已经装了现代替代品,它会自动建议:

$ 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

内置命令映射一览

插件内置了丰富的现代命令映射,覆盖了最常用的命令行工具:

旧命令现代替代改进点
catbat语法高亮、行号、Git 集成
lseza / lsd图标、Git 状态、树形视图
findfd语法更简单、速度更快、尊重 .gitignore
greprg / agRipgrep 速度碾压,尊重 .gitignore
dudust / ncdu可视化磁盘使用
topbtop / htop颜值在线的资源监控
psprocs现代化进程查看器
diffdelta语法高亮、并排对比
sedsd正则语法更直觉
curlhttpie人类友好的 HTTP 客户端
mantldr社区驱动的简化手册
cdzoxide智能学习你的 cd 习惯
vimnvim现代化的 Vim 分支
digdog带颜色的 DNS 客户端
pinggping带图表的 ping

只有当现代替代工具确实安装在你系统上时,才会触发建议。不会推荐你没装的东西。

当有多个替代品时(比如 lsezalsd),会优先推荐第一个已安装的。你也可以自定义映射:

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 建议,无需任何配置。

工作原理

  1. 你执行一条命令
  2. 插件在后台异步发送给本地 LLM 分析
  3. 下一次按回车时,显示 AI 的建议
  4. 结果会缓存,相同模式的命令不会重复请求

完全本地运行,你的命令不会离开你的机器。

单命令 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:使用 DEBUG trap + 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-usevangie/you-should-use
Shell 支持仅 ZshZsh + 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