Este módulo substitui a experiência de edição de linha de comando do PowerShell para versões 3 e superiores. Ele fornece:
A experiência "pronta para uso" deve ser muito familiar para os usuários do PowerShell - não deve haver necessidade de aprender novos toques de tecla.
Alguns bons recursos sobre PSReadLine
:
PSReadLine
.PSReadLine
.PSReadLine
de acordo com sua preferência. Existem várias maneiras de instalar PSReadLine
.
Você precisará da versão 1.6.0
ou superior do PowerShellGet
para instalar a versão de pré-lançamento mais recente do PSReadLine
.
O Windows PowerShell 5.1 fornece uma versão mais antiga do PowerShellGet
que não oferece suporte à instalação de módulos de pré-lançamento, portanto, os usuários do Windows PowerShell precisam instalar o PowerShellGet
mais recente (se ainda não) executando os seguintes comandos em uma sessão elevada do Windows PowerShell:
Install-Module - Name PowerShellGet - Force
Exit
Depois de instalar PowerShellGet
, você pode obter a versão de pré-lançamento mais recente do PSReadLine
executando
Install-Module PSReadLine - AllowPrerelease - Force
Se você deseja apenas obter a versão estável mais recente, execute:
Install-Module PSReadLine
[!NOTE] As versões de pré-lançamento terão recursos mais recentes e correções de bugs, mas também poderão introduzir novos problemas.
Se você estiver usando o Windows PowerShell no Windows 10 ou o PowerShell 6+, PSReadLine
já estará instalado. O Windows PowerShell no Windows 10 mais recente possui a versão 2.0.0-beta2
do PSReadLine
. As versões do PowerShell 6+ têm as versões de pré-lançamento mais recentes do PSReadLine
.
Com a versão prévia do PowerShellGet para PowerShell V3/V4, os downloads do GitHub foram preteridos. Não pretendemos atualizar versões no GitHub e poderemos remover totalmente a versão do GitHub em algum momento.
Se você estiver usando as versões do Windows PowerShell V5 ou V5.1, ou usando as versões do PowerShell 6+, você está pronto e pode pular esta seção.
Caso contrário, você precisará editar seu perfil para importar o módulo. Existem dois arquivos de perfil comumente usados e as instruções são ligeiramente diferentes para cada um. O arquivo C:Users[User]DocumentsWindowsPowerShellprofile.ps1
é usado para todos os hosts (por exemplo, o ISE
e powershell.exe
). Se você já possui esse arquivo, adicione o seguinte:
if ( $host .Name -eq ' ConsoleHost ' )
{
Import-Module PSReadLine
}
Alternativamente, o arquivo C:Users[User]DocumentsWindowsPowerShellMicrosoft.PowerShell_profile.ps1
é apenas para powershell.exe
. Usando este arquivo, você pode simplesmente adicionar:
Import-Module PSReadLine
Em ambos os casos, você pode criar o arquivo apropriado se ainda não tiver um.
Ao executar um dos comandos sugeridos abaixo, certifique-se de sair de todas as instâncias de powershell.exe
, pwsh.exe
ou pwsh
, incluindo aquelas abertas em terminais VSCode
.
Então, para garantir que PSReadLine
não esteja carregado:
cmd.exe
, powershell_ise.exe
ou através do atalho Win+R
;bash
ou zsh
). Se você estiver usando a versão do PSReadLine
fornecida com o Windows PowerShell, será necessário executar: powershell -noprofile -command "Install-Module PSReadLine -Force -SkipPublisherCheck -AllowPrerelease"
. Nota: você precisará certificar-se de que o PowershellGet esteja atualizado antes de executar este comando.
Se você estiver usando a versão do PSReadLine
fornecida com as versões do PowerShell 6+, será necessário executar: <path-to-pwsh-executable> -noprofile -command "Install-Module PSReadLine -Force -SkipPublisherCheck -AllowPrerelease"
.
Se você mesmo instalou PSReadLine
a partir da Galeria do PowerShell, pode simplesmente executar: powershell -noprofile -command "Update-Module PSReadLine -AllowPrerelease"
ou <path-to-pwsh-executable> -noprofile -command "Update-Module PSReadLine -AllowPrerelease"
, dependendo da versão do PowerShell que você está usando.
Se você receber um erro como:
Remove-Item : Cannot remove item
C:Users{yourName}DocumentsWindowsPowerShellModulesPSReadLineMicrosoft.PowerShell.PSReadLine.dll: Access to the path
'C:Users{yourName}DocumentsWindowsPowerShellModulesPSReadLineMicrosoft.PowerShell.PSReadLine.dll' is denied.
ou um aviso como:
WARNING: The version '2.0.0' of module 'PSReadLine' is currently in use. Retry the operation after closing the applications.
Então você não eliminou todos os processos que carregaram PSReadLine
.
Para começar a usar, basta importar o módulo:
Import-Module PSReadLine
Para usar combinações de teclas do Emacs, você pode usar:
Set-PSReadLineOption - EditMode Emacs
Para visualizar as combinações de teclas atuais:
Get-PSReadLineKeyHandler
Existem muitas opções de configuração, consulte as opções em Set-PSReadLineOption
. PSReadLine
tem ajuda para seus cmdlets, bem como um tópico about_PSReadLine
- consulte esses tópicos para obter ajuda mais detalhada.
Para definir seus próprios atalhos de teclado personalizados, use o cmdlet Set-PSReadLineKeyHandler
. Por exemplo, para uma melhor experiência histórica, tente:
Set-PSReadLineKeyHandler - Key UpArrow - Function HistorySearchBackward
Set-PSReadLineKeyHandler - Key DownArrow - Function HistorySearchForward
Com essas ligações, a seta para cima/seta para baixo funcionará como PowerShell/cmd se a linha de comando atual estiver em branco. Porém, se você inseriu algum texto, ele pesquisará no histórico os comandos que começam com o texto inserido atualmente.
Para habilitar a conclusão do estilo bash sem usar o modo Emacs, você pode usar:
Set-PSReadLineKeyHandler - Key Tab - Function Complete
Aqui está um exemplo mais interessante do que é possível:
Set-PSReadLineKeyHandler - Chord ' " ' , " ' " `
- BriefDescription SmartInsertQuote `
- LongDescription " Insert paired quotes if not already on a quote " `
- ScriptBlock {
param ( $key , $arg )
$line = $null
$cursor = $null
[ Microsoft.PowerShell.PSConsoleReadLine ]::GetBufferState([ ref ] $line , [ ref ] $cursor )
if ( $line .Length -gt $cursor -and $line [ $cursor ] -eq $key .KeyChar ) {
# Just move the cursor
[ Microsoft.PowerShell.PSConsoleReadLine ]::SetCursorPosition( $cursor + 1 )
}
else {
# Insert matching quotes, move cursor to be in between the quotes
[ Microsoft.PowerShell.PSConsoleReadLine ]::Insert( " $ ( $key .KeyChar ) " * 2 )
[ Microsoft.PowerShell.PSConsoleReadLine ]::GetBufferState([ ref ] $line , [ ref ] $cursor )
[ Microsoft.PowerShell.PSConsoleReadLine ]::SetCursorPosition( $cursor - 1 )
}
}
Neste exemplo, quando você digita aspas simples ou duplas, duas coisas podem acontecer. Se o caractere após o cursor não for a aspa digitada, um par correspondente de aspas será inserido e o cursor será colocado dentro das aspas correspondentes. Se o caractere após o cursor for a aspa digitada, o cursor será simplesmente movido além da aspa sem inserir nada. Se você usar o Resharper ou outro editor inteligente, esta experiência será familiar.
Observe que, com o manipulador escrito dessa maneira, ele manipulará corretamente o Desfazer - ambas as aspas serão desfeitas com um único desfazer.
O arquivo de perfil de amostra tem vários ótimos exemplos para verificar. Este arquivo é incluído quando PSReadLine
é instalado.
Consulte os métodos públicos de [Microsoft.PowerShell.PSConsoleReadLine]
para ver quais outras funcionalidades internas você pode modificar.
Se quiser alterar a linha de comando de alguma forma não implementada em sua ligação de teclas personalizada, você pode usar os métodos:
[ Microsoft.PowerShell.PSConsoleReadLine ]::GetBufferState
[ Microsoft.PowerShell.PSConsoleReadLine ]::Insert
[ Microsoft.PowerShell.PSConsoleReadLine ]::Replace
[ Microsoft.PowerShell.PSConsoleReadLine ]::SetCursorPosition
Consulte o Guia de Contribuição para saber como desenvolver e contribuir.
Para criar PSReadLine
no Windows, Linux ou macOS, você deve ter o seguinte instalado:
InvokeBuild
e platyPS
O script de construção build.ps1
pode ser usado para inicializar, construir e testar o projeto.
./build.ps1 -Bootstrap
./build.ps1 -Configuration Debug -Framework net462
./build.ps1 -Configuration Debug -Framework netcoreapp2.1
./build.ps1 -Test -Configuration Debug -Framework net462
./build.ps1 -Test -Configuration Debug -Framework netcoreapp2.1
Após a construção, os artefatos produzidos podem ser encontrados em <your-local-repo-root>/bin/Debug
. Para isolar seu módulo importado daquele construído localmente, certifique-se de executar pwsh -NonInteractive -NoProfile
para não carregar automaticamente o módulo PSReadLine padrão instalado. Em seguida, carregue o módulo PSReadLine construído localmente por Import-Module <your-local-repo-root>/bin/Debug/PSReadLine/PSReadLine.psd1
.
O log de alterações está disponível aqui.
PSReadLine é licenciado sob a licença BSD de 2 cláusulas.
Por favor, consulte nosso Código de Conduta antes de participar deste projeto.
Para quaisquer questões de segurança, consulte nossa Política de Segurança.