首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PowerShell别名在制表符完成期间看不到参数

PowerShell别名在制表符完成期间看不到参数
EN

Stack Overflow用户
提问于 2020-03-20 01:47:37
回答 1查看 108关注 0票数 2

我正在使用一个函数,它可以执行一些更改目录功能,然后将/ re-alias cd重定向到该函数。

代码语言:javascript
复制
function go ($jumpto, [switch]$DisableAliasCD, [switch]$ResetGoHash, [switch]$ResetCDHistory) {
    <stuff>
}

Set-Alias cc go
if (Test-Path Alias:cd) { Remove-Item -Path Alias:cd }    # Remove the default:   cd -> Set-Location
# Remove-Alias was not added until PS v6 so have to use Remove-Item with the Alias PSProvider
Set-Alias cd go -Option AllScope

检查每个gocccd的语法

代码语言:javascript
复制
get-command go -syntax
go [[-jumpto] <Object>] [-DisableAliasCD] [-ResetGoHash] [-ResetCDHistory]
get-command cc -syntax
go
get-command cd -syntax
go

这似乎是有道理的。

这是一个bug吗?或者,这是否与使用AllScope选项声明Set-Alias cd有关(我必须这样做,对于cd,如果没有它,Set-Alias将无法工作)

EN

回答 1

Stack Overflow用户

发布于 2020-03-21 00:51:40

您似乎遇到了错误,在PowerShell 7.0中仍然存在

大多数(Windows PowerShell) /少数(PowerShell核心6+)内置别名是使用AllScope选项定义的。

(您可以使用以下命令来发现它们

powershell -NoProfile { Get-Alias | ? options -like '*AllScope*' }

/

pwsh -NoProfile { Get-Alias | ? options -like '*AllScope*' })。

在调用方面,重新定义任何别名都可以正常工作。

然而,就 tab completed ,redefined tab ones malfunction而言,正如您所描述的:原始别名定义的参数仍在完成。

代码语言:javascript
复制
# Sample function
function foo { param($bar) "[$bar]" }

# Remove the built-in AllScope `cd` alias and redefine it to execute `foo`.
Remove-Item alias:cd; Set-Alias cd foo

# Make sure that the redefinition works:
cd -bar baz # OK: prints '[baz]'

# Try to tab-complete:
cd -b<tab> # NO COMPLETION instead of the expected '-bar'

# Try a parameter from `cd`'s *original* definition, `Set-Location`:
cd -li<tab> # UNEXPECTEDLY EXPANDS TO '-LiteralPath'

已在this GitHub issue中报告了此问题行为。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60762540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档