Odpowiednik Ctrl-r bash w PowerShell

19

czy ktoś wie o sposobie korzystania z funkcji wyszukiwania poleceń wstecz bash [Ctrl-r](i [Ctrl-o]), które są tak przydatne, w Windows PowerShell?

C-rjest potężniejszą arrow upmanipulacją historią, jest jak emacs C-r, ponieważ przeszukuje wstecz wewnątrz wcześniej wprowadzonych poleceń. Następnie C-owykonuje to polecenie i natychmiast umieszcza w wierszu następne polecenie po tym. Abyś mógł efektywnie powtarzać przekazane serie poleceń. Sprawdza także zapisaną historię, a nie historię sesji. ( ~/.bash_historyplik). Co jest nieskończenie przydatne.

dzięki.

ps: jako bonus, uzupełnianie tabulatorów niedziałające cyklami byłoby również niesamowite.

v.oddou
źródło
Co robi ctrl O, który chcesz replikować? Więcej informacji nas zawsze dobre ...
Austin T Francuski
Tak, zredagowałem pytanie :)
.oddou
2
Nie wierzę, że ta funkcja jest obsługiwana. PowerShell 3 ma tzw. Hook, PSConsoleHostReadlinektóry może być przydatny. Dobrym miejscem na początek byłoby użycie PSReadLine , który używa tego haka. PSReadLine nie obsługuje ctrl-o, ale obsługuje ctrl-r (podobno - nie działało dla mnie). Mogę rzucić okiem na wdrożenie ctrl-o podczas świąt, bo to brzmi pożytecznie.
dangph
2
Ach, PSReadLine, to wygląda na moją odpowiedź, powinieneś opublikować ją jako odpowiedź. nie ma Co, ale ma Cr, który jest najważniejszy. Ma również poprawkę uzupełniania zakładki, którą chciałem w premii.
v.oddou
2
PSReadline autor tutaj - @ v.oddou - Ctrl + K powinien być powiązany z KillLine w trybie Emacsa. Ctrl + R powinien działać bez wpisywania czegoś na początku. Z przyjemnością dodam Ctrl + O - możesz otworzyć problem na github.
Jason Shirk

Odpowiedzi:

15

Wpisz pierwsze litery polecenia i naciśnij F8.

Alternatywnie możesz nacisnąć F7i wpisać pierwsze litery.

Więcej informacji: http://technet.microsoft.com/en-us/magazine/ff678293.aspx

georgik
źródło
F7 nic nie robi ...
Daniel K.
Czy możesz podać więcej informacji? Może być przydatny dla innych. Która wersja programu Powershell i która wersja systemu Windows? Domyślny PowerShell jest dość ograniczony. Lepiej jest użyć MobaXterm lub ConEmuMaximus 5, aby uzyskać lepszy UX
Georg
@CatBoss F7 działa w cmd
phuclv
1
@ LưuVĩnhPhúc, więc odpowiedź musi brzmieć tak, ponieważ pytanie dotyczy Powershell ....
Daniel K.
Zobacz odpowiedź poniżej - nie marnuj czasu na F8, jeśli korzystasz z PowerShell 5+
Nicholas DiPiazza
6

WMF 5.0 RTM , który obejmuje Windows PowerShell 5 , obsługuje teraz tę samą funkcję wyszukiwania poleceń wstecznych w bash CTRL+R. Używam tego w Windows 10 Anniversary Edition, a moja pamięć mięśni bash jest bardzo szczęśliwa.

Wsparcie faktycznie pochodzi z modułu PSReadLine programu PowerShell, który, jak widzę, był wspomniany w niektórych komentarzach do pytania. Dobrą rzeczą jest to, że PSReadLine wydaje się teraz być częścią podstawowej instalacji WMF 5.0 , przynajmniej w Windows 10.

Jeśli używasz programu PowerShell 3 lub nowszego, możesz również zainstalować PSReadLine, a także uzyskać funkcję wyszukiwania historii.

Uwaga: nie dowiedziałem się, jak to zrobić w ISE, ponieważ CTRL+Rjest mapowane na coś innego (Pokaż / Ukryj okienko skryptu).

Lantrix
źródło
4

Aby manipulować historią, możesz użyć poleceń cmdlet historii, wypisz je za pomocą tego polecenia:

Get-Command *-history

Przeszukiwanie historii odbywa się w następujący sposób: możesz ją skrócić:

Get-history | Select-String "command"

function f ($Name) { Get-history | Select-String $name }
nohwnd
źródło