如何在PowerShell选项卡完成中隐藏文件扩展名?

姆雷查(Jmreicha)

如何更改默认的Powershell CLI行为以忽略$Env:Path环境变量中存在的文件类型的文件扩展名

如果我只是键入python,它将正常工作,并按我期望的那样将我放入Python解释器中,因为扩展名是环境变量的一部分。

问题是,当我pyth在PowerShell中键入并按Tab键完成时,它总是会附加.exe我只希望它完成命令的第一部分而没有扩展名。

这可能吗?也许是剧本?

您可以使用自己的选项卡来代替标准的制表符完成功能。在最新版本的PowerShell中,该功能为TabExpansion2对其的修改似乎可以完成您想要的操作:

Function TabExpansion2 {
    [CmdletBinding(DefaultParameterSetName = 'ScriptInputSet')]
    Param(
        [Parameter(ParameterSetName = 'ScriptInputSet', Mandatory = $true, Position = 0)]
        [string] $inputScript,

        [Parameter(ParameterSetName = 'ScriptInputSet', Mandatory = $true, Position = 1)]
        [int] $cursorColumn,

        [Parameter(ParameterSetName = 'AstInputSet', Mandatory = $true, Position = 0)]
        [System.Management.Automation.Language.Ast] $ast,

        [Parameter(ParameterSetName = 'AstInputSet', Mandatory = $true, Position = 1)]
        [System.Management.Automation.Language.Token[]] $tokens,

        [Parameter(ParameterSetName = 'AstInputSet', Mandatory = $true, Position = 2)]
        [System.Management.Automation.Language.IScriptPosition] $positionOfCursor,

        [Parameter(ParameterSetName = 'ScriptInputSet', Position = 2)]
        [Parameter(ParameterSetName = 'AstInputSet', Position = 3)]
        [Hashtable] $options = $null
    )

    End
    {
        $source = $null
        if ($psCmdlet.ParameterSetName -eq 'ScriptInputSet')
        {
            $source = [System.Management.Automation.CommandCompletion]::CompleteInput(
                <#inputScript#>  $inputScript,
                <#cursorColumn#> $cursorColumn,
                <#options#>      $options)
        }
        else
        {
            $source = [System.Management.Automation.CommandCompletion]::CompleteInput(
                <#ast#>              $ast,
                <#tokens#>           $tokens,
                <#positionOfCursor#> $positionOfCursor,
                <#options#>          $options)
        }
        $field = [System.Management.Automation.CompletionResult].GetField('completionText', 'Instance, NonPublic')
        $source.CompletionMatches | % {
            If ($_.ResultType -eq 'Command' -and [io.file]::Exists($_.ToolTip)) {
                $field.SetValue($_, [io.path]::GetFileNameWithoutExtension($_.CompletionText))
            }
        }
        Return $source
    }    
}

我在以开头的那一行之后添加了几行$field它会通过默认的制表符完成选项,并使扩展名与您的扩展名失去联系PATH我使用以下命令得到了原始源代码:

(Get-Command 'TabExpansion2').ScriptBlock

如果将新函数放在.ps1文件中并点执行该脚本(例如. .\tabnoext.ps1),它将成为当前会话的制表符完成处理程序。要在每次打开PowerShell窗口时加载它,只需将所有代码粘贴到PowerShell配置文件脚本中

如果您使用的是旧版PowerShell,则需要覆盖该TabExpansion函数,该函数仅返回字符串数组。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用.htaccess隐藏文件扩展名+限制访问

如何在Ionic Framework中隐藏选项卡

如何在QTabWidget Qt中扩展选项卡

在Visual Studio代码中,如何隐藏文件选项卡下的文件路径?

当前选项卡的临时存储仅在扩展名中

如何在QFileSystemModel上隐藏文件扩展名

如何在单独的选项卡中打开文件

使用终端隐藏文件扩展名

设置“隐藏文件扩展名”的脚本

如何使bash停止选项卡自动完成隐藏目录

如何在命令提示符/ dir输出中隐藏文件扩展名?

从Firefox扩展名重定向当前选项卡

如何在Samba共享中按扩展名隐藏文件?

如何在PCManFM中隐藏某个扩展名的文件

如何在Acrobat Reader中隐藏“工具”选项卡?

仅在桌面上隐藏文件扩展名

避免Sublime 3隐藏文件选项卡?

NPP一汽:如何通过文件扩展名隐藏文件?

如何从扩展名获取当前chrome选项卡的AST?

如何在选项卡布局中隐藏选项卡

按扩展名过滤每个应用程序的选项卡完成

如何从PowerShell中的扩展名类型数组中提取/匹配文件类型扩展名

隐藏文件扩展名时识别文件类型

如何在特定选项卡、选项卡式活动、Kotlin 中隐藏菜单项

如何在 Shell TabBar 选项卡中隐藏顶部导航选项卡

完成没有 root 的文件名,只有扩展名(隐藏文件)

如何在 PowerShell 中从 Get-Help(不仅仅是选项卡完成)中隐藏参数?

如何在 chome 扩展中的选项卡之间发送选项卡数据?

用于隐藏文件扩展名和更改文件名的 RewriteRule