進行的研究:

進行的研究:

在 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 附帶了 1.2 版的 PSReadLine 模組,如 所示Get-Module PSReadLine,但修復已在https://github.com/lzybkr/PSReadLine/releases/tag/v2.0.0-beta1。正如該新聞稿所說:

這是儲存庫中支援 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 模組的固定版本。

相關內容