如何让PowerShell自动补全不插入函数的左括号?
解决PowerShell补全.NET方法名时自动插入左括号的问题
当补全.NET静态方法名(比如输入[Io.File]::A按Tab)时,PowerShell默认会自动添加左括号,要禁用这个行为,有两种方案:
方案一:全局禁用括号自动补全
这个方法会关闭所有场景下的括号自动补全(包括手动输入(时自动补全)),设置简单:
临时生效(当前会话)
运行以下命令:
Set-PSReadLineOption -AutoCloseBrackets $false
永久生效
- 查看PowerShell配置文件路径:
$PROFILE
- 用文本编辑器打开该文件,添加上述命令,保存后重启PowerShell即可。
方案二:仅针对.NET方法补全禁用左括号
如果想保留其他括号的自动补全,只修改.NET方法的补全行为,可以自定义参数补全器:
将以下代码添加到PowerShell配置文件中:
Register-ArgumentCompleter -Native -CommandName '*' -ScriptBlock { param($wordToComplete, $commandAst, $cursorPosition) $completions = [System.Management.Automation.CompletionResult[]]@() $originalCompletions = [Microsoft.PowerShell.PSConsoleReadLine]::GetCompletions($wordToComplete, $commandAst, $cursorPosition) foreach ($completion in $originalCompletions) { if ($completion.CompletionText -match '::\w+\($') { $newText = $completion.CompletionText -replace '\($', '' $completions += [System.Management.Automation.CompletionResult]::new($newText, $newText, $completion.ResultType, $completion.ToolTip) } else { $completions += $completion } } return $completions }
保存后重启PowerShell,补全.NET方法名时就不会自动插入左括号了。
内容的提问来源于stack exchange,提问作者blueorchid3
相关产品推荐
相关产品推荐

