PSCompletions (psc)
本页内容来自于项目 README,内容更新可能延后,请以项目 README 为准!
介绍
喜欢这个项目?请给它 Star ⭐️ 或 赞赏 💰
TIP
- PowerShell(pwsh): 跨平台的 PowerShell (Core)。运行
pwsh/pwsh.exe启动 - Windows PowerShell: Windows 系统内置的 PowerShell (Desktop)。运行
powershell/powershell.exe启动 - 它们都可以使用
PSCompletions,但是更推荐 PowerShell(pwsh)
一个命令补全管理模块,用于在 PowerShell 中更简单、更方便地使用命令补全。
- 更强大的补全菜单
- 集中管理补全
- 动态排序补全项(根据使用频次)
en-US,zh-CN,... 多语言切换- 与 argc-completions 结合使用
Demo

新的变化
- 请查阅 更新日志
常见问题
- 请查阅 常见问题
贡献
- 请查阅 贡献指南
安装
安装模块:
导入模块:
powershellImport-Module PSCompletions- 如果不想每次启动
PowerShell都需要导入PSCompletions模块,你可以使用以下命令将导入语句写入$Profile中powershell"Import-Module PSCompletions" >> $Profile - 推荐将
Import-Module PSCompletions添加到$Profile中靠前的位置,避免出现 编码问题
- 如果不想每次启动
卸载
Uninstall-Module PSCompletions使用
TIP
- 可用补全列表
- 如果补全列表里没有你想要的补全,你可以 提交 issue
- 也可以 与 argc-completions 结合使用
以 git 补全为例
- 添加补全:
psc add git - 然后你就可以输入
git,按下Space(空格键) 和Tab键获取命令补全 - 关于
psc的命令用法,你只需要输入psc然后按下Space(空格键) 和Tab键触发补全,通过 补全提示信息 来了解
Tips
关于补全触发按键
- 模块默认使用
Tab键作为补全菜单触发按键 - 你可以使用
psc menu config trigger_key <key>去设置它
WARNING
- 如果需要指定
Set-PSReadLineKeyHandler -Key <key> -Function <MenuComplete|Complete> - 请放在
Import-Module PSCompletions之前
关于补全菜单
除了
PowerShell内置的补全菜单,PSCompletions模块还提供了一个更强大的补全菜单。- 配置:
psc menu config enable_menu 1(默认开启) - 可通过
psc menu config中的其他配置项控制它的相关行为
- 配置:
它只在 Windows 中可用,因为在 Linux/MacOS 中 PowerShell 没有实现相关底层方法
相关的按键绑定:
选用当前选中的补全项:
Enter(回车) /Space(空格)- 当只有一个补全项时,也可以使用
Tab
- 当只有一个补全项时,也可以使用
删除过滤字符:
Backspace(退格)退出补全菜单:
Esc/Ctrl + c- 当过滤区域没有字符时,也可以使用
Backspace(退格) 退出补全菜单
- 当过滤区域没有字符时,也可以使用
选择补全项:
选择上一项 选择下一项 UpDownLeftRightShift + TabTabCtrl + uCtrl + dCtrl + pCtrl + n
补全菜单的所有配置,你可以输入
psc menu然后按下Space(空格键) 和Tab键触发补全,通过 补全提示信息 来了解- 对于配置的值,
1表示true,0表示false(这适用于PSCompletions的所有配置) - 一些常见的菜单行为:
- 只有一个补全项时自动应用:
psc menu config enable_enter_when_single 1 - 使用前缀匹配进行过滤:
psc menu config enable_prefix_match_in_filter 1- 如果为
0,则使用模糊匹配,支持使用*和?通配符
- 如果为
- ...
- 只有一个补全项时自动应用:
- 对于配置的值,
关于菜单增强
- 配置:
psc menu config enable_menu_enhance 1(默认开启) PSCompletions对于补全有两种实现- 默认使用此实现
- 前提: 配置项
enable_menu和enable_menu_enhance同时为1
- 前提: 配置项
- 它不再需要循环为所有补全命令注册 Register-ArgumentCompleter,理论上加载速度会更快
- 它使用 TabExpansion2 全局管理补全,不局限于
psc add添加的补全- 路径补全:
cd/.\/..\/~\/... - 内置命令补全:
Get-*/Set-*/New-*/... - 通过 Register-ArgumentCompleter 注册的补全
- 与 argc-completions 结合使用
- 由 cli 或模块注册的补全
- ...
- 路径补全:
- 默认使用此实现
- 可以通过运行
psc menu config enable_menu_enhance 0来使用它 - 则模块的补全菜单只对通过
psc add添加的补全生效
- 可以通过运行
关于选项类补全
- 选项类补全,指的是像
-*的命令补全,例如git config --global中的--global - 你应该优先使用选项类补全
- 以
git补全为例,如果你想要输入git config user.name --global xxx - 你应该先补全
--global,然后再补全user.name,最后输入名称xxx
关于特殊符号
TIP
- 由于 Windows Terminal 的变更导致在补全菜单中无法正常显示 😄🤔😎,因此将更换它们。
- 相关的 issue: https://github.com/microsoft/terminal/issues/18242
- 变化如下:
😄=>~🤔=>?😎=>!
补全项后面的特殊符号用于在按下
Tab键之前提前感知是否有可用的补全项- 只有通过
psc add添加的补全中才存在 - 你可以使用
psc menu symbol <type> <symbol>来自定义 - 例如,你可以替换成空字符串来隐藏它们
psc menu symbol SpaceTab ""psc menu symbol OptionTab ""psc menu symbol WriteSpaceTab ""
- 只有通过
~,?,!: 如果出现多个,表示符合多个条件
关于补全提示信息
补全提示信息只是辅助,你也可以使用
psc menu config enable_tip 0全局禁用补全提示信息- 默认启用补全提示信息:
psc menu config enable_tip 1 - 也可以禁用特定补全的提示信息,如
gitpsc completion git enable_tip 0
- 默认启用补全提示信息:
补全提示信息一般由三部分组成: 用法(Usage) + 描述(Description) + 举例(Example)
txtU: install|add [-g|-u] [options] <app> 这里是命令的描述说明 (在 U: 和 E: 之间的内容都是命令描述) E: install xxx add -g xxx示例解析:
用法: 以
U:开头(Usage)- 命令名称:
install - 命令别名:
add - 必填参数:
<app>app是对必填参数的简要概括
- 可选参数:
-g-u [options]表示泛指一些选项类参数
- 命令名称:
描述: 在
U:和E:之间的内容举例: 以
E:开头(Example)
关于语言
Global language: 默认为当前的系统语言psc config language可以查看全局的语言配置psc config language zh-CN可以更改全局的语言配置
Completion language: 为指定的补全设置的语言- 例如:
psc completion git language en-US
- 例如:
Available language: 每一个补全的config.json文件中有一个language属性,它的值是一个可用的语言列表
确定语言
- 如果有
Completion language,优先使用它,没有则使用Global language - 确定最终使用的语言:
- 判断第一步确定的值是否存在于
Available language中 - 如果存在,则使用它
- 如果不存在,直接使用
Available language中的第一种语言(一般为en-US)
- 判断第一步确定的值是否存在于
关于路径补全
以
git为例,当输入git add,此时按下Space(空格键) 和Tab键,不会触发路径补全,只会触发模块提供的命令补全如果你希望触发路径补全,你需要输入内容,且内容符合正则
^(?:\.\.?|~)?(?:[/\\]).*比如:
- 输入
./或.\后按下Tab以获取 子目录 或 文件 的路径补全 - 输入
../或..\后按下Tab以获取 父级目录 或 文件 的路径补全 - 输入
/或\后按下Tab以获取 同级目录 的路径补全 - 更多的:
~//../../...
- 输入
因此,你应该输入
git add ./这样的命令再按下Tab键来获取路径补全
致谢
- PS-GuiCompletion: 模块的补全菜单受到它的启发