PowerShell w myślach czyta?
O module PSReadLine pisałem już na tym blogu w przeszłości. Gwoli przypomnienia: to właśnie ten moduł jest odpowiedzialny za skróty klawiszowe, kolorowanie składni, przechowywanie historii (i udostępnienia jej za pomocą skrótu klawiszowego CTRL+R) i wiele, wiele innych. Od ostatniej wersji domyślnie włączona jest też funkcja, która sprawia, że PowerShell zaczyna przewidywać wasze myśli a w jednym przypadku – podsuwać gotowe rozwiązania. Mowa o dostępnej od wersji 2.1 (a od wersji 2.2.6 domyślnie włączonej) opcji “PredictionSource”.
Najpierw przyjrzyjmy się opcji dostępnej zarówno dla użytkowników Windows PowerShell 5.1, jak i dla osób korzystających z PowerShell 7.1+, czyli podpowiedzi wykorzystujących historię poleceń. Włączyć ją możemy korzystając z polecenia ustawiającego opcje PSReadLine (Set-PSReadLineOption):
Jak wspomniałem, w PSReadLine 2.2.6 opcja ta domyślnie będzie ustawiona na History w “tradycyjnym” PowerShellu, a na HistoryAndPlugin w wersjach 7.1 i nowszych. W obu przypadkach będziemy mieli dostęp do naszej historii poleceń. Jeśli zaczniemy pisać nowe polecenie, to PowerShell zacznie podsuwać podobne polecenia wykonywane w przeszłości:
Jeśli podpowiedź nam odpowiada – wystarczy wcisnąć prawą “strzałkę” na naszej klawiaturze. Jest też opcja by włączyć dopełnianie pojedynczych słów:
Set-PSReadLineKeyHandler -Chord ctrl+f -Function ForwardWord |
Inna opcja, którą warto rozważyć, to lista podpowiedzi, z których możemy wybrać tę, która najbardziej nam odpowiada. Możemy przełączyć się między trybami przy pomocy polecenia, ale możemy też skorzystać z klawisza F2 (jeśli nie przypisaliśmy mu sami innej akcji):
Set-PSReadLineOPtion -PredictionViewStyle ListView |
Niezależnie od tego, jaką drogę wybierzemy by tu dotrzeć, na wyjściu uzyskamy listę podpowiedzi, z których wybierać możemy za pomocą strzałek góra – dół:
Jeśli wybrana opcja nam odpowiada – możemy wcisnąć spację (kontynuując edycję) bądź enter (od razu wykonując wybrane polecenie).
Warto wspomnieć, że zarówno podpowiedzi “w linii”, jak i podpowiedzi “z listy” możemy spersonalizować, dobierając inny zestaw kolorów niż domyślny:
# InLine: | |
Set-PSReadLineOption -Colors @{ InlinePrediction = "$([char]0x1b)[36;7;238m"} | |
# ListView, kolorowanie źródła i "strzałki" na wejściu: | |
Set-PSReadLineOption -Colors @{ ListPrediction = "$([char]0x1b)[33;7;238m"} | |
# ListView, kolorowanie wybranej opcji | |
Set-PSReadLineOption -Colors @{ ListPredictionSelected = "$([char]0x1b)[36;7;238m"} |
Efekt obu zabiegów – na załączonym obrazkach. Dla opcji InLine:
I dla opcji ListView:
Na koniec – wisienka na torcie: w PowerShell 7.1+ możemy skorzystać z możliwości tworzenia własnych podpowiedzi. Przykładem takich podpowiedzi jest oferowany przez Azure zestaw podpowiedzi do ich poleceń w ramach modułu Az.Tools.Predictors. Po zainstalowaniu uzyskamy podpowiedzi nawet w przypadku poleceń, których nigdy nie mieliśmy okazji użyć:
Oczywiście, nie omieszkam spróbować podobne podpowiedzi stworzyć we własnym zakresie. Póki co, zachęcam do tego, by własnej historii poleceń zacząć używać nieco inaczej, niż do tej pory.