开展的研究:

开展的研究:

在 PowerShell 6.0.1 中,开箱即用的行为是,当我按下插入Delete符号不在行尾时,它会按预期删除插入符号上方的字符。但是,一旦我删除行上的最后一个字符,它就会将插入符号移回一个位置。我觉得这很烦人,因为我不能再按住Delete删除键直到行尾。有没有办法改变它,使它的行为与我按下时相同EndDelete- 即它什么也不做?

删除键

开展的研究:

我看见禁用退格键上的 PowerShell 蜂鸣声,我想也许也有我想要的设置,但读完之后PSReadLine cmdlet 上的文档,我一看,没有。

然后我查看了按键绑定,并Get-PSReadLineKeyHandler检查了Delete当前分配给了什么,然后DeleteCharPSReadLine代码库中搜索 ,查看该函数的定义,并浏览类似内容。我发现删除字符或退出,并且运行时Set-PSReadLineKeyHandler -Key Delete -Function DeleteCharOrExit不会退出“删除”过程 - 正如我从不清楚的文档注释中所假设的那样 - 它退出 PowerShell 控制台过程......

我还发现https://github.com/lzybkr/PSReadLine/issues/486,这表明它已被修复,但显然不是......

也许我需要注入一些自定义键绑定代码,例如https://github.com/lzybkr/PSReadLine/blob/46d232c22ac3f24a95e32d773c594ad306dfc327/PSReadLine/SamplePSReadLineProfile.ps1#L257-L291

答案1

事实证明,PowerShell Core 6.0.1 附带了 PSReadLine 模块 1.2 版本Get-Module PSReadLine,但修复是在https://github.com/lzybkr/PSReadLine/releases/tag/v2.0.0-beta1. 鉴于该新闻稿称:

这是 repo 中第一个支持 PowerShell Core(所有平台)和 Windows PowerShell 的版本。

我以为我有那个版本并且最初没有检查。

为了使其与该版本一起工作,可以使用:

Set-PSReadLineKeyHandler -Key Delete `
                             -BriefDescription Delete `
                             -LongDescription "Delete character over the caret" `
                             -ScriptBlock {
        param($key, $arg)

        $line = $null
        $cursor = $null
        [Microsoft.PowerShell.PSConsoleReadLine]::GetBufferState([ref]$line, [ref]$cursor)

        if ($cursor -lt $line.Length)
        {
            [Microsoft.PowerShell.PSConsoleReadLine]::Delete($cursor, 1)
        }
    }

(最好将其放在适当的配置文件中,以便它在 PowerShell 启动时自动运行。)

也可以通过升级 PSReadLine 模块来解决这个问题,具体说明如下:https://github.com/lzybkr/PSReadLine/issues/612, 哪个是:

Install-Module PSReadLine -RequiredVersion 2.0.0-beta1 -AllowPrerelease -Scope CurrentUser -SkipPublisherCheck

据推测,PowerShell Core 的未来版本将包含 PSReadLine 模块的修复版本。

相关内容