拓冰建站拓冰建站
首页 / 资讯中心 / 正文

chezmoi completion 命令详解:为 bash / fish / powershell / zsh 生成 Shell 补全

开发工具CLI配置管理【免费下载链接】chezmoiManage your dotfiles across multiple diverse machines, securely.项目地址https://gitcode.com/gh_mirrors/ch/chezmoi点击查看免费下载导读completion是 chezmoi 提供的一个内部命令用于按需生成指定 shellbash、fish、powershell、zsh的补全脚本配合--output参数即可一次性把补全写入 shell 的配置目录。本文以 completion 命令参考文档 为骨架结合 completioncmd.go 源码、completion.txtar 测试 与 completion_unix.txtar 测试完整讲解命令用法、各 shell 的安装方式、completion.custom自定义补全配置、completion模板函数以及仓库内置补全脚本与打包分发的关系读完即可在自己的多台机器上为 chezmoi 配好命令行补全。命令概览与基本用法命令的完整用法为chezmoi completion shell其中shell必须是bash、fish、powershell、zsh四者之一。命令会生成对应 shell 的补全代码并输出到标准输出stdout不会直接写入任何文件因此你可以自由选择把它重定向到 shell 补全目录或配合--output参数直接指定目标文件。参考文档给出的两个示例# 生成 bash 补全代码直接打印到终端 chezmoi completion bash # 生成 fish 补全代码并写入 fish 的 completions 目录 chezmoi completion fish --output~/.config/fish/completions/chezmoi.fish第二个示例利用的是 chezmoi 全局参数--output它把命令输出写入指定路径因此这条命令一次调用即可完成补全脚本的落地是日常安装最常用的形态。源码层面对参数与行为的约束从 completioncmd.go 可以确认命令的严格定义Use: completion shell即必须且只能带一个位置参数ValidArgs限定为bash、fish、powershell、zsh配合 cobra 的Args: cobra.ExactArgs(1)在参数数量或取值不合法时报错命令被归入groupIDInternal内部命令分组标注了doesNotRequireValidConfig不要求存在合法配置即可运行与persistentStateModeNone不读写持久化状态这意味着即使你还没有初始化配置文件也可以先为 chezmoi 生成补全。实际的补全代码生成逻辑在completion()函数中completioncmd.go它针对不同 shell 调用 cobra 的不同生成器shell底层生成器输出特征bashGenBashCompletionV2含描述以# bash completion V2 for chezmoi开头fishGenFishCompletion含描述以# fish completion for chezmoi开头powershellGenPowerShellCompletionWithDesc包含Register-ArgumentCompleter注册逻辑zshGenZshCompletion以#compdef chezmoi开头传入未知 shell 时返回%s: unsupported shell错误。生成结果最终通过c.writeOutputString(completion, 0o666)输出即默认以0666权限位写出实际受 umask 影响并受--output参数控制落盘位置。这些输出特征正是仓库测试的断言依据completion.txtar 分别执行四个 shell 的生成命令并用stdout断言各自的标记行例如 zsh 输出必须包含#compdef chezmoipowershell 输出必须包含Register-ArgumentCompleter。各 Shell 的补全安装方式chezmoi 为四种 shell 均内置补全若你通过包管理器安装 chezmoi补全脚本通常已随包安装完毕见 打包指南 中请将completions目录中的补全脚本装入 shell 对应目录的说明。若需要手动安装可按以下方式操作。bash将生成的 bash 补全脚本放入 bash-completion 的加载路径即可chezmoi completion bash | sudo tee /etc/bash_completion.d/chezmoi /dev/null或写入用户级目录配合 bash-completion 的自动加载chezmoi completion bash --output ~/.local/share/bash-completion/completions/chezmoifishfish 会自动加载~/.config/fish/completions/下以*.fish命名的补全文件因此参考文档中的示例即为 fish 的标准安装方式chezmoi completion fish --output~/.config/fish/completions/chezmoi.fishzshzsh 的补全目录约定为fpath中的目录通常使用用户级目录chezmoi completion zsh --output${fpath[1]}/_chezmoi更稳妥的做法是安装到~/.oh-my-zsh/completions/若使用 oh-my-zsh或~/.zsh/completions/并把该目录加入fpath确保autoload -Uz compinit compinit在补全脚本加载之前执行。powershell官方 FAQusage.md特别指出PowerShell 的补全需要手动把脚本加入 profile因为包管理器一般不会自动处理。做法是chezmoi completion powershell | Out-String | Invoke-Expression要持久生效先把补全内容写入 profile 再重开终端chezmoi completion powershell --output $PROFILE写入后可在 PowerShell 中键入chezmoi ap后按 Tab验证是否补全出apply。让补全结果更智能completion.custom 配置默认生成的补全是 cobra 基于命令与参数定义的标准补全可以补全子命令、参数名以及--flag的取值。而 chezmoi 还提供了一类自定义补全能力让补全程序根据当前源状态source state动态补全目标文件路径、chattr属性等 chezmoi 特有内容。在配置文件中开启variables.md.yaml[completion] custom true配置键为completion.custom布尔类型对应源码中completionCmdConfig.Custom bool字段支持 JSON / mapstructure / YAML 三种配置映射见 completioncmd.go。开启后config.go 的 targetValidArgs 函数 会接管目标路径类参数的补全它遍历源状态中的全部条目生成目标路径作为候选目录条目会在末尾追加/并按用户当前输入的前缀进行过滤如果toComplete是相对路径还会去掉工作目录前缀使补全结果与用户的输入风格保持一致。若未开启custom则直接返回cobra.ShellCompDirectiveDefault交由 shell 做默认补全。completion_unix.txtar 完整验证了这类自定义补全其测试配置中即设置了[completion] custom truechezmoi __complete apply --included只补全出以d开头的取值dirschezmoi __complete chattr p补全出属性名privatechezmoi __complete cat $HOME/.f能补全出$HOME/.file等实际托管的目标文件chezmoi __complete cat .f在$HOME目录下执行能补全出相对路径.filechezmoi __complete cat private $HOME对目录补全出$HOME/.dir/带尾部斜杠。与之配套completion.txtar 验证了大量标志取值的自动补全例如--color的t/true、--config-format的json/toml/yaml、--mode的file/symlink、apply --exclude/--include的 entry type 集合dirs、files、scripts、symlinks、templates、encrypted、externals及其no前缀变体、add --secrets的error/ignore/warning、archive/data/dump/dump-config --format的输出格式、managed/status/unmanaged --path-style的路径风格等。这些补全由 cobra 的ValidArgsFunction与__complete隐藏命令驱动测试通过exec chezmoi __complete ...直接与补全引擎交互校验每个标志的候选值与退出码。在模板与 dotfiles 中使用 completion 模板函数除了命令行chezmoi 还提供了同名模板函数completion它返回指定 shell 的补全代码用法与命令一一对应函数参考文档{{ completion zsh }}shell参数同样只能是bash、fish、powershell、zsh之一。FAQusage.md指出补全脚本既可以一次性手动生成也可以作为 dotfiles 仓库的一部分随 chezmoi 管理。典型做法是在源目录中维护一个模板文件例如# 由 chezmoi 模板生成不要手动编辑 {{ completion zsh }}这样chezmoi apply后 zsh 补全脚本会以托管文件的形式出现在目标机器上换新机器时执行chezmoi init与chezmoi apply即可自动恢复补全能力无需再手动执行生成命令。这正是命令形式与模板函数形式互补的价值命令适合一次性手动安装模板函数适合把补全纳入 dotfiles 的声明式管理。仓库内已生成的补全脚本与打包分发值得说明的是仓库根目录下已包含四个预生成的补全脚本与completion命令的输出等价completions/chezmoi-completion.bashcompletions/chezmoi.fishcompletions/chezmoi.ps1completions/chezmoi.zsh这些文件主要用于发行与打包场景打包指南 明确要求打包者将completions目录中的脚本安装到各 shell 的对应目录如/usr/share/bash-completion/completions/、/usr/share/fish/vendor_completions.d/等。如果你使用系统包管理器安装 chezmoi补全很可能已随之就位无需手动执行completion命令。需要验证时可对照上文表格中的输出特征如 bash 的# bash completion V2 for chezmoi、zsh 的#compdef chezmoi检查已安装脚本的内容是否与仓库版本一致。小结chezmoi completion shell是一个轻量但完整的补全生成入口支持 bash、fish、powershell、zsh 四种 shell输出直达 stdout、可配合--output一键落盘通过配置completion.custom true可获得基于源状态的目标路径与属性补全模板函数{{ completion shell }}则让补全脚本可以像其他 dotfiles 一样被声明式地管理。无论是手动一次性安装还是把补全纳入跨机器同步的 dotfiles 仓库这个命令都能覆盖。若你想进一步了解补全在仓库中的完整测试覆盖可阅读 completion.txtar 与 completion_unix.txtar。赞分享开发工具CLI配置管理【免费下载链接】chezmoiManage your dotfiles across multiple diverse machines, securely.项目地址https://gitcode.com/gh_mirrors/ch/chezmoi点击查看免费下载相关推荐mise completion 命令完全指南为 zsh / bash / fish / PowerShell 生成与安装 Shell 补全mise completion 命令完全指南为 zsh / bash / fish / PowerShell 生成与安装 Shell 补全 mise comp开发工具CLIminikube completion 命令完全指南为 bash、zsh、fish 与 PowerShell 生成 Shell 自动补全minikube completion 命令完全指南为 bash、zsh、fish 与 PowerShell 生成 Shell 自动补全 导读 minikub云原生容器编排CLI开发工具rclone completion 命令详解为 bash/zsh/fish/PowerShell 一键生成自动补全脚本rclone completion 命令详解为 bash/zsh/fish/PowerShell 一键生成自动补全脚本 rclone completion 是CLI数据同步对象存储上一篇CrewAI Studio性能优化指南提升AI代理运行效率的10个技巧下一篇uni-simple-router 项目常见问题解决方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门