Проведенные исследования:

Проведенные исследования:

В PowerShell 6.0.1 поведение «из коробки» таково, что когда я нажимаю, Deleteкогда моя каретка не находится в конце строки, она удаляет символ над кареткой, как и ожидалось. Однако, как только я удаляю последний символ в строке, она перемещает каретку назад на одну позицию. Я нахожу это очень раздражающим, потому что я больше не могу просто удерживать Deleteдля удаления до конца строки. Есть ли способ изменить это так, чтобы это вело себя так же, как при нажатии EndDelete, т. е. ничего не делало?

удалить ключ

Проведенные исследования:

Я виделОтключить звуковой сигнал PowerShell при нажатии клавиши Backspace, и подумал, что, возможно, есть также настройка для того, что я хочу, но после прочтениядокументация по командлету PSReadLine, я видел, что нет.

Затем я посмотрел на сочетания клавиш и побежал Get-PSReadLineKeyHandlerпроверять, что Deleteв данный момент назначено, а затемискали DeleteCharв PSReadLineкодовой базе, чтобы увидеть определение этой функции и поискать что-то похожее. Я нашелDeleteCharOrExitи запустил, 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.

Связанный контент