Como evitar que a tecla delete funcione como backspace

5

No PowerShell 6.0.1, o comportamento pronto para uso é que, quando pressiono Excluir enquanto meu cursor não está no final da linha, ele exclui o caractere acima do cursor. , como esperado. No entanto, depois de excluir o último caractere na linha, ele move o cursor de volta para uma posição. Eu acho isso muito chato, porque eu não posso mais apenas segurar Delete para deletar até o final da linha. Existe uma maneira de alterá-lo para que ele se comporte da mesma forma que quando pressiono End Excluir - ou seja, ele não faz nada?

Pesquisarealizada:

Euvi Desativar o bipe do PowerShell no backspace e pensei que talvez haja também uma configuração para o que eu quero, mas depois lendo os documentos no cmdlet PSReadLine , vi que não há.

Em seguida, examinei atalhos de teclado e executei Get-PSReadLineKeyHandler para verificar o que Excluir está atualmente atribuído e, em seguida, DeleteChar na base de código PSReadLine , para ver a definição dessa função e procurar por algo semelhante. Eu encontrei DeleteCharOrExit , e executei o Set-PSReadLineKeyHandler -Key Delete -Function DeleteCharOrExit que não saiu do " delete "process - como assumi a partir do comentário de documento não claro - ele sai do processo do console do PowerShell ...

Também encontrei o link , que sugere que foi corrigido, mas claramente não ...

Talvez eu precise injetar um código de atalho personalizado como link ?

    
por Keith Hall 05.03.2018 / 19:39

1 resposta

5

O PowerShell Core 6.0.1 é fornecido com a versão 1.2 do módulo PSReadLine, como visto por Get-Module PSReadLine , mas a correção estava em link . Vendo como esse release diz:

This is the first release from the repo supporting both PowerShell Core (all platforms) and Windows PowerShell.

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

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

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

Isso também pode ser corrigido com a atualização do módulo PSReadLine, usando as instruções no link , 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.

    
por 06.03.2018 / 15:59