1. 修改 Tab 补全行为(最常用)
在 PowerShell 配置文件(通常是 $PROFILE)中添加:
powershell
# 查看配置文件路径,如果文件不存在,手动创建即可
echo $PROFILE
# 设置 Tab 补全为类似 bash 的菜单选择模式
Set-PSReadLineKeyHandler -Key Tab -Function MenuComplete
这样按 Tab 时会循环显示可能的选项,而不是自动填充。如此设置后,在 PowerShell 中使用 Tab 补全时按 Backspace 会发出"滴"声,这是因为 PSReadLine 模块的特殊处理逻辑。
- 补全模式激活状态:当 Tab 补全显示菜单时,你处于"选择模式"
- 键盘焦点:焦点仍在输入行,而不是在补全菜单上
- 默认行为:PSReadLine 认为你在尝试编辑已提交的补全
- 避免声音出现(按 Escape 键):在 Tab 补全显示时,按 Escape 退出补全模式,然后再按 Backspace 就不会有声音了
- 彻底关闭补全提示音(修改 PSReadLine 配置):在配置文件中添加如下内容
powershell
# 禁用补全警告声
Set-PSReadLineOption -BellStyle None
# 或者设置为视觉提示
Set-PSReadLineOption -BellStyle Visual
2. 使用 PSReadLine 的其他补全模式(Bash风格)
powershell
# 完全菜单模式(bash风格)
Set-PSReadLineKeyHandler -Key Tab -Function Complete
3. 结合使用不同的按键
可以设置不同的按键触发不同补全方式:
powershell
# Tab - 菜单补全
Set-PSReadLineKeyHandler -Key Tab -Function MenuComplete
# Ctrl+Space - 自动补全(原Tab行为)
Set-PSReadLineKeyHandler -Key Ctrl+Space -Function Complete
4. 安装 PSReadLine 模块
确保已安装 PSReadLine 模块(PowerShell 5.1+ 通常已包含):
powershell
Install-Module -Name PSReadLine -Force
5. 创建配置文件
如果没有配置文件,先创建:
powershell
# 检查是否存在配置文件
if (!(Test-Path $PROFILE)) {
New-Item -ItemType File -Path $PROFILE -Force
}
# 编辑配置文件
notepad $PROFILE
6. 完整配置示例
powershell
# PowerShell 配置文件示例
Import-Module PSReadLine
# Tab 菜单补全(类似 bash)
Set-PSReadLineKeyHandler -Key Tab -Function MenuComplete
# 保持其他有用的功能
Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward
Set-PSReadLineKeyHandler -Key DownArrow -Function HistorySearchForward
# 可选:启用预测性输入(PowerShell 7+)
Set-PSReadLineOption -PredictionSource History
7. 即时测试(不修改配置)
在会话中临时测试:
powershell
Set-PSReadLineKeyHandler -Key Tab -Function MenuComplete
对比总结
| 补全模式 | 按键 | 行为 |
|---|---|---|
| MenuComplete | Tab | 类似 bash,循环显示选项 |
| Complete | Tab(默认) | PowerShell 默认,自动填充 |
| ListPossible | Ctrl+Space | 显示所有可能的补全 |
对于 PowerShell 7+
PowerShell 7 默认已包含 PSReadLine,可以直接配置。还支持更多补全选项:
powershell
# 启用更丰富的补全
Set-PSReadLineOption -EditMode Emacs
Set-PSReadLineOption -PredictionSource HistoryAndPlugin
修改后需要重启 PowerShell 或重新加载配置文件:
powershell
. $PROFILE
这样配置后,PowerShell 的 Tab 补全就会像 bash 一样显示可能的选项,而不是直接自动填充了。