É possível fazer o preenchimento automático no Powershell funcionar como no bash?


19

Eu amo o Powershell, mas, vindo do Linux, há algumas coisas que realmente me incomodam. Por exemplo, como o preenchimento automático padrão funciona.

Por exemplo: Get-PS se expande para "Get-PSBreakpoint", que é o primeiro comando correspondente. No bash, se houver apenas um comando correspondente, o bash será expandido para o comando correspondente. Se houver várias guias pressionando uma vez, nada fará, uma guia de toque duplo exibirá uma lista de comandos correspondentes, mas não expandindo. Existe uma maneira de fazer o Powershell se comportar assim?

E outra coisa, se eu escrevi uma linha, e move o marcador de volta para um comando anterior (o marcador é onde está o ^):

"Get-PSS ^ | Remove-PSSession" é concluído automaticamente como "Get-PSSession ^", removendo todos os comandos à direita. No bash, os comandos à direita ainda não seriam afetados. Existe uma maneira de fazer com que o Powershell não remova os comandos finais ao concluir automaticamente?

Um bônus seria obter CTRL + L para limpar a tela. CTRL + A para ir para o início da linha e CTRL + E para ir para o final da linha.


Postei uma resposta para sua pergunta, mas o mais engraçado é que cheguei a essa pergunta porque estou procurando exatamente o oposto ... Quero a conclusão do estilo PowerShell no bash :)
Robert S Ciaccio

Conclusão estilo PowerShell está disponível em bash - olhar para a função menu completo
Jason Shirk

Felizmente, temos o bash no Windows 10 agora.
22618

Respostas:


11

Confira PSReadline .

Do artigo:

Este módulo substitui a experiência de edição da linha de comando no PowerShell.exe. Fornece:

  • Coloração de sintaxe
  • Notificação de erro de sintaxe simples
  • Uma boa experiência em várias linhas (edição e histórico)
  • Ligações de teclas personalizáveis
  • Modos Cmd e emacs (ainda não foram totalmente implementados, mas ambos são utilizáveis)
  • Muitas opções de configuração
  • Conclusão do estilo Bash (opcional no modo Cmd, padrão no modo Emacs)
  • Pesquisa de histórico interativo no estilo Bash / zsh (CTRL-R)
  • Emacs arranca / mata anel
  • Movimento e eliminação de "palavras" baseadas no token do PowerShell
  • Desfazer refazer
  • Salvamento automático do histórico, incluindo o compartilhamento do histórico em sessões ao vivo
  • Conclusão do "Menu" (semelhante ao Intellisense, selecione a conclusão com setas) via Ctrl + Space

Eu uso diariamente!


4
Depois de instalar PSReadLine, você tem que permitir-style festa de conclusão de tabulação, adicionando isso ao seu perfil:Set-PSReadlineKeyHandler -Key Tab -Function Complete
brianpeiris

3
O PSReadLine agora está instalado por padrão no Windows 10. Basta colocar a linha de configuração que @brianpeiris mencionou em seu perfil e você estará pronto.
quer

Tente usar CompleteMenuem vez de Completepara uma mais bash-como experiência, ele permite que você use as setas do teclado para navegar nas opções
STIB

3

Talvez você deva dar uma olhada no Powertab , uma expansão personalizável do PowerShell Tab.


2
Obrigado! O Powertab realmente melhora muito a expansão de guias. Ainda assim, o problema de concluir algo que não está no final do comando está lá.
Peter Moberg

2

oi peter basta pressionar F8 para algo como speedearch. Ele termina com os comandos que você executa anteriormente que começam com o que você tem na linha. O problema com a exclusão da trilha é irritante, escrevo uma sugestão no Connect sobre o mesmo problema. No tempo principal, você pode usar o Powershell ISE, que se comporta um pouco melhor (não exclua os caracteres finais).


2

O antigo subsistema command.exe ainda está envolvido no PowerShell e força muitos comportamentos desagradáveis. Porém, a partir do PowerShell v3, a GUI (PowerShell ISE) agora é utilizável e inclui uma experiência de conclusão muito mais moderna + colorização.

insira a descrição da imagem aqui


2

O PowerShell usa os mesmos recursos de console que o venerável prompt de comando; para que você tenha o habitual Início / Fim e:

  • F3 para exibir o comando anterior
  • F1 copiar um único caractere do comando anterior
  • F7 janela de histórico pop-up

... mas não há possibilidade de mostrar todas as conclusões possíveis, até onde eu sei.


Isso ainda é muito limitante em comparação com o bom e velho bash. Por exemplo, é realmente ótimo poder digitar ctrl + r (speedearch) no bash e apenas começar a digitar e um comando anterior correspondente será exibido.
Peter Moberg

1

PowerShell regular usa cmd como janela do prompt de comando. É por isso que ele tem um enorme legado (os programas retransmitem o comportamento do antigo cmd por idades) que não pode ser alterado devido à comparabilidade retroativa.

Eu recomendo que você use o powershell_ise em vez do powershell (está incluído no pacote padrão do powershell). A versão 3.0 (não tenho certeza sobre o anterior) suporta o Intellisense da caixa. Isso é muito próximo ao estilo de conclusão do bash. Basta pressionar Ctrl + Espaço em vez de Tab. Tenho problemas com conclusões personalizadas no PowerTab, mas o Intellisense funciona bem com ele. O Powershell_ise também preserva os comandos à direita, possui o modo de seleção normal, suporta Ctrl + C, Ctrl + V, Ctrl + A para o comando selecionado, então Ctrl + A, pula para o início da linha, Ctrl + A, até o fim (ou Início /Fim).


0

O PowerShell usa seu próprio analisador para comandos, portanto, de certa forma, é um shell diferente do cmd.exe, mesmo que eles compartilhem o mesmo terminal (janela da GUI).

Devido a essa diferença, o PowerShell permite substituir a funcionalidade de preenchimento de guias por sua própria função. Eu não tive tempo de mexer com isso sozinho, mas você basicamente substitui a função tabexpansionem seu perfil, da mesma maneira que pode substituí-la prompt.

Encontrei este artigo , de Lee Holmes (autor do incrível livro de receitas do Windows PowerShell ), que descreve uma substituição de tabexpansion muito semelhante à que você está procurando. Você provavelmente poderia ajustá-lo para fornecer exatamente o que deseja.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.