Czy możliwe jest, aby autouzupełnianie w Powershell działało jak w bash?

19

Uwielbiam Powershell, ale wywodząc się z Linuksa, jest kilka rzeczy, które naprawdę mnie denerwują. Na przykład jak działa domyślne automatyczne uzupełnianie.

Na przykład: Get-PS rozwija się do „Get-PSBreakpoint”, który jest pierwszym pasującym poleceniem. W bash, jeśli istnieje tylko jedno polecenie pasujące bash rozwinie się do pasującego polecenia. Jeśli jest kilka kart trafienia raz, nic nie robi, karta podwójnego stuknięcia wyświetli listę pasujących poleceń, ale nie rozwija się. Czy istnieje sposób, aby Powershell zachowywał się w ten sposób?

I jeszcze jedno, jeśli napisałem jedną linię i przesunęłem znacznik z powrotem do wcześniejszego polecenia (znacznik jest tam, gdzie jest ^):

„Get-PSS ^ | Remove-PSSession” automatycznie kończy się na „Get-PSSession ^”, usuwając wszystkie końcowe polecenia. W bash końcowe polecenia pozostałyby bez zmian. Czy istnieje sposób, aby program PowerShell nie usuwał końcowych poleceń podczas automatycznego uzupełniania?

Premią byłoby zdobycie CTRL + L w celu wyczyszczenia ekranu. CTRL + A, aby przejść na początek linii, a CTRL + E, aby przejść na koniec linii.

Peter Moberg
źródło
Odpowiedziałem na twoje pytanie, ale zabawne jest to, że dotarłem do tego pytania, ponieważ szukam dokładnie odwrotnej strony ... Chcę zakończyć styl PowerShell w bash :)
Robert S Ciaccio
Uzupełnienie stylu PowerShell jest dostępne w wersji bash - poszukaj funkcji menu-kompletne
Jason Shirk
Na szczęście mamy teraz bash na Windows 10.
byxor

Odpowiedzi:

12

Sprawdź PSReadline .

Z artykułu:

Ten moduł zastępuje proces edycji wiersza poleceń w programie PowerShell.exe. To zapewnia:

  • Kolorowanie składni
  • Proste powiadomienie o błędzie składni
  • Dobra obsługa wielu linii (zarówno edycja, jak i historia)
  • Konfigurowalne przypisania klawiszy
  • Tryby Cmd i Emacs (żaden z nich nie jest jeszcze w pełni zaimplementowany, ale oba są użyteczne)
  • Wiele opcji konfiguracji
  • Zakończenie stylu Bash (opcjonalne w trybie Cmd, domyślne w trybie Emacsa)
  • Interaktywne wyszukiwanie historii w stylu Bash / zsh (CTRL-R)
  • Emacs yank / kill ring
  • Ruch „słowo” oparty na tokenie PowerShell i zabijanie
  • Cofnij / ponów
  • Automatyczne zapisywanie historii, w tym udostępnianie historii między sesjami na żywo
  • Uzupełnienie „Menu” (nieco jak Intellisense, wybierz uzupełnienie ze strzałkami) za pomocą Ctrl + spacja

Używam tego codziennie!

David Mohundro
źródło
4
Po zainstalowaniu PSReadLine musisz włączyć uzupełnianie tabulacji w stylu bash, dodając to do swojego profilu:Set-PSReadlineKeyHandler -Key Tab -Function Complete
brianpeiris
3
PSReadLine jest teraz domyślnie instalowany w systemie Windows 10. Wystarczy umieścić linię konfiguracyjną, o której wspomniał @brianpeiris, w swoim profilu i gotowe.
Don Cruickshank
Spróbuj użyć CompleteMenuzamiast Completebardziej
bashowego
3

Może powinieneś rzucić okiem na Powertab , konfigurowalne rozszerzenie karty PowerShell.

harrymc
źródło
2
Dzięki! Powertab naprawdę sprawia, że ​​rozwijanie tabulatorów jest znacznie lepsze. Nadal istnieje problem z ukończeniem czegoś, co nie jest na końcu polecenia.
Peter Moberg,
2

cześć Peter, po prostu naciśnij klawisz F8, aby uzyskać coś takiego jak speedsearch. Uzupełnia je wcześniej uruchomione polecenia, które zaczynają się od tego, co masz w linii. Problem z usunięciem końca jest denerwujący, piszę sugestię w Connect dotyczącą tego samego problemu. W głównej chwili możesz użyć Powershell ISE, które zachowują się nieco lepiej (nie usuwaj końcowych znaków).

mjsr
źródło
2

Stary podsystem Command.exe jest nadal zaangażowany w PowerShell i wymusza wiele nieprzyjemnych zachowań. Jednak od wersji PowerShell v3 GUI (PowerShell ISE) jest teraz użyteczny i zawiera znacznie bardziej nowoczesne wykończenie + koloryzację.

wprowadź opis zdjęcia tutaj

Jay Bazuzi
źródło
2

PowerShell używa tych samych funkcji konsoli, co czcigodny wiersz polecenia; więc masz zwykły Home / End i:

  • F3 przywołać poprzednie polecenie
  • F1 aby skopiować pojedynczy znak z poprzedniego polecenia
  • F7 wyskakujące okno historii

... ale o ile mi wiadomo, nie ma możliwości pokazania wszystkich możliwych uzupełnień.

njd
źródło
Jest to nadal bardzo ograniczające w porównaniu do starego dobrego basha. Na przykład, naprawdę wspaniale jest pisać ctrl + r (speedsearch) w bashu i po prostu zacząć pisać, a pojawi się pasujące poprzednie polecenie.
Peter Moberg,
1

Zwykły PowerShell używa cmd jako okna wiersza polecenia. Dlatego ma ogromne dziedzictwo (programy od wieków polegają na zachowaniu starego cmd), którego nie można zmienić z powodu wstecznej porównywalności.

Polecam użyć powershell_ise zamiast PowerShell (to obejmuje w standardzie PowerShell wiązki). Wersja 3.0 (nie jestem pewien co do poprzedniej wersji) obsługuje Intellisense od samego początku. Jest to bardzo zbliżone do stylu zakończenia bashu. Po prostu naciśnij Ctrl + Spacja zamiast Tab. Mam problemy z niestandardowymi uzupełnieniami na PowerTab, ale Intellisense działa z tym dobrze. Powershell_ise zachowuje również końcowe polecenia, ma normalny tryb zaznaczania, obsługuje Ctrl + C, Ctrl + V, Ctrl + A dla zaznaczonego wprowadzonego polecenia, więc Ctrl + A, przejdź do początku linii, Ctrl + A, do końca (lub Home /Koniec).

xvorsx
źródło
0

PowerShell używa własnego parsera dla poleceń, więc w pewnym sensie jest to inna powłoka niż cmd.exe, nawet jeśli mają ten sam terminal (okno GUI).

Z powodu tej różnicy PowerShell pozwala zastąpić funkcję uzupełniania tabulatorów własną funkcją. Sam nie miałem czasu, aby z tym zadzierać, ale w zasadzie zastępujesz funkcję tabexpansionw swoim profilu, tak samo jak możesz zastąpić promptfunkcję.

Znalazłem ten artykuł autorstwa Lee Holmesa (autora niesamowitej książki kucharskiej Windows PowerShell ), który opisuje zastąpienie rozszerzenia tabulacji, które jest bardzo podobne do tego, czego szukasz. Prawdopodobnie możesz go ulepszyć, aby uzyskać dokładnie to, czego chcesz.

Robert S. Ciaccio
źródło