Jak sprawić, by uzupełnianie kart PowerShell działało jak Bash


105

Powiedzmy, że mam następujące pliki w moim bieżącym katalogu:

buildBar.bat
buildFoo.bat
buildHouse.bat

I wpisuję następujące polecenie w wierszu polecenia, ./bua następnie TAB.

  • W Bash rozszerza się do ./build

  • W PowerShell zostaje rozwinięty do ./buildBar.bat- pierwszej pozycji na liście.

  • W Cmd zachowanie jest takie samo jak w programie PowerShell.

Wolę zachowanie Bash - czy istnieje sposób, aby PowerShell zachowywał się jak Bash?


2
Możesz użyć Cygwina bash;)
Blender.

13
Tak - to właśnie robię przez ostatnią dekadę, ale próbuję przejść na PowerShell, ponieważ chcę mieć możliwość latania w wierszu poleceń na systemach innych niż mój własny, gdzie Cygwin nie jest zainstalowany.
RobSiklos

Odpowiedzi:


175

Nowe wersje programu PowerShell obejmują PSReadline, którego można użyć do tego:

Set-PSReadlineKeyHandler -Key Tab -Function Complete

Aby to było trwałe, umieść to polecenie w C: \ Users \ [User] \ Documents \ WindowsPowerShell \ profile.ps1.


26
MenuCompletezamiast Completejest bardziej podobny do basha, pozwala za pomocą klawiszy strzałek wybierać spośród dostępnych opcji
stib

1
@LeBleu To dziwne, ponieważ mój nowy komputer z systemem Windows 10 został wyposażony w PSReadline. Myślałem, że moduł pochodzi od firmy Microsoft.
Franklin Yu

8
BTW, jeśli plik profile.ps1 nie istnieje na twoim komputerze, możesz go wygenerować za pomocą polecenianew-item $profile -itemtype file -force
Reinis

2
Jest bardzo prawdopodobne, że twoja maszyna nie będzie musiała C:\Users\[User]\Documents\WindowsPowerShell\profile.ps1.faktycznie działaćnew-item $profile -itemtype file -force
RF,

1
To naprawdę niewygodna pisownia dla touch:-(
SamB

21

Możliwe jest teraz, aby PowerShell wykonywał uzupełnianie w stylu Bash, używając PSReadline.

Sprawdź wpis na blogu Uzupełnianie kart w stylu Bash w PowerShell .


4
Link w poście na blogu jest uszkodzony, ale pod koniec dnia prowadzi do PsReadline (ostatnie zatwierdzenie w 2012 r.), Które zostało rozwidlone (ostatnie zatwierdzenie w 2013 r.)
GameScripting

6
Obecnie możesz to zrobić za pomocą jednej linijki, jak opisano tutaj: stackoverflow.com/a/37715242/24874
Drew Noakes

15

Spójrz tutaj, a nie tak naprawdę swoje dezyderaty:

PowerTab

ale myślę, że to najlepsza funkcja rozszerzania zakładek dla konsoli PowerShell !!!


Ciekawy. Jeśli istnieje sposób na zrobienie czegoś takiego, wydaje się całkiem możliwe, aby rozszerzenie działało jak w bash. Daleko mi jednak do bycia ekspertem w PowerShell, więc może czegoś brakuje.
Andriy M,

Pewnie! Zacznij studiować kod modułu PowerTab, aby spróbować zaspokoić potrzeby związane z rozbudową. Ale PowerTab oferuje rozszerzenia dla prawie każdego polecenia, wmi, comobject, assembler z łatwym sposobem wyboru!
CB.

7

tab uzupełnia tylko nazwę polecenia, a nie poprzednie argumenty / parametry.

aby również automatycznie uzupełnić kompletne polecenie z argumentami z historii, ustaw poniższe przypisanie klawiszy.

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

Teraz wpisz kilka znaków nazwy polecenia i użyj strzałek w górę / w dół, aby automatycznie uzupełnić to polecenie (z argumentami) z historii.

oszczędność czasu rzeczywistego.


5

Zmodyfikuj funkcję TabExpansion, aby osiągnąć to, co chcesz. Pamiętaj, że być może zakończy się to do końca, jeśli ponownie naciśniesz klawisz Tab, nowa sugestia zmodyfikuj od miejsca, w którym pierwotnie nacisnąłeś klawisz. Zdecydowanie wolę rzeczywiste zachowanie, chcę, aby wiersz został napisany tak szybko, jak to możliwe. Na koniec nie zapomnij o rozwinięciu symboli wieloznacznych, na przykład: bu * h [Tab] automatycznie kończy tworzenie buildHouse.bat


Modyfikacja funkcji TabExpansion jest prawdopodobnie drogą do zrobienia, wciąż jednak o wiele bardziej skomplikowana niż to, czego szukałem. Myślę, że będę musiał lepiej posługiwać się PowerShell, zanim będę mógł się z tym bawić.
RobSiklos

1

Dzięki Powershell Core możemy ustawić właściwość PredictionSource dla PSReadLine jako History, aby uzyskać automatyczną sugestię. Więcej informacji można znaleźć w filmie YouTube 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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.