用途
lov-zsh-alias 用于向用户的 ~/.zshrc 添加 zsh 别名或函数,操作幂等且安全。它把条目写在哨兵标记之间,因此重复运行时会在原位置更新条目,而不会产生重复内容。
主要能力
- 支持 ASCII 触发名(如 gs、zxsd)与中文函数名(如 中信书店)。
- 支持多个别名指向同一命令(--also-as,可重复)。
- 支持以 function 形式(默认,支持 CJK 名称并通过 "$@" 传参)或 simple alias 形式(alias name='cmd',仅限 ASCII 名称)写入。
- 支持删除此前添加的别名(--remove)。
- 支持通过 --rcfile 指定目标 rc 文件,默认 ~/.zshrc;也可用环境变量 SKILL_ZSH_ALIAS_RCFILE 修改默认值,--rcfile 优先级更高。
- 支持 --dry-run 仅打印不写入。
使用方式
建议流程:
- 收集信息:触发名(可多个)、要执行的 shell 命令、风格(function 或 simple alias)。若用户已用自然语言给出触发词与命令,可跳过提问。
- 预览:运行
python3 scripts/add_alias.py \
--name <trigger> \
--cmd '<shell command>' \
--comment '<one-line explanation>' \
[--also-as <other-trigger>] \
--dry-run
并向用户展示生成的块。
-
应用:去掉 --dry-run 重新运行,脚本写入哨兵包裹的块;同名再次运行会就地更新。
-
重载:提示用户执行
source ~/.zshrc(或打开新终端),之后输入触发词并回车即可。
删除别名:
python3 scripts/add_alias.py \
--name <trigger> --cmd unused --remove
CLI 参数:--name(必填,触发词,ASCII 或中文)、--cmd(必填,要执行的 shell 命令)、--also-as(额外别名名,可重复)、--comment(块上方注释,默认空)、--simple(使用 alias= 形式,仅 ASCII)、--rcfile(目标 rc 文件,默认 ~/.zshrc)、--dry-run(只打印不写入)、--remove(删除 --name 对应条目)。
写入的块格式:
# >>> lov-zsh-alias >>> <name>
# <comment>
<name>() { <cmd> }
<also-as>() { <name> "$@" }
# <<< lov-zsh-alias <<< <name>
适用场景
- 用户想把某个触发词绑定到一条 shell 命令(“我输入 X 就跑 Y”)。
- 用户想用中文触发词(例如输入“中信书店”启动 claude 说一句开心话)。
- 用户希望多个别名指向同一命令。
- 用户想移除此前添加的别名。
限制与注意事项
- 不适用于需要在输入后不按回车就自动触发的系统级快捷键,这类需求应使用输入法快捷键或 Hammerspoon;应向用户说明。
- 不适用于非 zsh shell,除非用户显式传入 --rcfile。
- shell 别名始终需要按回车才会执行。
- 中文名称不要使用 --simple,脚本会拒绝。
- zsh 原生支持 CJK 函数名,无需额外引号处理。
- 写入后必须提示用户 source ~/.zshrc 或打开新终端才能生效。
- 运行时读取本 Skill 包的 skill.yaml,由宿主提供 skill-runtime/v1 上下文;字段解析顺序为当前请求、项目上下文、个人 Preferences、品牌 Profile、通用默认值,只使用 Manifest 声明的字段。required: true 字段缺失时按 Manifest 的问题配置向用户提出一个聚焦问题,用户明确同意后再保存回答。报错应提供可复制的 context_id、字段路径与来源,诊断内容避开秘密、完整私人路径和原始配置。