Como fazer o preenchimento da guia do PowerShell funcionar como o Bash


105

Digamos que eu tenha os seguintes arquivos em meu diretório atual:

buildBar.bat
buildFoo.bat
buildHouse.bat

E eu digito o seguinte em meu prompt de comando ./bue , em seguida TAB.

  • No Bash, ele é expandido para ./build

  • No PowerShell, ele é expandido para ./buildBar.bat- o primeiro item da lista.

  • No Cmd, o comportamento é o mesmo do PowerShell.

Eu prefiro o comportamento do Bash - há uma maneira de fazer o PowerShell se comportar como o Bash?


2
Você poderia usar Cygwin's bash;)
Blender

13
Sim - é o que tenho feito na última década ou mais, mas estou tentando fazer a transição para o PowerShell, porque quero ser capaz de voar na linha de comando em sistemas diferentes do meu, onde o Cygwin não é instalado.
RobSiklos

Respostas:


175

As novas versões do PowerShell incluem PSReadline, que pode ser usado para fazer isso:

Set-PSReadlineKeyHandler -Key Tab -Function Complete

Para torná-lo permanente, coloque este comando em C: \ Users \ [User] \ Documents \ WindowsPowerShell \ profile.ps1.


26
MenuCompleteem vez de Completeé mais parecido com bash, permite que você use as teclas de seta para escolher entre as opções disponíveis
stib

1
@LeBleu Isso é estranho, porque minha nova máquina com Windows 10 veio com PSReadline. Achei que o módulo fosse da Microsoft.
Franklin Yu

8
BTW, se o arquivo profile.ps1 não existe em sua máquina, você pode gerar um com um comandonew-item $profile -itemtype file -force
Reinis

2
É muito provável que sua máquina não tenha C:\Users\[User]\Documents\WindowsPowerShell\profile.ps1.Você realmente precisa executarnew-item $profile -itemtype file -force
RF

1
Esta grafia é realmente inconveniente para touch:-(
SamB

21

Agora é possível fazer com que o PowerShell faça o preenchimento no estilo Bash, usando PSReadline.

Confira a postagem no blog do preenchimento da guia Bash no PowerShell .


4
O link na postagem do blog está quebrado, mas no final do dia ele leva você ao PsReadline (último commit em 2012), que foi bifurcado (último commit em 2013)
GameScripting

6
Hoje em dia você pode fazer isso com uma linha, conforme descrito aqui: stackoverflow.com/a/37715242/24874
Drew Noakes

15

Dê uma olhada aqui, não é realmente o seu desiderato:

PowerTab

mas acho que é o melhor recurso de expansão de guia para o console do PowerShell !!!


Interessante. Se houver uma maneira de fazer algo assim, então parece bem possível fazer a expansão funcionar como no bash. Estou longe de ser um especialista em PowerShell, porém, pode estar faltando alguma coisa.
Andriy M

Certo! Comece estudando o código do Módulo PowerTab para tentar fazer suas necessidades de expansão. Mas o PowerTab oferece expansões para quase qualquer comando, wmi, comobject, assembly com uma forma de seleção fácil!
CB.

7

tab apenas completa o nome do comando, não seus argumentos / parâmetros anteriores.

para também preencher automaticamente o comando completo com argumentos do histórico, defina o atalho de teclado abaixo.

Set-PSReadlineKeyHandler -Key UpArrow -Function HistorySearchBackward
Set-PSReadlineKeyHandler -Key DownArrow -Function HistorySearchForward

Agora, digite alguns caracteres do nome do comando e use as setas para cima / para baixo para preencher automaticamente este comando (com argumentos) do histórico.

economizador de tempo real.


5

Modifique a função TabExpansion para conseguir o que deseja. Lembre-se de que talvez ele seja concluído até o fim, se você pressionar tab novamente, a nova sugestão modifique de onde originalmente pressionou a tecla. Eu prefiro fortemente o comportamento real, quero que a linha seja escrita o mais rápido possível. Finalmente, não se esqueça da expansão do curinga, por exemplo: bu * h [Tab] é concluído automaticamente para buildHouse.bat


Modificar a função TabExpansion é provavelmente o caminho a percorrer, ainda muito mais complicado do que o que eu estava procurando. Acho que vou precisar ficar muito mais fluente em PowerShell antes de poder mexer com isso.
RobSiklos

1

Com o Powershell Core, podemos definir a propriedade PredictionSource para PSReadLine como Histórico para obter sugestão automática. Consulte o vídeo do YouTube para obter mais detalhes https://youtu.be/I0iIZe0dUNw


1
# keep or reset to powershell default
Set-PSReadlineKeyHandler -Key Shift+Tab -Function TabCompletePrevious

# define Ctrl+Tab like default Tab behavior
Set-PSReadlineKeyHandler -Key Ctrl+Tab -Function TabCompleteNext

# define Tab like bash
Set-PSReadlineKeyHandler -Key Tab -Function Complete
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.