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 带来更出色、更简便的 Tab 补全体验。
- 内置的补全库
- 更强大的补全菜单
- 支持多种语言: en-US, zh-CN 等
- 根据命令历史记录动态排序补全项
- 与其他工具协作
演示

新的变化
请查阅 更新日志
常见问题
请查阅 常见问题
贡献
请查阅 贡献指南
安装
安装模块
- powershell
Install-Module PSCompletions - powershell
Install-PSResource PSCompletions
导入模块
powershellImport-Module PSCompletions
TIP
- 如果使用了
. $Profile,请运行psc以重载模块的按键绑定及数据 - 参考: Source profile
使用
使用 内置的补全库,以
git补全为例- 使用
psc add git添加补全 - 输入
git,按下Space(空格键) 和Tab键获取命令补全
- 使用
使用官方补全或其他的补全库
如果存在官方补全,可以使用类似的命令
powershellxxx completion powershell | Out-String | Invoke-Expression使用其他的补全库: argc-completions, Carapace
更多详情,参考 菜单增强
使用 PSFzf 作为补全菜单,参考 与 PSFzf 结合使用
Tips
关于补全菜单
除了
PowerShell内置的补全菜单,PSCompletions模块还提供了一个更强大的补全菜单。- 配置:
psc menu config enable_menu 1(默认开启) - 相关的按键绑定可运行
psc查看
- 配置:
它只在 Windows 中可用,因为在 Linux/MacOS 中 PowerShell 没有实现相关底层方法
补全菜单的所有配置,你可以输入
psc menu然后按下Space(空格键) 和Tab键触发补全,通过 补全提示信息 来了解- 对于配置的值,
1表示true,0表示false(这适用于PSCompletions的所有配置) - 常见的菜单行为:
- 只有一个补全项时自动应用:
psc menu config enable_enter_when_single 1 - ...
- 只有一个补全项时自动应用:
- 对于配置的值,
关于菜单增强
- 配置:
psc menu config enable_menu_enhance 1(默认开启) PSCompletions对于补全有两种实现- 默认使用此实现
- 前提: 配置项
enable_menu和enable_menu_enhance同时为1 - 它使用
Set-PSReadLineKeyHandler -Key <Key> -ScriptBlock { ... }<Key>是psc menu config trigger_key的值 (默认:Tab)
- 因此,你不能再使用
Set-PSReadLineKeyHandler -Key Tab -ScriptBlock { ... }
- 前提: 配置项
- 它使用 TabExpansion2 全局管理补全,不局限于
psc add添加的补全- 路径补全:
cd/.\/..\/~\/... - 内置命令补全:
Get-*/Set-*/New-*/... - 通过 Register-ArgumentCompleter 注册的补全
- 由 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
关于路径补全
以
git为例,当输入git add,此时按下Space(空格键) 和Tab键,不会触发路径补全,只会触发模块提供的命令补全如果你希望触发路径补全,你需要输入内容,且内容符合正则
^(?:\.\.?|~)?(?:[/\\]).*比如:
- 输入
./或.\后按下Tab以获取 子目录 或 文件 的路径补全 - 输入
../或..\后按下Tab以获取 父级目录 或 文件 的路径补全 - 输入
/或\后按下Tab以获取 同级目录 的路径补全 - 更多的:
~/,../../, ...
- 输入
因此,你应该输入
git add ./这样的命令再按下Tab键来获取路径补全
关于特殊符号
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 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)
关于语言
TIP
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
致谢
- PSReadLine: PowerShell 的一个内置模块,增强命令行编辑体验
- PSCompletions 使用了
Set-PSReadLineKeyHandler和Get-PSReadLineOption
- PSCompletions 使用了
- PS-GuiCompletion: 适用于 PowerShell 的 GUI 风格的制表符补全菜单
- PSCompletions 的 补全菜单 受到了它的启发