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?
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-PSReadLineKeyHandler
para verificar o Deleteque está atribuído no momento e, em seguida,procurado DeleteChar
na PSReadLine
base de código, para ver a definição dessa função e procurar algo semelhante. eu encontreiExcluirCharOrExit, e executei Set-PSReadLineKeyHandler -Key Delete -Function DeleteCharOrExit
o 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.