Come far funzionare il completamento della scheda di PowerShell come Bash


105

Diciamo che ho i seguenti file nella mia directory corrente:

buildBar.bat
buildFoo.bat
buildHouse.bat

E digito quanto segue al prompt dei comandi, ./buquindi TAB.

  • In Bash, viene espanso a ./build

  • In PowerShell, viene espanso al ./buildBar.batprimo elemento nell'elenco.

  • In Cmd, il comportamento è lo stesso di PowerShell.

Preferisco il comportamento Bash: esiste un modo per far comportare PowerShell come Bash?


2
Potresti usare Cygwin's bash;)
Blender

13
Sì, è quello che ho fatto negli ultimi dieci anni circa, ma sto cercando di passare a PowerShell, perché voglio essere in grado di volare sulla riga di comando su sistemi diversi dal mio, dove Cygwin non è installato.
RobSiklos

Risposte:


175

Le nuove versioni di PowerShell includono PSReadline, che può essere utilizzato per eseguire questa operazione:

Set-PSReadlineKeyHandler -Key Tab -Function Complete

Per renderlo permanente, inserisci questo comando in C: \ Users \ [User] \ Documents \ WindowsPowerShell \ profile.ps1.


26
MenuCompleteinvece di Completeè più simile a bash, ti consente di utilizzare i tasti freccia per scegliere tra le opzioni disponibili
stib

1
@LeBleu È strano, perché il mio nuovissimo computer Windows 10 è stato fornito con PSReadline. Pensavo che il modulo fosse di Microsoft.
Franklin Yu

8
A proposito, se il file profile.ps1 non esiste sulla tua macchina, puoi generarne uno con un comandonew-item $profile -itemtype file -force
Reinis

2
È molto probabile che la tua macchina non abbia C:\Users\[User]\Documents\WindowsPowerShell\profile.ps1.davvero bisogno di funzionarenew-item $profile -itemtype file -force
RF

1
È un'ortografia davvero scomoda per touch:-(
SamB

21

È ora possibile ottenere PowerShell per eseguire il completamento in stile Bash, utilizzando PSReadline.

Controlla il post del blog Completamento con tabulazione simile a Bash in PowerShell .


4
Il link nel post del blog è interrotto, tuttavia alla fine della giornata ti porta a PsReadline (ultimo commit nel 2012) che è stato biforcato (ultimo commit nel 2013)
GameScripting

6
Al giorno d'oggi puoi farlo con un one-liner, come descritto qui: stackoverflow.com/a/37715242/24874
Drew Noakes

15

Dai un'occhiata qui, non proprio i tuoi desideri:

PowerTab

ma penso che sia la migliore funzionalità di espansione delle schede per la console PowerShell !!!


Interessante. Se c'è un modo per fare qualcosa del genere, allora sembra abbastanza possibile far funzionare l'espansione come in bash. Tuttavia, sono ben lungi dall'essere un esperto di PowerShell, quindi potrebbe mancare qualcosa.
Andriy M

Sicuro! Inizia a studiare il codice del modulo PowerTab per provare a soddisfare le tue esigenze di espansione. Ma PowerTab offre espansioni per quasi tutti i comandi, wmi, comobject, assembly con un semplice modo di selezione!
CB.

7

tab completa solo il nome del comando, non i suoi precedenti argomenti / parametri.

per completare automaticamente anche il comando completo con argomenti dalla cronologia, impostare l'associazione di tasti di seguito.

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

Ora, digita alcuni caratteri del nome del comando e usa la freccia su / giù per completare automaticamente questo comando (con argomenti) dalla cronologia.

risparmio di tempo reale.


5

Modifica la funzione TabExpansion per ottenere ciò che desideri. Ricorda che forse si completa fino alla fine se premi di nuovo tab il nuovo suggerimento modifica da dove hai originariamente premuto il tasto. Preferisco fortemente il comportamento reale, voglio che la riga sia scritta il più velocemente possibile. Infine non dimenticare l'espansione con caratteri jolly, ad esempio: bu * h [Tab] si completa automaticamente in buildHouse.bat


La modifica della funzione TabExpansion è probabilmente la strada da percorrere, ancora molto più complicata di quello che stavo cercando. Penso che dovrò diventare molto più fluente in PowerShell prima di essere in grado di scherzare con quello.
RobSiklos

1

Con Powershell Core possiamo impostare la proprietà PredictionSource per PSReadLine come History per ottenere il suggerimento automatico. Fare riferimento al video di YouTube per maggiori dettagli 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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.