PowerShell 实现类似 Bash 的补全行为

1. 修改 Tab 补全行为(最常用)

在 PowerShell 配置文件(通常是 $PROFILE)中添加:

powershell 复制代码
# 查看配置文件路径,如果文件不存在,手动创建即可
echo $PROFILE
# 设置 Tab 补全为类似 bash 的菜单选择模式
Set-PSReadLineKeyHandler -Key Tab -Function MenuComplete

这样按 Tab 时会循环显示可能的选项,而不是自动填充。如此设置后,在 PowerShell 中使用 Tab 补全时按 Backspace 会发出"滴"声,这是因为 PSReadLine 模块的特殊处理逻辑。

  1. 补全模式激活状态:当 Tab 补全显示菜单时,你处于"选择模式"
  2. 键盘焦点:焦点仍在输入行,而不是在补全菜单上
  3. 默认行为:PSReadLine 认为你在尝试编辑已提交的补全
  4. 避免声音出现(按 Escape 键):在 Tab 补全显示时,按 Escape 退出补全模式,然后再按 Backspace 就不会有声音了
  5. 彻底关闭补全提示音(修改 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 一样显示可能的选项,而不是直接自动填充了。

相关推荐
学习论之费曼学习法15 小时前
无人值守AI内容矩阵实战(10):Windows 上让 Python 进程 7×24 活着
人工智能·windows·python·矩阵·powershell·进程守护
SEO_juper18 小时前
Bash 交叉验证 robots.txt 和 sitemap:两个文件自相矛盾,页面永远收录不了
开发语言·python·node.js·json·bash
无足鸟ICT1 天前
【RHCA+】type命令(判断命令类型)
linux·ssh·bash
JoePotter2 天前
从零搭建华为云 EVS 每日自动快照:hcloud + PowerShell + 邮件报告实战
华为云·自动化运维·powershell·evs·koocli·快照备份·mailozaurr
SEO_juper3 天前
Node.js 重定向链检测工具:301 跳了几跳、有没有成环,一次看清
xml·开发语言·python·node.js·json·bash
云计算练习生4 天前
什么是 Bash?Linux 默认 Shell 的核心功能
linux·操作系统·bash·shell·命令解释器
JoePotter6 天前
Restic 备份工具使用指南(Windows Server 2019 适配版)
powershell·数据备份·windows server·运维自动化·restic
qetfw6 天前
Bash 函数与流程控制:read、if、for、case 验证
linux·前端·javascript·bash
qetfw7 天前
Bash 基础:脚本执行、引号与命令替换验证
linux·开发语言·chrome·bash
qetfw7 天前
Bash 变量:export、位置参数与默认值展开验证
linux·开发语言·chrome·bash