Pesquisa realizada:

Pesquisa realizada:

No PowerShell 6.0.1, o comportamento pronto para uso é que, quando pressiono Deleteenquanto meu cursor não está no final da linha, ele exclui o caractere acima do cursor, conforme esperado. No entanto, depois que eu excluo o último caractere da linha, ele move o cursor uma posição para trás. Acho isso muito chato, pois não consigo mais segurar Deletepara deletar até o final da linha. Existe uma maneira de alterá-lo para que ele se comporte da mesma forma que quando pressiono EndDelete- ou seja, não faça nada?

excluir chave

Pesquisa realizada:

Eu viDesative o bipe do PowerShell no backspace, e pensei que talvez também exista uma configuração para o que eu quero, mas depois de leros documentos no cmdlet PSReadLine, vi que não tem.

Em seguida, examinei os atalhos de teclado e corri Get-PSReadLineKeyHandlerpara verificar o Deleteque está atribuído no momento e, em seguida,procurado DeleteCharna PSReadLinebase de código, para ver a definição dessa função e procurar algo semelhante. eu encontreiExcluirCharOrExit, e executei Set-PSReadLineKeyHandler -Key Delete -Function DeleteCharOrExito que não sai do processo de "exclusão" - como presumi no comentário pouco claro do documento - ele sai do processo do console do PowerShell ...

Eu também encontreihttps://github.com/lzybkr/PSReadLine/issues/486, o que sugere que foi corrigido, mas claramente não...

Talvez eu precise injetar algum código de atalho personalizado comohttps://github.com/lzybkr/PSReadLine/blob/46d232c22ac3f24a95e32d773c594ad306dfc327/PSReadLine/SamplePSReadLineProfile.ps1#L257-L291?

Responder1

Acontece que o PowerShell Core 6.0.1 vem com a versão 1.2 do módulo PSReadLine, conforme visto por Get-Module PSReadLine, mas a correção estava emhttps://github.com/lzybkr/PSReadLine/releases/tag/v2.0.0-beta1. Vendo como esse comunicado diz:

Esta é a primeira versão do repositório que oferece suporte ao PowerShell Core (todas as plataformas) e ao Windows PowerShell.

Presumi que tinha essa versão e não verifiquei originalmente.

Para fazê-lo funcionar com essa versão, pode-se usar:

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

(de preferência, colocando-o no arquivo de perfil apropriado para que seja executado automaticamente quando o PowerShell for iniciado.)

Isso também pode ser corrigido atualizando o módulo PSReadLine, usando as instruções emhttps://github.com/lzybkr/PSReadLine/issues/612, que são:

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

Presumivelmente, uma versão futura do PowerShell Core incluirá uma versão fixa do módulo PSReadLine.

informação relacionada