PSReadLine
about_PSReadLine
KRÓTKI OPIS
Funkcja PSReadLine zapewnia ulepszone środowisko edycji wiersza polecenia w konsoli programu PowerShell.
DŁUGI OPIS
Funkcja PSReadLine zapewnia zaawansowane środowisko edytowania wiersza polecenia dla konsoli programu PowerShell. Oferuje ona następujące możliwości:
- Kolorowanie składni wiersza polecenia
- Wizualne wskazanie błędów składniowych
- Lepsze środowisko wielowierszowe (zarówno edytowanie, jak i historia)
- Dostosowywalne powiązania kluczy
- Tryby Cmd i Emacs
- Wiele opcji konfiguracji
- Uzupełnianie stylu powłoki Bash (opcjonalne w trybie Cmd, domyślne w trybie Emacs)
- Emacs yank/kill ring
- Ruch i zabijanie oparte na tokenach programu PowerShell
Następujące funkcje są dostępne w klasie [Microsoft.PowerShell.PSConsoleReadLine].
Ruch kursora
EndOfLine
- Cmd:
<End>
- Emacs:
<End>
lub<Ctrl+E>
Jeśli dane wejściowe mają wiele wierszy, przejdź na koniec bieżącego wiersza lub jeśli już na końcu wiersza przejdź na koniec danych wejściowych. Jeśli dane wejściowe mają jeden wiersz, przejdź na koniec danych wejściowych.
PoczątekOfLine
- Cmd:
<Home>
- Emacs:
<Home>
lub<Ctrl+A>
Jeśli dane wejściowe mają wiele wierszy, przejdź do początku bieżącego wiersza lub jeśli już na początku wiersza przejdź do początku danych wejściowych. Jeśli dane wejściowe mają jeden wiersz, przejdź do początku danych wejściowych.
NextLine
- Cmd: bez ruchu przychodzącego
- Emacs: unbound
Przenieś kursor do następnego wiersza, jeśli dane wejściowe mają wiele wierszy.
PreviousLine
- Cmd: bez ruchu przychodzącego
- Emacs: unbound
Przenieś kursor do poprzedniego wiersza, jeśli dane wejściowe mają wiele wierszy.
ForwardChar
- Cmd:
<RightArrow>
- Emacs:
<RightArrow>
lub<Ctrl+F>
Przenieś kursor z jednym znakiem po prawej stronie. Może to spowodować przeniesienie kursora do następnego wiersza danych wejściowych wielowierszowych.
Do tyłu
- Cmd:
<LeftArrow>
- Emacs:
<LeftArrow>
lub<Ctrl+B>
Przenieś kursor o jeden znak po lewej stronie. Może to spowodować przeniesienie kursora do poprzedniego wiersza danych wejściowych wielowierszowych.
ForwardWord
- Cmd: bez ruchu przychodzącego
- Emacs:
<Alt+F>
Przesuń kursor do przodu na końcu bieżącego wyrazu lub jeśli między wyrazami na końcu następnego wyrazu. Można ustawić znaki ogranicznika wyrazów za pomocą:
Set-PSReadLineOption -WordDelimiters `<string of delimiter characters>`
Następnyword
- Cmd:
<Ctrl+RightArrow>
- Emacs: unbound
Przenieś kursor do przodu na początek następnego słowa. Można ustawić znaki ogranicznika wyrazów za pomocą:
Set-PSReadLineOption -WordDelimiters `<string of delimiter characters>`
Kolejność do tyłu
- Cmd:
<Ctrl+LeftArrow>
- Emacs:
<Alt+B>
Przenieś kursor z powrotem na początek bieżącego wyrazu lub jeśli między wyrazami początek poprzedniego wyrazu. Można ustawić znaki ogranicznika wyrazów za pomocą:
Set-PSReadLineOption -WordDelimiters `<string of delimiter characters>`
ShellForwardWord
- Cmd: bez ruchu przychodzącego
- Emacs: unbound
Podobnie jak ForwardWord, z wyjątkiem granic słów, są definiowane przez granice tokenu programu PowerShell.
ShellNextWord
- Cmd: bez ruchu przychodzącego
- Emacs: unbound
Podobnie jak NextWord, z wyjątkiem granic słów, są definiowane przez granice tokenu programu PowerShell.
ShellBackwardWord
- Cmd: bez ruchu przychodzącego
- Emacs: unbound
Podobnie jak WsteczWord z wyjątkiem granic wyrazów są definiowane przez granice tokenu programu PowerShell.
GotoBrace
- Cmd:
<Ctrl+}>
- Emacs: unbound
Przejdź do pasującego nawiasu, nawiasu klamrowego lub nawiasu kwadratowego.
Addline
- Cmd:
<Shift-Enter>
- Emacs:
<Shift-Enter>
Monit o kontynuację jest wyświetlany w następnym wierszu, a funkcja PSReadLine czeka na edytowanie bieżących danych wejściowych przez klucze. Jest to przydatne do wprowadzania danych wejściowych w wielu wierszach jako pojedynczego polecenia nawet wtedy, gdy pojedynczy wiersz jest kompletnym wejściem.
Edytowanie podstawowe
CancelLine
- Cmd: bez ruchu przychodzącego
- Emacs: unbound
Anuluj całą edycję w wierszu, pozostaw wiersz danych wejściowych na ekranie, ale wróć z elementu PSReadLine bez wykonywania danych wejściowych.
Przywróć wiersz
- Cmd:
<ESC>
- Emacs:
<Alt+R>
Przywraca wszystkie dane wejściowe od czasu zaakceptowania i uruchomienia ostatniego danych wejściowych. Jest to równoważne użyciu polecenia Cofnij, dopóki nie ma nic do cofnięcia.
WsteczDeleteChar
- Cmd:
<Backspace>
- Emacs:
<Backspace>
lub<Ctrl+H>
Usuń znak przed kursorem.
DeleteChar
- Cmd:
<Delete>
- Emacs:
<Delete>
Usuń znak pod kursorem.
DeleteCharOrExit
- Cmd: bez ruchu przychodzącego
- Emacs:
<Ctrl+D>
Podobnie jak DeleteChar, chyba że wiersz jest pusty, w którym przypadku zakończ proces.
AcceptLine
- Cmd:
<Enter>
- Emacs:
<Enter>
lub<Ctrl+M>
Spróbuj wykonać bieżące dane wejściowe. Jeśli bieżące dane wejściowe są niekompletne (na przykład brakuje nawiasu zamykającego, nawiasu lub cudzysłowu), wiersz kontynuacji jest wyświetlany w następnym wierszu, a funkcja PSReadLine czeka na edytowanie bieżących danych wejściowych przez klucze.
AcceptAndGetNext
- Cmd: bez ruchu przychodzącego
- Emacs:
<Ctrl+O>
Podobnie jak AcceptLine, ale po zakończeniu wiersza rozpocznij edytowanie następnego wiersza z historii.
ValidateAndAcceptLine
- Cmd: bez ruchu przychodzącego
- Emacs: unbound
Podobnie jak AcceptLine, ale wykonuje dodatkową walidację, w tym:
- Sprawdzanie dodatkowych błędów analizy
- Sprawdza, czy wszystkie nazwy poleceń zostały znalezione
- Jeśli korzystasz z programu PowerShell 4.0 lub nowszego, weryfikuje parametry i argumenty
Jeśli wystąpią jakiekolwiek błędy, zostanie wyświetlony komunikat o błędzie, który nie zostanie zaakceptowany ani dodany do historii, chyba że zostanie poprawiony wiersz polecenia lub wykonaj polecenie AcceptLine lub ValidateAndAcceptLine ponownie podczas wyświetlania komunikatu o błędzie.
WsteczDeleteLine
- Cmd:
<Ctrl+Home>
- Emacs: unbound
Usuń tekst od początku danych wejściowych do kursora.
ForwardDeleteLine
- Cmd:
<Ctrl+End>
- Emacs: unbound
Usuń tekst z kursora na końcu danych wejściowych.
Wybierz pozycjęBackwardChar
- Cmd:
<Shift+LeftArrow>
- Emacs:
<Shift+LeftArrow>
Dostosuj bieżące zaznaczenie, aby uwzględnić poprzedni znak.
Wybierz pozycjęForwardChar
- Cmd:
<Shift+RightArrow>
- Emacs:
<Shift+RightArrow>
Dostosuj bieżące zaznaczenie, aby uwzględnić następny znak.
SelectBackwardWord
- Cmd:
<Shift+Ctrl+LeftArrow>
- Emacs:
<Alt+Shift+B>
Dostosuj bieżące zaznaczenie, aby uwzględnić poprzednie słowo.
Wybierz pozycjęForwardWord
- Cmd: bez ruchu przychodzącego
- Emacs:
<Alt+Shift+F>
Dostosuj bieżące zaznaczenie, aby uwzględnić następny wyraz przy użyciu elementu ForwardWord.
Wybierz pozycjęDalejWord
- Cmd:
<Shift+Ctrl+RightArrow>
- Emacs: unbound
Dostosuj bieżące zaznaczenie, aby uwzględnić następny wyraz przy użyciu polecenia NextWord.
Wybierz pozycjęShellForwardWord
- Cmd: bez ruchu przychodzącego
- Emacs: unbound
Dostosuj bieżące zaznaczenie, aby uwzględnić następny wyraz przy użyciu elementu ShellForwardWord.
Wybierz kolejno pozycjeShellDalejWord
- Cmd: bez ruchu przychodzącego
- Emacs: unbound
Dostosuj bieżące zaznaczenie, aby uwzględnić następny wyraz przy użyciu powłokiNextWord.
Wybierz pozycjęShellBackwardWord
- Cmd: bez ruchu przychodzącego
- Emacs: unbound
Dostosuj bieżące zaznaczenie, aby uwzględnić poprzednie słowo przy użyciu elementu ShellBackwardWord.
Wybierz pozycjęBackwardsLine
- Cmd:
<Shift+Home>
- Emacs:
<Shift+Home>
Dostosuj bieżące zaznaczenie, aby uwzględnić kursor na początku wiersza.
SelectLine
- Cmd:
<Shift+End>
- Emacs:
<Shift+End>
Dostosuj bieżące zaznaczenie, aby uwzględnić kursor na końcu wiersza.
Selectall
- Cmd:
<Ctrl+A>
- Emacs: unbound
Wybierz cały wiersz. Przesuwa kursor na końcu wiersza.
SelfInsert
- Cmd:
<a>
,<b>
, ... - Emacs:
<a>
,<b>
, ...
Wstaw wprowadzony klucz.
Ponów
- Cmd:
<Ctrl+Y>
- Emacs: unbound
Wykonaj ponownie wstawienie lub usunięcie, które zostało cofnięte przez cofnij.
Cofnij
- Cmd:
<Ctrl+Z>
- Emacs:
<Ctrl+_>
Cofnij poprzednie wstawienie lub usunięcie.
Historia
ClearHistory
- Cmd:
<Alt+F7>
- Emacs: unbound
Czyści historię w elemecie PSReadLine. Nie ma to wpływu na historię programu PowerShell.
PoprzedniHistory
- Cmd:
<UpArrow>
- Emacs:
<UpArrow>
lub<Ctrl+P>
Zastąp bieżące dane wejściowe poprzednim elementem z historii elementu PSReadLine.
NastępnyHistory
- Cmd:
<DownArrow>
- Emacs:
<DownArrow>
lub<Ctrl+N>
Zastąp bieżące dane wejściowe następnym elementem z historii PSReadLine.
ForwardSearchHistory
- Cmd:
<Ctrl+S>
- Emacs:
<Ctrl+S>
Search do przodu z bieżącego wiersza historii interaktywnie.
ReverseSearchHistory
- Cmd:
<Ctrl+R>
- Emacs:
<Ctrl+R>
Search wstecz od bieżącej linii historii interaktywnie.
HistorySearchBackward
- Cmd:
<F8>
- Emacs: unbound
Zastąp bieżące dane wejściowe poprzednim elementem z historii PSReadLine, który pasuje do znaków między rozpoczęciem a wejściem i kursorem.
HistoriaWyszukańcza
- Cmd:
<Shift+F8>
- Emacs: unbound
Zastąp bieżące dane wejściowe następnym elementem z historii PSReadLine, który pasuje do znaków między rozpoczęciem a wejściem i kursorem.
PoczątekHistory
- Cmd: unbound
- Emacs:
<Alt+<>
Zastąp bieżące dane wejściowe ostatnim elementem z historii PSReadLine.
EndOfHistory
- Cmd: unbound
- Emacs:
<Alt+>>
Zastąp bieżące dane wejściowe ostatnim elementem w historii PSReadLine, który jest prawdopodobnie pustym wejściem wprowadzonym przed wszelkimi poleceniami historii.
Uzupełnianie karty
TabCompleteNext
- Cmd:
<Tab>
- Emacs: unbound
Spróbuj ukończyć tekst otaczający kursor przy następnym dostępnym zakończeniu.
TabCompletePrevious
- Cmd:
<Shift-Tab>
- Emacs: unbound
Spróbuj ukończyć tekst otaczający kursor przy następnym poprzednim zakończeniu.
Ukończ
- Cmd: unbound
- Emacs:
<Tab>
Spróbuj wykonać uzupełnianie tekstu otaczającego kursor. Jeśli istnieje wiele możliwych do ukończenia, najdłuższy jednoznaczny prefiks jest używany do ukończenia. Jeśli próbujesz ukończyć najdłuższe jednoznaczne zakończenie, zostanie wyświetlona lista możliwych do ukończenia.
MenuUzupełnianie
- Cmd:
<Ctrl+Space>
- Emacs:
<Ctrl+Space>
Spróbuj wykonać uzupełnianie tekstu otaczającego kursor. Jeśli istnieje wiele możliwych dokończenia, zostanie wyświetlona lista możliwych dokończenia i można wybrać poprawne ukończenie przy użyciu klawiszy strzałek lub klawiszy Tab/Shift+Tab. Klawisz Escape i Ctrl+G anuluj zaznaczenie menu i przywróć wiersz do stanu przed wywołaniem MenuUzupełnianie.
Możliwe dopełnienia
- Cmd: unbound
- Emacs:
<Alt+Equals>
Wyświetl listę możliwych uzupełniania.
Ustaw znacznik
- Cmd: unbound
- Emacs:
<Alt+Space>
Oznacz bieżącą lokalizację kursora do użycia w kolejnym poleceniu edycji.
ExchangePointAndMark
- Cmd: unbound
- Emacs:
<Ctrl+X,Ctrl+X>
Kursor jest umieszczany w lokalizacji znacznika, a znacznik jest przenoszony do lokalizacji kursora.
Zabij/Yank
Kill i Yank działają w schowku w module PSReadLine. Istnieje bufor pierścieniowy o nazwie kill ring - zabity tekst jest dodawany do kill ring up i yank skopiuje tekst z najnowszego zabicia. YankPop przechodzi przez elementy w pierścieniu kill. Gdy pierścień zabicia jest pełny, nowe elementy zastępują najstarsze elementy. Operacja zabicia, która jest bezpośrednio poprzedzona inną operacją zabicia, dołącza poprzednie zabicie, zamiast dodawać nowy element lub zastępować element w pierścieniu kill. W ten sposób można wyciąć część linii, na przykład z wieloma operacjami KillWord, a następnie szarpnij je z powrotem gdzie indziej jako pojedynczy yank.
KillLine
- Cmd: unbound
- Emacs:
<Ctrl+K>
Wyczyść dane wejściowe z kursora na końcu wiersza. Wyczyszczonego tekstu umieszcza się w pierścieniu zabijania.
WsteczKillLine
- Cmd: unbound
- Emacs:
<Ctrl+U>
lub<Ctrl+X,Backspace>
Wyczyść dane wejściowe od początku danych wejściowych do kursora. Wyczyszczonego tekstu umieszcza się w pierścieniu zabijania.
KillWord
- Cmd: unbound
- Emacs:
<Alt+D>
Wyczyść dane wejściowe z kursora na końcu bieżącego wyrazu. Jeśli kursor znajduje się między wyrazami, dane wejściowe są czyszczone z kursora na końcu następnego wyrazu. Wyczyszczonego tekstu umieszcza się w pierścieniu zabijania.
WsteczKillWord
- Cmd: unbound
- Emacs:
<Alt+Backspace>
Wyczyść dane wejściowe od początku bieżącego wyrazu do kursora. Jeśli kursor znajduje się między wyrazami, dane wejściowe są czyszczone od początku poprzedniego słowa do kursora. Wyczyszczonego tekstu umieszcza się w pierścieniu zabijania.
ShellKillWord
- Cmd: unbound
- Emacs: unbound
Podobnie jak KillWord, z wyjątkiem granic słów są definiowane przez granice tokenu programu PowerShell.
ShellBackwardKillWord
- Cmd: unbound
- Emacs: unbound
Podobnie jak WsteczKillWord, z wyjątkiem granic słów są definiowane przez granice tokenu programu PowerShell.
UnixWordRubout
- Cmd: unbound
- Emacs:
<Ctrl+W>
Podobnie jak WsteczKillWord, z wyjątkiem granic słów są definiowane przez białe znaki.
KillRegion
- Cmd: unbound
- Emacs: unbound
Zabij tekst między kursorem a znacznikami.
Kopiuj
- Cmd:
<Ctrl+Shift+C>
- Emacs: unbound
Skopiuj wybrany region do schowka systemowego. Jeśli żaden region nie jest zaznaczony, skopiuj cały wiersz.
CopyOrCancelLine
- Cmd:
<Ctrl+C>
- Emacs:
<Ctrl+C>
Skopiuj zaznaczony tekst do schowka lub jeśli nie zaznaczono żadnego tekstu, anuluj edytowanie wiersza za pomocą polecenia CancelLine.
Wytnij
- Cmd:
<Ctrl+X>
- Emacs: unbound
Usuń zaznaczony region, umieszczając usunięty tekst w schowku systemowym.
Yank
- Cmd: unbound
- Emacs:
<Ctrl+Y>
Dodaj ostatnio zabity tekst do danych wejściowych.
YankPop
- Cmd: unbound
- Emacs:
<Alt+Y>
Jeśli poprzednia operacja to Yank lub YankPop, zastąp wcześniej yanked tekst następnym zabitym tekstem z pierścienia kill.
ClearKillRing
- Cmd: unbound
- Emacs: unbound
Zawartość pierścienia kill jest czyszczone.
Wklej
- Cmd:
<Ctrl+V>
- Emacs: unbound
Jest to podobne do Yank, ale używa schowka systemowego zamiast pierścienia kill.
[! WAŻNE]
W przypadku korzystania z funkcji Paste cała zawartość buforu schowka jest wklejona do buforu wejściowego elementu PSReadLine. Bufor wejściowy jest następnie przekazywany do analizatora programu PowerShell. Dane wejściowe wklejone przy użyciu metody wklejania prawym przyciskiem myszy aplikacji konsolowej są kopiowane do bufora wejściowego po jednym znaku naraz. Bufor wejściowy jest przekazywany do analizatora po skopiowaniu znaku nowego wiersza. W związku z tym dane wejściowe są analizowane po jednym wierszu naraz. Różnica między metodami wklejania powoduje różne zachowanie wykonywania.
YankLastArg
- Cmd:
<Alt+.>
- Emacs:
<Alt+.>
,<Alt+_>
Wstaw ostatni argument z poprzedniego polecenia w historii. Powtórzone operacje zastępują ostatni wstawiony argument ostatnim argumentem z poprzedniego polecenia (więc Alt+. Alt+. wstawia ostatni argument drugiego do ostatniego wiersza historii).
Z argumentem, po raz pierwszy YankLastArg zachowuje się jak YankNthArg. Negatywny argument w kolejnych YankLastArg wywołuje zmianę kierunku podczas przechodzenia przez historię. Na przykład po naciśnięciu klawisza Alt+. zbyt wiele razy możesz wpisać Alt+- Alt+. aby odwrócić kierunek.
Argumenty są oparte na tokenach programu PowerShell.
YankNthArg
- Cmd: unbound
- Emacs:
<Alt+Ctrl+Y>
Wstaw pierwszy argument (a nie nazwę polecenia) poprzedniego polecenia w historii.
Z argumentem wstaw n-ty argument, gdzie 0 jest zwykle poleceniem. Argumenty ujemne zaczynają się od końca.
Argumenty są oparte na tokenach programu PowerShell.
Różne
Przerwanie
- Cmd: unbound
- Emacs:
<Ctrl+G>
Przerwij bieżącą akcję; na przykład zatrzymaj wyszukiwanie historii interakcyjnej. Nie anuluje danych wejściowych, takich jak CancelLine.
Wyszukiwanie znaków
- Cmd:
<F3>
- Emacs:
<Ctrl+]>
Odczytywanie klucza i wyszukiwanie dalej dla tego znaku. Za pomocą argumentu wyszukaj n.wystąpienie tego argumentu. Przy użyciu argumentu ujemnego przeszukuje do tyłu.
CharacterSearchBackward
- Cmd:
<Shift+F3>
- Emacs:
<Alt+Ctrl+]>
Podobnie jak CharacterSearch, ale przeszukuje do tyłu. Przy użyciu argumentu ujemnego wyszukuje dalej.
Wyczyść ekran
- Cmd:
<Ctrl+L>
- Emacs:
<Ctrl+L>
Czyści ekran i wyświetla bieżący monit i dane wejściowe w górnej części ekranu.
DigitArgument
- Cmd: unbound
- Emacs:
<Alt+[0..9]>
,<any char>
,<Alt+->
Służy do przekazywania argumentów liczbowych do funkcji takich jak CharacterSearch lub YankNthArg. Alt+- przełącza argument na ujemny/nieujemny. Aby wprowadzić 80 znaków "*", możesz wpisać Alt+8 Alt+0 *.
CaptureScreen
- Cmd: unbound
- Emacs: unbound
Kopiuje zaznaczone wiersze do schowka w formatach tekstowych i RTF. Użyj klawiszy strzałek w górę/w dół do pierwszego wiersza, aby wybrać, a następnie naciśnij klawisze Shift+UpArrow/Shift+DownArrow, aby wybrać wiele wierszy. Po wybraniu naciśnij klawisz Enter, aby skopiować tekst. Escape/Ctrl+C/Ctrl+G anuluj operację, więc nic nie jest kopiowane do schowka.
InvokePrompt
- Cmd: unbound
- Emacs: unbound
Usuwa bieżący monit i wywołuje funkcję monitu, aby ponownie odtworzyć monit. Przydatne w przypadku niestandardowych procedur obsługi kluczy zmieniających stan, takich jak zmiana bieżącego katalogu.
WhatIsKey
- Cmd:
<Alt+?>
- Emacs:
<Alt+?>
Odczytaj klucz lub akord i wyświetl powiązanie klucza.
ShowKeyBindings
- Cmd:
<Ctrl+Alt+?>
- Emacs:
<Ctrl+Alt+?>
Pokaż wszystkie obecnie powiązane klucze.
ScrollDisplayUp
- Cmd:
<PageUp>
- Emacs:
<PageUp>
Przewiń ekran w górę.
ScrollDisplayUpLine
- Cmd:
<Ctrl+PageUp>
- Emacs:
<Ctrl+PageUp>
Przewiń ekran w górę o jeden wiersz.
ScrollDisplayDown
- Cmd:
<PageDown>
- Emacs:
<PageDown>
Przewiń ekran w dół o jeden ekran.
ScrollDisplayDownLine
- Cmd:
<Ctrl+PageDown>
- Emacs:
<Ctrl+PageDown>
Przewiń ekran w dół o jeden wiersz.
ScrollDisplayTop
- Cmd: bez ruchu przychodzącego
- Emacs:
<Ctrl+Home>
Przewiń ekran do góry.
ScrollDisplayToCursor
- Cmd: bez ruchu przychodzącego
- Emacs:
<Ctrl+End>
Przewiń ekran do kursora.
Powiązania kluczy niestandardowych
Funkcja PSReadLine obsługuje powiązania kluczy niestandardowych przy użyciu polecenia cmdlet Set-PSReadLineKeyHandler
. Większość powiązań kluczy niestandardowych wywołuje jedną z powyższych funkcji, na przykład
Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward
Możesz powiązać element ScriptBlock z kluczem. ScriptBlock może zrobić prawie wszystko, co chcesz. Oto kilka przydatnych przykładów
- edytowanie wiersza polecenia
- otwieranie nowego okna (np. pomoc)
- zmienianie katalogów bez zmieniania wiersza polecenia
Element ScriptBlock otrzymuje dwa argumenty:
$key
- Obiekt [ConsoleKeyInfo], który jest kluczem, który wyzwolił powiązanie niestandardowe. Jeśli powiążesz ten sam element ScriptBlock z wieloma kluczami i musisz wykonać różne akcje w zależności od klucza, możesz sprawdzić $key. Wiele powiązań niestandardowych ignoruje ten argument.$arg
- Dowolny argument. Najczęściej jest to argument liczby całkowitej, który użytkownik przekazuje z powiązań kluczy DigitArgument. Jeśli powiązanie nie akceptuje argumentów, uzasadnione jest zignorowanie tego argumentu.
Przyjrzyjmy się przykładowi, który dodaje wiersz polecenia do historii bez jej wykonywania. Jest to przydatne, gdy zdajesz sobie sprawę, że nie pamiętasz o zrobieniu czegoś, ale nie chcesz ponownie wprowadzać wprowadzonego wiersza polecenia.
$parameters = @{
Key = 'Alt+w'
BriefDescription = 'SaveInHistory'
LongDescription = 'Save current line in history but do not execute'
ScriptBlock = {
param($key, $arg) # The arguments are ignored in this example
# GetBufferState gives us the command line (with the cursor position)
$line = $null
$cursor = $null
[Microsoft.PowerShell.PSConsoleReadLine]::GetBufferState([ref]$line,
[ref]$cursor)
# AddToHistory saves the line in history, but does not execute it.
[Microsoft.PowerShell.PSConsoleReadLine]::AddToHistory($line)
# RevertLine is like pressing Escape.
[Microsoft.PowerShell.PSConsoleReadLine]::RevertLine()
}
}
Set-PSReadLineKeyHandler @parameters
Więcej przykładów można zobaczyć w pliku SamplePSReadLineProfile.ps1
zainstalowanym w folderze modułu PSReadLine.
Większość powiązań kluczy używa niektórych funkcji pomocnika do edycji wiersza polecenia. Te interfejsy API są udokumentowane w następnej sekcji.
Interfejsy API obsługi powiązań kluczy niestandardowych
Następujące funkcje są publiczne w programie Microsoft.PowerShell.PSConsoleReadLine, ale nie mogą być bezpośrednio powiązane z kluczem. Większość z tych elementów jest przydatna w powiązaniach kluczy niestandardowych.
void AddToHistory(string command)
Dodaj wiersz polecenia do historii bez jej wykonywania.
void ClearKillRing()
Wyczyść pierścień zabijania. Jest to najczęściej używane do testowania.
void Delete(int start, int length)
Usuń znaki długości od początku. Ta operacja obsługuje cofanie/ponowne wykonanie.
void Ding()
Wykonaj akcję Ding na podstawie preferencji użytkowników.
void GetBufferState([ref] string input, [ref] int cursor)
void GetBufferState([ref] Ast ast, [ref] Token[] tokens,
[ref] ParseError[] parseErrors, [ref] int cursor)
Te dwie funkcje pobierają przydatne informacje o bieżącym stanie buforu wejściowego. Pierwszy jest częściej używany w prostych przypadkach. Drugi jest używany, jeśli powiązanie robi coś bardziej zaawansowanego za pomocą narzędzia Ast.
IEnumerable[Microsoft.PowerShell.KeyHandler]
GetKeyHandlers(bool includeBound, bool includeUnbound)
Ta funkcja jest używana przez Get-PSReadLineKeyHandler i prawdopodobnie nie jest przydatna w powiązaniu klucza niestandardowego.
Microsoft.PowerShell.PSConsoleReadLineOptions GetOptions()
Ta funkcja jest używana przez Get-PSReadLineOption i prawdopodobnie nie jest zbyt przydatna w powiązaniu klucza niestandardowego.
void GetSelectionState([ref] int start, [ref] int length)
Jeśli nie ma zaznaczenia w wierszu polecenia, -1 zostanie zwrócona zarówno w obszarze początkowym, jak i długości. Jeśli w wierszu polecenia jest zaznaczony wybór, zwracany jest początek i długość zaznaczenia.
void Insert(char c)
void Insert(string s)
Wstaw znak lub ciąg w kursorze. Ta operacja obsługuje cofanie/ponowne wykonanie.
string ReadLine(runspace remoteRunspace,
System.Management.Automation.EngineIntrinsics engineIntrinsics)
Jest to główny punkt wejścia do elementu PSReadLine. Nie obsługuje rekursji, więc nie jest przydatna w powiązaniu klucza niestandardowego.
void RemoveKeyHandler(string[] key)
Ta funkcja jest używana przez Remove-PSReadLineKeyHandler i prawdopodobnie nie jest zbyt przydatna w powiązaniu klucza niestandardowego.
void Replace(int start, int length, string replacement)
Zastąp część danych wejściowych. Ta operacja obsługuje cofanie/ponowne wykonanie. Jest to preferowane w przypadku usuwania, a następnie wstaw, ponieważ jest traktowane jako pojedyncza akcja do cofnięcia.
void SetCursorPosition(int cursor)
Przenieś kursor do danego przesunięcia. Ruch kursora nie jest śledzony w celu cofnięcia.
void SetOptions(Microsoft.PowerShell.SetPSReadLineOption options)
Ta funkcja jest metodą pomocnika używaną przez polecenie cmdlet Set-PSReadLineOption, ale może być przydatna dla niestandardowego powiązania klucza, które chce tymczasowo zmienić ustawienie.
bool TryGetArgAsInt(System.Object arg, [ref] int numericArg,
int defaultNumericArg)
Ta metoda pomocnika jest używana w przypadku powiązań niestandardowych, które honoruje wartość DigitArgument. Typowe wywołanie wygląda następująco:
[int]$numericArg = 0
[Microsoft.PowerShell.PSConsoleReadLine]::TryGetArgAsInt($arg,
[ref]$numericArg, 1)
UWAGA
ZGODNOŚĆ PROGRAMU POWERSHELL
Funkcja PSReadLine wymaga programu PowerShell 3.0 lub nowszego oraz hosta konsoli. Nie działa w programie PowerShell ISE. Działa w konsoli Visual Studio Code.
HISTORIA POLECEŃ
Funkcja PSReadLine przechowuje plik historii zawierający wszystkie polecenia i dane wprowadzone z wiersza polecenia. Może to zawierać poufne dane, w tym hasła. Jeśli na przykład używasz ConvertTo-SecureString
polecenia cmdlet, hasło jest rejestrowane w pliku historii jako zwykły tekst. Pliki historii to plik o nazwie $($host.Name)_history.txt
. W systemach Windows plik historii jest przechowywany w lokalizacji $env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine
.
OPINIE & WSPÓŁTWORZENIA ELEMENTU PSReadLine
Funkcja PSReadLine w usłudze GitHub
Możesz przesłać żądanie ściągnięcia lub przesłać opinię na stronie usługi GitHub.
ZOBACZ RÓWNIEŻ
Element PSReadLine jest silnie pod wpływem biblioteki odczytu GNU.