Durchgeführte Forschung:

Durchgeführte Forschung:

In PowerShell 6.0.1 ist das Standardverhalten so, dass, wenn ich drücke, Deletewährend sich mein Cursor nicht am Zeilenende befindet, das Zeichen über dem Cursor wie erwartet gelöscht wird. Sobald ich jedoch das letzte Zeichen in der Zeile lösche, wird der Cursor eine Position zurückbewegt. Ich finde das sehr ärgerlich, weil ich nicht mehr einfach gedrückt halten kann, um Deletezu löschen, bis das Zeilenende erreicht ist. Gibt es eine Möglichkeit, dies so zu ändern, dass es sich genauso verhält wie beim Drücken EndDelete– also nichts passiert?

Löschtaste

Durchgeführte Forschung:

ich sahPowerShell-Signalton bei der Rücktaste deaktivieren, und dachte, vielleicht gibt es auch eine Einstellung für das, was ich will, aber nach dem Lesendie Dokumentation zum PSReadLine-Cmdlet, ich habe gesehen, dass es das nicht gibt.

Ich habe mir dann die Tastenkombinationen angesehen und nachgesehen, Get-PSReadLineKeyHandlerwas Deletederzeit zugewiesen ist, und danngesucht DeleteCharin der PSReadLineCodebasis, um die Definition dieser Funktion zu sehen und nach etwas Ähnlichem zu suchen. Ich fandLöschenCharOrExit, und ausgeführt Set-PSReadLineKeyHandler -Key Delete -Function DeleteCharOrExit, wodurch der Löschvorgang nicht beendet wird – wie ich aufgrund des unklaren Dokumentkommentars annahm –, sondern der PowerShell-Konsolenprozess beendet wird …

Ich fand auchhttps://github.com/lzybkr/PSReadLine/issues/486, was darauf hindeutet, dass das Problem behoben wurde, aber offensichtlich nicht ...

Vielleicht muss ich einen benutzerdefinierten Tastenkombinationscode einfügen, wiehttps://github.com/lzybkr/PSReadLine/blob/46d232c22ac3f24a95e32d773c594ad306dfc327/PSReadLine/SamplePSReadLineProfile.ps1#L257-L291?

Antwort1

Es stellt sich heraus, dass PowerShell Core 6.0.1 mit Version 1.2 des PSReadLine-Moduls ausgeliefert wird, wie aus ersichtlich ist Get-Module PSReadLine, aber der Fix war inhttps://github.com/lzybkr/PSReadLine/releases/tag/v2.0.0-beta1. Da in dieser Pressemitteilung steht:

Dies ist die erste Version des Repository, die sowohl PowerShell Core (alle Plattformen) als auch Windows PowerShell unterstützt.

Ich war davon ausgegangen, dass ich diese Version hatte und hatte ursprünglich nicht nachgesehen.

Um es mit dieser Version zum Laufen zu bringen, können Sie Folgendes verwenden:

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)
        }
    }

(idealerweise indem Sie es in der entsprechenden Profildatei platzieren, sodass es beim Start von PowerShell automatisch ausgeführt wird.)

Dies kann auch durch ein Upgrade des PSReadLine-Moduls behoben werden. Folgen Sie dazu den Anweisungen unterhttps://github.com/lzybkr/PSReadLine/issues/612, welche sind:

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

Vermutlich wird eine zukünftige Version von PowerShell Core eine korrigierte Version des PSReadLine-Moduls enthalten.

verwandte Informationen