É possível fazer o autocompletion no Powershell funcionar como no bash?

16

Eu amo o Powershell, mas vindo de um background Linux, há algumas coisas que realmente me incomodam. Como, 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, o comando bash expandirá para o comando correspondente. Se houver várias abas batendo uma vez não faz nada, a guia de toque duplo mostrará uma lista de comandos correspondentes, mas não expandindo. Existe uma maneira de fazer o Powershell se comportar assim?

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

"Get-PSS ^ | Remove-PSSession" é preenchido automaticamente para "Get-PSSession ^", removendo todos os comandos à direita. No bash, os comandos à direita ainda não seriam afetados. Existe uma maneira de fazer o Powershell não remover os comandos à direita quando completar automaticamente?

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

    
por Peter Moberg 03.11.2010 / 11:11

7 respostas

9

Confira PSReadline .

Do artigo:

This module replaces the command line editing experience in PowerShell.exe. It provides:

  • Syntax coloring
  • Simple syntax error notification
  • A good multi-line experience (both editing and history)
  • Customizable key bindings
  • Cmd and emacs modes (neither are fully implemented yet, but both are usable)
  • Many configuration options
  • Bash style completion (optional in Cmd mode, default in Emacs mode)
  • Bash/zsh style interactive history search (CTRL-R)
  • Emacs yank/kill ring
  • PowerShell token based "word" movement and kill
  • Undo/redo
  • Automatic saving of history, including sharing history across live sessions
  • "Menu" completion (somewhat like Intellisense, select completion with arrows) via Ctrl+Space

Eu uso diariamente!

    
por 05.11.2012 / 03:25
3

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

    
por 03.11.2010 / 11:40
2

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

    
por 05.11.2012 / 16:54
1

O PowerShell usa os mesmos recursos do console que o prompt de comando venerável; então você tem o Home / End usual e:

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

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

    
por 03.11.2010 / 11:41
1

O powershell regular usa cmd como janela de prompt de comando. É por isso que ele tem um enorme legado (os programas transmitem o comportamento do cmd antigo por anos) que não pode ser alterado por causa da comparação retroativa.

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

    
por 02.07.2013 / 21:49
0

Oi peter apenas pressione F8 para algo como o speedearch. Completa com os comandos que você executa anteriormente que começam com o que você tem na linha. O problema com a exclusão do trailing é chato, eu escrevo uma sugestão no Connect sobre o mesmo problema. Na época principal, você poderia usar o Powershell ISE, que se comporta um pouco melhor (não exclua os caracteres finais).

    
por 27.11.2010 / 12:24
0

O PowerShell usa seu próprio analisador para comandos, portanto, de certo modo, ele é um shell diferente do cmd.exe, mesmo que eles compartilhem o mesmo terminal (janela de gui).

Devido a essa diferença, o PowerShell permite que você substitua a funcionalidade de conclusão de guias por sua própria função. Eu mesmo não tive tempo de mexer com isso, mas basicamente você substitui a função tabexpansion em seu perfil, da mesma forma que você pode substituir a função prompt .

Eu encontrei este artigo , por Lee Holmes (autor do incrível Windows PowerShell Cookbook ), que descreve uma substituição de tabexpansion muito parecida com a que você está procurando. Você provavelmente poderia ajustá-lo para dar exatamente o que você quer.

    
por 28.11.2010 / 01:20