実施された研究:

実施された研究:

DeletePowerShell 6.0.1 では、キャレットが行末にないときに を押すと、予想どおりキャレットの上の文字が削除されます。ただし、行の最後の文字を削除すると、キャレットが 1 つ前の位置に戻りますDelete。行末まで削除キーを押し続けることができなくなったため、これは非常に煩わしいと思います。 を押したときと同じように動作するように、つまり何もしないように変更する方法はありますかEndDelete?

削除キー

実施された研究:

私が見たバックスペース時の PowerShell ビープ音を無効にする、そして私が望むもののための設定もあるかもしれないと思ったが、読んだ後PSReadLine コマンドレットのドキュメント、私はそれがないことを見ました。

それからキーバインディングを調べて、現在Get-PSReadLineKeyHandler何が割り当てられているか確認しDeleteコードベースDeleteCharで検索 PSReadLine、その関数の定義を見て、似たようなものを探しました。文字を削除または終了、実行しました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そのリリースにはこう書かれています:

これは、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 モジュールの修正バージョンが含まれる予定です。

関連情報