PSReadLine
about_PSReadLine
Kurze Beschreibung
PSReadLine bietet eine verbesserte Befehlszeilenbearbeitung in der PowerShell-Konsole.
Lange Beschreibung
PSReadLine 2.0 bietet eine leistungsstarke Befehlszeilenbearbeitung für die PowerShell-Konsole. Sie bietet:
- Syntaxfarben der Befehlszeile
- Visueller Hinweis auf Syntaxfehler
- Eine bessere mehrzeilige Oberfläche (sowohl Bearbeitung als auch Verlauf)
- Anpassbare Schlüsselbindungen
- Cmd- und Emacs-Modi
- Viele Konfigurationsoptionen
- Bash-Stilvervollständigung (optional im Cmd-Modus, Standard im Emacs-Modus)
- Emacs Yank/Kill-Ring
- PowerShell-tokenbasiertes "Wort" verschieben und beenden
PSReadLine erfordert PowerShell 3.0 oder höher und den Konsolenhost. Es funktioniert nicht in PowerShell ISE. Es funktioniert in der Konsole von Visual Studio Code.
Hinweis
Ab PowerShell 7.0 überspringt PowerShell das automatische Laden von PSReadLine unter Windows, wenn ein Sprachausgabeprogramm erkannt wird. Derzeit funktioniert PSReadLine nicht gut mit den Sprachausgaben. Das Standardrendering und die Formatierung von PowerShell 7.0 unter Windows funktionieren ordnungsgemäß. Sie können das Modul bei Bedarf manuell laden.
Die folgenden Funktionen sind in der Klasse [Microsoft.PowerShell.PSConsoleReadLine] verfügbar.
Grundlegende Bearbeitungsfunktionen
Abbruch
Aktuelle Aktion abbrechen, z. B. inkrementelle Verlaufssuche.
- Emacs:
<Ctrl+g>
AcceptAndGetNext
Versuchen Sie, die aktuelle Eingabe auszuführen. Wenn sie ausgeführt werden kann (z. B. AcceptLine), rufen Sie das nächste Element aus dem Verlauf ab, wenn ReadLine das nächste Mal aufgerufen wird.
- Emacs:
<Ctrl+o>
AcceptLine
Versuchen Sie, die aktuelle Eingabe auszuführen. Wenn die aktuelle Eingabe unvollständig ist (z. B. fehlende schließende Klammern, Klammern oder Anführungszeichen), wird die Fortsetzungsaufforderung in der nächsten Zeile angezeigt, und PSReadLine wartet auf die Bearbeitung der aktuellen Eingabe.
- Befehl:
<Enter>
- Emacs:
<Enter>
- Vi-Einfügemodus:
<Enter>
Addline
Die Fortsetzungsaufforderung wird in der nächsten Zeile angezeigt, und PSReadLine wartet auf schlüssel zum Bearbeiten der aktuellen Eingabe. Dies ist nützlich, um mehrzeilige Eingaben als einen einzelnen Befehl einzugeben, auch wenn eine einzelne Zeile die Eingabe selbst abgeschlossen hat.
- Befehl:
<Shift+Enter>
- Emacs:
<Shift+Enter>
- Vi-Einfügemodus:
<Shift+Enter>
- Vi-Befehlsmodus:
<Shift+Enter>
BackwardDeleteChar
Löschen Sie das Zeichen vor dem Cursor.
- Cmd:
<Backspace>
,<Ctrl+h>
- Emacs:
<Backspace>
,<Ctrl+Backspace>
,<Ctrl+h>
- Vi-Einfügemodus:
<Backspace>
- Vi-Befehlsmodus:
<X>
,<d,h>
BackwardDeleteLine
Wie BackwardKillLine – löscht Text vom Punkt bis zum Anfang der Zeile, legt den gelöschten Text jedoch nicht in den Kill-Ring ein.
- Befehl:
<Ctrl+Home>
- Vi-Einfügemodus:
<Ctrl+u>
,<Ctrl+Home>
- Vi-Befehlsmodus:
<Ctrl+u>
,<Ctrl+Home>
,<d,0>
BackwardDeleteWord
Löscht das vorherige Wort.
- Vi-Befehlsmodus:
<Ctrl+w>
,<d,b>
BackwardKillLine
Löschen Sie die Eingabe vom Anfang der Eingabe bis zum Cursor. Der gelöschte Text wird im Kill-Ring platziert.
- Emacs:
<Ctrl+u>
,<Ctrl+x,Backspace>
BackwardKillWord
Löschen Sie die Eingabe vom Anfang des aktuellen Worts bis zum Cursor. Wenn sich der Cursor zwischen Wörtern befindet, wird die Eingabe vom Anfang des vorherigen Worts zum Cursor gelöscht. Der gelöschte Text wird im Kill-Ring platziert.
- Befehl:
<Ctrl+Backspace>
- Emacs:
<Alt+Backspace>
,<Escape,Backspace>
- Vi-Einfügemodus:
<Ctrl+Backspace>
- Vi-Befehlsmodus:
<Ctrl+Backspace>
CancelLine
Brechen Sie die aktuelle Eingabe ab, und lassen Sie die Eingabe auf dem Bildschirm, kehren sie jedoch zum Host zurück, damit die Eingabeaufforderung erneut ausgewertet wird.
- Vi-Einfügemodus:
<Ctrl+c>
- Vi-Befehlsmodus:
<Ctrl+c>
Kopieren
Kopieren Sie den ausgewählten Bereich in die Systemablage. Wenn kein Bereich ausgewählt ist, kopieren Sie die ganze Zeile.
- Befehl:
<Ctrl+C>
CopyOrCancelLine
Wenn Text ausgewählt ist, kopieren Sie sie in die Zwischenablage, andernfalls brechen Sie die Zeile ab.
- Befehl:
<Ctrl+c>
- Emacs:
<Ctrl+c>
Ausschneiden
Löscht den ausgewählten Bereich, indem gelöschter Text in die Systemzwischenablage eingefügt wird.
- Befehl:
<Ctrl+x>
DeleteChar
Löschen Sie das Zeichen unter dem Cursor.
- Befehl:
<Delete>
- Emacs:
<Delete>
- Vi-Einfügemodus:
<Delete>
- Vi-Befehlsmodus:
<Delete>
,<x>
,<d,l>
,<d,Space>
DeleteCharOrExit
Löschen Sie das Zeichen unter dem Cursor, oder beenden Sie den Prozess, wenn die Zeile leer ist.
- Emacs:
<Ctrl+d>
DeleteEndOfWord
Bis zum Ende des Worts löschen.
- Vi-Befehlsmodus:
<d,e>
DeleteLine
Löscht die aktuelle Zeile und aktiviert das Rückgängigmachen.
- Vi-Befehlsmodus:
<d,d>
DeleteLineToFirstChar
Löscht Text vom Cursor an das erste nicht leere Zeichen der Zeile.
- Vi-Befehlsmodus:
<d,^>
DeleteToEnd
Bis zum Ende der Zeile löschen.
- Vi-Befehlsmodus:
<D>
,<d,$>
DeleteWord
Löschen Sie das nächste Wort.
- Vi-Befehlsmodus:
<d,w>
ForwardDeleteLine
Wie ForwardKillLine löscht Text vom Punkt bis zum Ende der Zeile, legt den gelöschten Text jedoch nicht in den Kill-Ring ein.
- Befehl:
<Ctrl+End>
- Vi-Einfügemodus:
<Ctrl+End>
- Vi-Befehlsmodus:
<Ctrl+End>
InsertLineAbove
Über der aktuellen Zeile wird unabhängig davon, wo sich der Cursor in der aktuellen Zeile befindet, eine neue leere Zeile erstellt. Der Cursor bewegt sich an den Anfang der neuen Zeile.
- Befehl:
<Ctrl+Enter>
InsertLineBelow
Unter der aktuellen Zeile wird unabhängig davon, wo sich der Cursor in der aktuellen Zeile befindet, eine neue leere Zeile erstellt. Der Cursor bewegt sich an den Anfang der neuen Zeile.
- Befehl:
<Shift+Ctrl+Enter>
InvertCase
Umkehren Sie die Groß-/Kleinschreibung des aktuellen Zeichens, und wechseln Sie zum nächsten Zeichen.
- Vi-Befehlsmodus:
<~>
KillLine
Löschen Sie die Eingabe vom Cursor bis zum Ende der Eingabe. Der gelöschte Text wird im Kill-Ring platziert.
- Emacs:
<Ctrl+k>
KillRegion
Beenden Sie den Text zwischen dem Cursor und der Markierung.
- Die Funktion ist ungebunden.
KillWord
Löschen Sie die Eingabe vom Cursor bis zum Ende des aktuellen Worts. Wenn sich der Cursor zwischen Wörtern befindet, wird die Eingabe vom Cursor bis zum Ende des nächsten Worts gelöscht. Der gelöschte Text wird im Kill-Ring platziert.
- Befehl:
<Ctrl+Delete>
- Emacs:
<Alt+d>
,<Escape,d>
- Vi-Einfügemodus:
<Ctrl+Delete>
- Vi-Befehlsmodus:
<Ctrl+Delete>
Einfügen
Fügen Sie Text aus der Systemablage ein.
- Cmd:
<Ctrl+v>
,<Shift+Insert>
- Vi-Einfügemodus:
<Ctrl+v>
- Vi-Befehlsmodus:
<Ctrl+v>
Wichtig
Bei Verwendung der Funktion Einfügen wird der gesamte Inhalt des Zwischenablagepuffers in den Eingabepuffer von PSReadLine eingefügt. Der Eingabepuffer wird dann an den PowerShell-Parser übergeben. Eingaben, die mit der Rechtsklick-Einfügemethode der Konsolenanwendung eingefügt werden, werden zeichenweise in den Eingabepuffer kopiert. Der Eingabepuffer wird an den Parser übergeben, wenn ein Zeilenumbruchzeichen kopiert wird. Daher wird die Eingabe zeile für Zeile analysiert. Der Unterschied zwischen Einfügemethoden führt zu einem unterschiedlichen Ausführungsverhalten.
PasteAfter
Fügen Sie die Zwischenablage nach dem Cursor ein, und bewegen Sie den Cursor an das Ende des eingefügten Texts.
- Vi-Befehlsmodus:
<p>
PasteBefore
Fügen Sie die Zwischenablage vor dem Cursor ein, und bewegen Sie den Cursor an das Ende des eingefügten Texts.
- Vi-Befehlsmodus:
<P>
PrependAndAccept
Fügen Sie einem "#" voran, und akzeptieren Sie die Zeile.
- Vi-Befehlsmodus:
<#>
Wiederholen
Rückgängigmachen eines Rückgängig-Vorgangs.
- Befehl:
<Ctrl+y>
- Vi-Einfügemodus:
<Ctrl+y>
- Vi-Befehlsmodus:
<Ctrl+y>
RepeatLastCommand
Wiederholen Sie die letzte Textänderung.
- Vi-Befehlsmodus:
<.>
RevertLine
Stellt die gesamte Eingabe auf die aktuelle Eingabe zurück.
- Befehl:
<Escape>
- Emacs:
<Alt+r>
,<Escape,r>
ShellBackwardKillWord
Löschen Sie die Eingabe vom Anfang des aktuellen Worts bis zum Cursor. Wenn sich der Cursor zwischen Wörtern befindet, wird die Eingabe vom Anfang des vorherigen Worts zum Cursor gelöscht. Der gelöschte Text wird im Kill-Ring platziert.
Die Funktion ist ungebunden.
ShellKillWord
Löschen Sie die Eingabe vom Cursor bis zum Ende des aktuellen Worts. Wenn sich der Cursor zwischen Wörtern befindet, wird die Eingabe vom Cursor bis zum Ende des nächsten Worts gelöscht. Der gelöschte Text wird im Kill-Ring platziert.
Die Funktion ist ungebunden.
SwapCharacters
Tauschen Sie das aktuelle zeichen und das davor.
- Emacs:
<Ctrl+t>
- Vi-Einfügemodus:
<Ctrl+t>
- Vi-Befehlsmodus:
<Ctrl+t>
Rückgängig
Rückgängigmachen einer vorherigen Bearbeitung.
- Befehl:
<Ctrl+z>
- Emacs:
<Ctrl+_>
,<Ctrl+x,Ctrl+u>
- Vi-Einfügemodus:
<Ctrl+z>
- Vi-Befehlsmodus:
<Ctrl+z>
,<u>
UndoAll
Rückgängigmachen aller vorherigen Änderungen für Zeile.
- Vi-Befehlsmodus:
<U>
UnixWordRubout
Löschen Sie die Eingabe vom Anfang des aktuellen Worts auf den Cursor. Wenn sich der Cursor zwischen Wörtern befindet, wird die Eingabe vom Anfang des vorherigen Worts auf den Cursor gelöscht. Der gelöschte Text wird im Killring platziert.
- Emacs:
<Ctrl+w>
ValidateAndAcceptLine
Versuchen Sie, die aktuelle Eingabe auszuführen. Wenn die aktuelle Eingabe unvollständig ist (z. B. fehlende schließende Klammern, Klammern oder Anführungszeichen), wird die Fortsetzungsaufforderung in der nächsten Zeile angezeigt, und PSReadLine wartet, bis Schlüssel die aktuelle Eingabe bearbeiten.
- Emacs:
<Ctrl+m>
ViAcceptLine
Übernehmen Sie die Zeile, und wechseln Sie zum Einfügemodus.
- Vi-Befehlsmodus:
<Enter>
ViAcceptLineOrExit
Wie DeleteCharOrExit im Emacs-Modus, akzeptiert aber die Zeile, anstatt ein Zeichen zu löschen.
- Vi Einfügemodus:
<Ctrl+d>
- Vi-Befehlsmodus:
<Ctrl+d>
ViAppendLine
Unterhalb der aktuellen Zeile wird eine neue Zeile eingefügt.
- Vi-Befehlsmodus:
<o>
ViBackwardDeleteGlob
Löscht das vorherige Wort, wobei nur Leerzeichen als Worttrennzeichen verwendet werden.
- Vi-Befehlsmodus:
<d,B>
ViBackwardGlob
Verschiebt den Cursor zurück an den Anfang des vorherigen Worts, wobei nur Leerzeichen als Trennzeichen verwendet werden.
- Vi-Befehlsmodus:
<B>
ViDeleteBrace
Suchen Sie die übereinstimmende Klammer, Klammer oder eckige Klammer, und löschen Sie alle Darin enthaltenen Inhalte, einschließlich der Klammer.
- Vi-Befehlsmodus:
<d,%>
ViDeleteEndOfGlob
Löschen Sie bis zum Ende des Worts.
- Vi-Befehlsmodus:
<d,E>
ViDeleteGlob
Löschen Sie den nächsten Glob (leerzeichentrenntes Wort).
- Vi-Befehlsmodus:
<d,W>
ViDeleteToBeforeChar
Löscht bis zum angegebenen Zeichen.
- Vi-Befehlsmodus:
<d,t>
ViDeleteToBeforeCharBackward
Löscht bis zum angegebenen Zeichen.
- Vi-Befehlsmodus:
<d,T>
ViDeleteToChar
Löscht bis zum angegebenen Zeichen.
- Vi-Befehlsmodus:
<d,f>
ViDeleteToCharBackward
Löscht rückwärts bis zum angegebenen Zeichen.
- Vi-Befehlsmodus:
<d,F>
ViInsertAtBegining
Wechseln Sie zum Einfügemodus, und positionieren Sie den Cursor am Anfang der Zeile.
- Vi-Befehlsmodus:
<I>
ViInsertAtEnd
Wechseln Sie zum Einfügemodus, und positionieren Sie den Cursor am Ende der Zeile.
- Vi-Befehlsmodus:
<A>
ViInsertLine
Über der aktuellen Zeile wird eine neue Zeile eingefügt.
- Vi-Befehlsmodus:
<O>
ViInsertWithAppend
Fügen Sie an der aktuellen Zeilenposition an.
- Vi-Befehlsmodus:
<a>
ViInsertWithDelete
Löschen Sie das aktuelle Zeichen, und wechseln Sie zum Einfügemodus.
- Vi-Befehlsmodus:
<s>
ViJoinLines
Verknüpft die aktuelle Zeile und die nächste Zeile.
- Vi-Befehlsmodus:
<J>
ViReplaceLine
Löschen Sie die gesamte Befehlszeile.
- Vi-Befehlsmodus:
<S>
,<c,c>
ViReplaceToBeforeChar
Ersetzt bis zum angegebenen Zeichen.
- Vi-Befehlsmodus:
<c,t>
ViReplaceToBeforeCharBackward
Ersetzt bis zum angegebenen Zeichen.
- Vi-Befehlsmodus:
<c,T>
ViReplaceToChar
Löscht bis zum angegebenen Zeichen.
- Vi-Befehlsmodus:
<c,f>
ViReplaceToCharBackward
Ersetzt bis zum angegebenen Zeichen.
- Vi-Befehlsmodus:
<c,F>
ViYankBeginningOfLine
Yank vom Anfang des Puffers bis zum Cursor.
- Vi-Befehlsmodus:
<y,0>
ViYankEndOfGlob
Yank vom Cursor bis zum Ende der WORD(s).
- Vi-Befehlsmodus:
<y,E>
ViYankEndOfWord
Yank vom Cursor bis zum Ende des Worts.
- Vi-Befehlsmodus:
<y,e>
ViYankLeft
Yank Zeichen links vom Cursor.
- Vi-Befehlsmodus:
<y,h>
ViYankLine
Yank den gesamten Puffer.
- Vi-Befehlsmodus:
<y,y>
ViYankNextGlob
Yank vom Cursor zum Anfang der nächsten WORD(s).
- Vi-Befehlsmodus:
<y,W>
ViYankNextWord
Ziehe das Wort(en) nach dem Cursor.
- Vi-Befehlsmodus:
<y,w>
ViYankPercent
Yank to/from matching brace.
- Vi-Befehlsmodus:
<y,%>
ViYankPreviousGlob
Yank vom Anfang der WORD(s) zum Cursor.
- Vi-Befehlsmodus:
<y,B>
ViYankPreviousWord
Ziehe die Wörter vor den Cursor.
- Vi-Befehlsmodus:
<y,b>
ViYankRight
Yank-Zeichen unter und rechts neben dem Cursor.
- Vi-Befehlsmodus:
<y,l>
,<y,Space>
ViYankToEndOfLine
Yank vom Cursor bis zum Ende des Puffers.
- Vi-Befehlsmodus:
<y,$>
ViYankToFirstChar
Yank vom ersten Nicht-Leerzeichen auf den Cursor.
- Vi-Befehlsmodus:
<y,^>
Yank
Fügen Sie der Eingabe den zuletzt beendeten Text hinzu.
- Emacs:
<Ctrl+y>
YankLastArg
Yank das letzte Argument aus der vorherigen Verlaufszeile. Bei einem Argument verhält sich das erste Mal, wenn es aufgerufen wird, genau wie YankNthArg. Wenn sie mehrmals aufgerufen wird, durchlaufen sie stattdessen den Verlauf und arg legt die Richtung fest (negativ kehrt die Richtung um.)
- Befehl:
<Alt+.>
- Emacs:
<Alt+.>
,<Alt+_>
,<Escape,.>
,<Escape,_>
YankNthArg
Verwenden Sie das erste Argument (nach dem Befehl) aus der vorherigen Verlaufszeile. Yank mit einem Argument das nth-Argument (ab 0), wenn das Argument negativ ist, beginnen Sie mit dem letzten Argument.
- Emacs:
<Ctrl+Alt+y>
,<Escape,Ctrl+y>
YankPop
Wenn der vorherige Vorgang Yank oder YankPop war, ersetzen Sie den zuvor yannten Text durch den nächsten getöteten Text aus dem Kill-Ring.
- Emacs:
<Alt+y>
,<Escape,y>
Cursorbewegungsfunktionen
BackwardChar
Bewegen Sie den Cursor um ein Zeichen nach links. Dadurch kann der Cursor in die vorherige Zeile der mehrzeiligen Eingabe verschoben werden.
- Befehl:
<LeftArrow>
- Emacs:
<LeftArrow>
,<Ctrl+b>
- Vi Einfügemodus:
<LeftArrow>
- Vi-Befehlsmodus:
<LeftArrow>
,<Backspace>
,<h>
BackwardWord
Bewegen Sie den Cursor zurück an den Anfang des aktuellen Worts, oder, wenn zwischen Wörtern, der Anfang des vorherigen Worts. Word Grenzen werden durch einen konfigurierbaren Satz von Zeichen definiert.
- Befehl:
<Ctrl+LeftArrow>
- Emacs:
<Alt+b>
,<Escape,b>
- Vi Einfügemodus:
<Ctrl+LeftArrow>
- Vi-Befehlsmodus:
<Ctrl+LeftArrow>
BeginningOfLine
Wenn die Eingabe über mehrere Zeilen verfügt, bewegen Sie sich zum Anfang der aktuellen Zeile oder, wenn sie bereits am Anfang der Zeile steht, zum Anfang der Eingabe. Wenn die Eingabe über eine einzelne Zeile verfügt, wechseln Sie zum Anfang der Eingabe.
- Befehl:
<Home>
- Emacs:
<Home>
,<Ctrl+a>
- Vi Einfügemodus:
<Home>
- Vi-Befehlsmodus:
<Home>
EndOfLine
Wenn die Eingabe über mehrere Zeilen verfügt, bewegen Sie sich an das Ende der aktuellen Zeile, oder bewegen Sie sich, wenn bereits am Ende der Zeile, an das Ende der Eingabe. Wenn die Eingabe über eine einzelne Zeile verfügt, bewegen Sie sich an das Ende der Eingabe.
- Befehl:
<End>
- Emacs:
<End>
,<Ctrl+e>
- Vi Einfügemodus:
<End>
ForwardChar
Bewegen Sie den Cursor um ein Zeichen nach rechts. Dadurch kann der Cursor auf die nächste Zeile der mehrzeiligen Eingabe verschoben werden.
- Befehl:
<RightArrow>
- Emacs:
<RightArrow>
,<Ctrl+f>
- Vi Einfügemodus:
<RightArrow>
- Vi-Befehlsmodus:
<RightArrow>
,<Space>
,<l>
ForwardWord
Bewegen Sie den Cursor an das Ende des aktuellen Worts oder wenn zwischen Wörtern, an das Ende des nächsten Worts. Word Grenzen werden durch einen konfigurierbaren Satz von Zeichen definiert.
- Emacs:
<Alt+f>
,<Escape,f>
GotoBrace
Wechseln Sie zur entsprechenden Klammer, Klammer oder eckigen Klammer.
- Befehl:
<Ctrl+]>
- Vi Einfügemodus:
<Ctrl+]>
- Vi-Befehlsmodus:
<Ctrl+]>
GotoColumn
Wechseln Sie zu der spalte, die von arg angegeben wird.
- Vi-Befehlsmodus:
<|>
GotoFirstNonBlankOfLine
Bewegen Sie den Cursor auf das erste nicht leere Zeichen in der Zeile.
- Vi-Befehlsmodus:
<^>
MoveToEndOfLine
Bewegen Sie den Cursor an das Ende der Eingabe.
- Vi-Befehlsmodus:
<End>
,<$>
NextLine
Bewegen Sie den Cursor zur nächsten Zeile.
- Die Funktion ist ungebunden.
NextWord
Bewegen Sie den Cursor an den Anfang des nächsten Worts. Word Grenzen werden durch einen konfigurierbaren Satz von Zeichen definiert.
- Befehl:
<Ctrl+RightArrow>
- Vi Einfügemodus:
<Ctrl+RightArrow>
- Vi-Befehlsmodus:
<Ctrl+RightArrow>
NextWordEnd
Bewegen Sie den Cursor an das Ende des aktuellen Worts oder wenn zwischen Wörtern, an das Ende des nächsten Worts. Word Grenzen werden durch einen konfigurierbaren Satz von Zeichen definiert.
- Vi-Befehlsmodus:
<e>
PreviousLine
Bewegen Sie den Cursor zur vorherigen Zeile.
- Die Funktion ist ungebunden.
ShellBackwardWord
Bewegen Sie den Cursor zurück an den Anfang des aktuellen Worts, oder, wenn zwischen Wörtern, der Anfang des vorherigen Worts. Word Grenzen werden durch PowerShell-Token definiert.
- Die Funktion ist ungebunden.
ShellForwardWord
Bewegen Sie den Cursor an den Anfang des nächsten Worts. Word Grenzen werden durch PowerShell-Token definiert.
- Die Funktion ist ungebunden.
ShellNextWord
Bewegen Sie den Cursor an das Ende des aktuellen Worts oder wenn zwischen Wörtern, an das Ende des nächsten Worts. Word Grenzen werden durch PowerShell-Token definiert.
- Die Funktion ist ungebunden.
ViBackwardWord
Bewegen Sie den Cursor zurück an den Anfang des aktuellen Worts, oder, wenn zwischen Wörtern, der Anfang des vorherigen Worts. Word Grenzen werden durch einen konfigurierbaren Satz von Zeichen definiert.
- Vi-Befehlsmodus:
<b>
ViEndOfGlob
Verschiebt den Cursor an das Ende des Worts, wobei nur Leerzeichen als Trennzeichen verwendet werden.
- Vi-Befehlsmodus:
<E>
ViEndOfPreviousGlob
Wird an das Ende des vorherigen Worts verschoben, wobei nur Leerzeichen als Worttrennzeichen verwendet werden.
- Die Funktion ist ungebunden.
ViGotoBrace
Ähnlich wie GotoBrace, ist aber zeichenbasiert statt tokenbasiert.
- Vi-Befehlsmodus:
<%>
ViNextGlob
Wechselt zum nächsten Wort, wobei nur Leerzeichen als Worttrennzeichen verwendet werden.
- Vi-Befehlsmodus:
<W>
ViNextWord
Bewegen Sie den Cursor an den Anfang des nächsten Worts. Word Grenzen werden durch einen konfigurierbaren Satz von Zeichen definiert.
- Vi-Befehlsmodus:
<w>
Verlaufsfunktionen
BeginningOfHistory
Wechseln Sie zum ersten Element im Verlauf.
- Emacs:
<Alt+
<>'
ClearHistory
Löscht den Verlauf in PSReadLine. Dies wirkt sich nicht auf den PowerShell-Verlauf aus.
- Befehl:
<Alt+F7>
EndOfHistory
Wechseln Sie zum letzten Element (der aktuellen Eingabe) im Verlauf.
- Emacs:
<Alt+>>
ForwardSearchHistory
Führen Sie eine inkrementelle Vorwärtssuche durch den Verlauf aus.
- Befehl:
<Ctrl+s>
- Emacs:
<Ctrl+s>
HistorySearchBackward
Ersetzen Sie die aktuelle Eingabe durch das Element "vorherige" aus dem PSReadLine-Verlauf, das den Zeichen zwischen dem Start und der Eingabe und dem Cursor entspricht.
- Befehl:
<F8>
HistorySearchForward
Ersetzen Sie die aktuelle Eingabe durch das Element "Weiter" aus dem PSReadLine-Verlauf, das den Zeichen zwischen dem Start, der Eingabe und dem Cursor entspricht.
- Befehl:
<Shift+F8>
NextHistory
Ersetzen Sie die aktuelle Eingabe durch das Element "Next" aus dem PSReadLine-Verlauf.
- Befehl:
<DownArrow>
- Emacs:
<DownArrow>
,<Ctrl+n>
- Vi Einfügemodus:
<DownArrow>
- Vi-Befehlsmodus:
<DownArrow>
,<j>
,<+>
PreviousHistory
Ersetzen Sie die aktuelle Eingabe durch das Element "vorherige" aus dem PSReadLine-Verlauf.
- Befehl:
<UpArrow>
- Emacs:
<UpArrow>
,<Ctrl+p>
- Vi Einfügemodus:
<UpArrow>
- Vi-Befehlsmodus:
<UpArrow>
,<k>
,<->
ReverseSearchHistory
Führen Sie eine inkrementelle Rückwärtssuche durch den Verlauf aus.
- Befehl:
<Ctrl+r>
- Emacs:
<Ctrl+r>
ViSearchHistoryBackward
Fordert eine Suchzeichenfolge auf und initiiert die Suche nach AcceptLine.
- Vi Einfügemodus:
<Ctrl+r>
- Vi-Befehlsmodus:
</>
,<Ctrl+r>
Vervollständigungsfunktionen
Abgeschlossen
Versuchen Sie, den Text, der den Cursor umgibt, zu vervollständigen. Wenn mehrere mögliche Vervollständigungen vorhanden sind, wird das längste eindeutige Präfix für die Vervollständigung verwendet. Wenn Sie versuchen, die längste eindeutige Vervollständigung abzuschließen, wird eine Liste der möglichen Vervollständigungen angezeigt.
- Emacs:
<Tab>
MenuComplete
Versuchen Sie, den Text, der den Cursor umgibt, zu vervollständigen. Wenn mehrere mögliche Vervollständigungen vorhanden sind, wird das längste eindeutige Präfix für die Vervollständigung verwendet. Wenn Sie versuchen, die längste eindeutige Vervollständigung abzuschließen, wird eine Liste der möglichen Vervollständigungen angezeigt.
- Befehl:
<Ctrl+Space>
- Emacs:
<Ctrl+Space>
MöglicheCompletions
Zeigt die Liste der möglichen Vervollständigungen an.
- Emacs:
<Alt+=>
- Vi Einfügemodus:
<Ctrl+Space>
- Vi-Befehlsmodus:
<Ctrl+Space>
TabVervollständigenWeiter
Versuchen Sie, den Text, der den Cursor umgibt, mit der nächsten verfügbaren Vervollständigung zu vervollständigen.
- Befehl:
<Tab>
- Vi-Befehlsmodus:
<Tab>
TabCompletePrevious
Versuchen Sie, den Text, der den Cursor umgibt, mit der vorherigen verfügbaren Vervollständigung zu vervollständigen.
- Befehl:
<Shift+Tab>
- Vi-Befehlsmodus:
<Shift+Tab>
ViTabCompleteWeiter
Beendet bei Bedarf die aktuelle Bearbeitungsgruppe und ruft TabCompleteNext auf.
- Vi-Einfügemodus:
<Tab>
ViTabCompletePrevious
Beendet bei Bedarf die aktuelle Bearbeitungsgruppe und ruft TabCompletePrevious auf.
- Vi-Einfügemodus:
<Shift+Tab>
Sonstige Funktionen
CaptureScreen
Interaktive Bildschirmaufnahme starten: Nach oben/unten wählen Sie Linien aus, und geben Sie Kopien des ausgewählten Texts in die Zwischenablage als Text und HTML ein.
- Die Funktion ist ungebunden.
ClearScreen
Deaktivieren Sie den Bildschirm, und zeichnen Sie die aktuelle Linie oben auf dem Bildschirm.
- Befehl:
<Ctrl+l>
- Emacs:
<Ctrl+l>
- Vi-Einfügemodus:
<Ctrl+l>
- Vi-Befehlsmodus:
<Ctrl+l>
DigitArgument
Starten Sie ein neues Ziffernargument, das an andere Funktionen übergeben werden soll.
- Cmd:
<Alt+0>
,<Alt+1>
,<Alt+2>
,<Alt+3>
,<Alt+4>
,<Alt+5>
,<Alt+6>
,<Alt+7>
,<Alt+8>
,<Alt+9>
<Alt+->
- Emacs:
<Alt+0>
,<Alt+1>
,<Alt+2>
,<Alt+3>
<Alt+4>
, ,<Alt+5>
,<Alt+6>
,<Alt+7>
<Alt+8>
,<Alt+9>
<Alt+->
- Vi-Befehlsmodus:
<0>
,<1>
,<2>
,<3>
,<5>
<4>
,<6>
,<7>
, ,<8>
,<9>
InvokePrompt
Löscht die aktuelle Eingabeaufforderung und ruft die Eingabeaufforderungsfunktion auf, um die Eingabeaufforderung erneut anzuzeigen. Nützlich für benutzerdefinierte Schlüsselhandler, die den Zustand ändern, z. B. das aktuelle Verzeichnis ändern.
- Die Funktion ist ungebunden.
ScrollDisplayDown
Scrollen Sie die Anzeige um einen Bildschirm nach unten.
- Befehl:
<PageDown>
- Emacs:
<PageDown>
ScrollDisplayDownLine
Scrollen Sie die Anzeige um eine Zeile nach unten.
- Befehl:
<Ctrl+PageDown>
- Emacs:
<Ctrl+PageDown>
ScrollDisplayToCursor
Scrollen Sie in der Anzeige zum Cursor.
- Emacs:
<Ctrl+End>
ScrollDisplayTop
Scrollen Sie in der Anzeige nach oben.
- Emacs:
<Ctrl+Home>
ScrollDisplayUp
Scrollen Sie auf der Anzeige um einen Bildschirm nach oben.
- Befehl:
<PageUp>
- Emacs:
<PageUp>
ScrollDisplayUpLine
Scrollen Sie die Anzeige um eine Zeile nach oben.
- Befehl:
<Ctrl+PageUp>
- Emacs:
<Ctrl+PageUp>
SelfInsert
Fügen Sie den Schlüssel ein.
- Die Funktion ist ungebunden.
ShowKeyBindings
Alle gebundenen Schlüssel anzeigen.
- Befehl:
<Ctrl+Alt+?>
- Emacs:
<Ctrl+Alt+?>
- Vi-Einfügemodus:
<Ctrl+Alt+?>
ViCommandMode
Wechseln Sie den aktuellen Betriebsmodus von Vi-Insert zu Vi-Command.
- Vi-Einfügemodus:
<Escape>
ViDigitArgumentInChord
Starten Sie ein neues Ziffernargument, das an andere Funktionen übergeben wird, während sie sich in einem der Akkorde von vi befindet.
- Die Funktion ist ungebunden.
ViEditVisually
Bearbeiten Sie die Befehlszeile in einem Text-Editor, der von $env:EDITOR oder $env:VISUAL angegeben wird.
- Emacs:
<Ctrl+x,Ctrl+e>
- Vi-Befehlsmodus:
<v>
ViExit
Beendet die Shell.
- Die Funktion ist ungebunden.
ViInsertMode
Wechseln Sie in den Einfügemodus.
- Vi-Befehlsmodus:
<i>
WhatIsKey
Lesen Sie einen Schlüssel, und teilen Sie mir mit, an was der Schlüssel gebunden ist.
- Befehl:
<Alt+?>
- Emacs:
<Alt+?>
Auswahlfunktionen
ExchangePointAndMark
Der Cursor wird an der Position der Markierung platziert, und die Markierung wird an die Position des Cursors verschoben.
- Emacs:
<Ctrl+x,Ctrl+x>
SelectAll
Wählen Sie die gesamte Zeile aus.
- Befehl:
<Ctrl+a>
SelectBackwardChar
Passen Sie die aktuelle Auswahl so an, dass sie das vorherige Zeichen enthält.
- Befehl:
<Shift+LeftArrow>
- Emacs:
<Shift+LeftArrow>
SelectBackwardsLine
Passen Sie die aktuelle Auswahl an, die vom Cursor bis zum Anfang der Zeile eingeschlossen werden soll.
- Befehl:
<Shift+Home>
- Emacs:
<Shift+Home>
SelectBackwardWord
Passen Sie die aktuelle Auswahl an, um das vorherige Wort einzuschließen.
- Befehl:
<Shift+Ctrl+LeftArrow>
- Emacs:
<Alt+B>
SelectForwardChar
Passen Sie die aktuelle Auswahl so an, dass sie das nächste Zeichen enthält.
- Befehl:
<Shift+RightArrow>
- Emacs:
<Shift+RightArrow>
SelectForwardWord
Passen Sie die aktuelle Auswahl so an, dass das nächste Wort mithilfe von ForwardWord eingeschlossen wird.
- Emacs:
<Alt+F>
SelectLine
Passen Sie die aktuelle Auswahl an, die vom Cursor bis zum Ende der Zeile eingeschlossen werden soll.
- Befehl:
<Shift+End>
- Emacs:
<Shift+End>
SelectNextWord
Passen Sie die aktuelle Auswahl so an, dass sie das nächste Wort einschließt.
- Befehl:
<Shift+Ctrl+RightArrow>
SelectShellBackwardWord
Passen Sie die aktuelle Auswahl so an, dass sie das vorherige Wort mit ShellBackwardWord einschließt.
- Die Funktion ist ungebunden.
SelectShellForwardWord
Passen Sie die aktuelle Auswahl so an, dass sie das nächste Wort mit ShellForwardWord einschließt.
- Die Funktion ist ungebunden.
SelectShellNextWord
Passen Sie die aktuelle Auswahl so an, dass sie das nächste Wort mit ShellNextWord einschließt.
- Die Funktion ist ungebunden.
SetMark
Markieren Sie die aktuelle Position des Cursors zur Verwendung in einem nachfolgenden Bearbeitungsbefehl.
- Emacs:
<Ctrl+
>'
Search Funktionen
CharacterSearch
Lesen Sie ein Zeichen, und suchen Sie nach dem nächsten Vorkommen dieses Zeichens. Wenn ein Argument angegeben ist, suchen Sie vorwärts (oder rückwärts, wenn negativ) nach dem n-ten Vorkommen.
- Befehl:
<F3>
- Emacs:
<Ctrl+]>
- Vi Einfügemodus:
<F3>
- Vi-Befehlsmodus:
<F3>
CharacterSearchBackward
Lesen Sie ein Zeichen, und suchen Sie rückwärts nach dem nächsten Vorkommen dieses Zeichens. Wenn ein Argument angegeben wird, suchen Sie rückwärts (oder vorwärts, wenn negativ) nach dem n-ten Vorkommen.
- Befehl:
<Shift+F3>
- Emacs:
<Ctrl+Alt+]>
- Vi Einfügemodus:
<Shift+F3>
- Vi-Befehlsmodus:
<Shift+F3>
RepeatLastCharSearch
Wiederholen Sie die zuletzt aufgezeichnete Zeichensuche.
- Vi-Befehlsmodus:
<;>
RepeatLastCharSearchBackwards
Wiederholen Sie die zuletzt aufgezeichnete Zeichensuche, jedoch in umgekehrter Richtung.
- Vi-Befehlsmodus:
<,>
RepeatSearch
Wiederholen Sie die letzte Suche in die gleiche Richtung wie zuvor.
- Vi-Befehlsmodus:
<n>
RepeatSearchBackward
Wiederholen Sie die letzte Suche in die gleiche Richtung wie zuvor.
- Vi-Befehlsmodus:
<N>
SearchChar
Lesen Sie das nächste Zeichen, und suchen Sie es dann nach vorne, und kehren Sie dann von einem Zeichen zurück. Dies gilt für die "T"-Funktionalität.
- Vi-Befehlsmodus:
<f>
SearchCharBackward
Lesen Sie das nächste Zeichen, und suchen Sie es dann, rückwärts und dann zurück von einem Zeichen. Dies gilt für die "T"-Funktionalität.
- Vi-Befehlsmodus:
<F>
SearchCharBackwardWithBackoff
Lesen Sie das nächste Zeichen, und suchen Sie es dann, rückwärts und dann zurück von einem Zeichen. Dies gilt für die "T"-Funktionalität.
- Vi-Befehlsmodus:
<T>
SearchCharWithBackoff
Lesen Sie das nächste Zeichen, und suchen Sie es dann nach vorne, und kehren Sie dann von einem Zeichen zurück. Dies gilt für die "T"-Funktionalität.
- Vi-Befehlsmodus:
<t>
Searchforward
Fordert eine Suchzeichenfolge auf und initiiert die Suche nach AcceptLine.
- Vi Einfügemodus:
<Ctrl+s>
- Vi-Befehlsmodus:
<?>
,<Ctrl+s>
Benutzerdefinierte Schlüsselbindungen
PSReadLine unterstützt benutzerdefinierte Schlüsselbindungen mithilfe des Cmdlets Set-PSReadLineKeyHandler
. Die meisten benutzerdefinierten Schlüsselbindungen rufen eine der oben genannten Funktionen auf, z. B.
Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward
Sie können einen ScriptBlock an einen Schlüssel binden. Der ScriptBlock kann so ziemlich alles tun, was Sie möchten. Einige nützliche Beispiele sind:
- Bearbeiten der Befehlszeile
- Öffnen eines neuen Fensters (z. B. Hilfe)
- Verzeichnisse ändern, ohne die Befehlszeile zu ändern
Der ScriptBlock empfängt zwei Argumente:
$key
– Ein [ConsoleKeyInfo]- Objekt, das der Schlüssel ist, der die benutzerdefinierte Bindung ausgelöst hat. Wenn Sie denselben ScriptBlock an mehrere Schlüssel binden und je nach Schlüssel unterschiedliche Aktionen ausführen müssen, können Sie $key überprüfen. Viele benutzerdefinierte Bindungen ignorieren dieses Argument.$arg
– Ein beliebiges Argument. In den meisten Fällen ist dies ein ganzzahliges Argument, das der Benutzer von den Schlüsselbindungen DigitArgument übergibt. Wenn Ihre Bindung keine Argumente akzeptiert, ist es sinnvoll, dieses Argument zu ignorieren.
Sehen wir uns ein Beispiel an, das dem Verlauf eine Befehlszeile hinzufügt, ohne sie auszuführen. Dies ist nützlich, wenn Sie feststellen, dass Sie etwas vergessen haben, aber die bereits eingegebene Befehlszeile nicht erneut eingeben möchten.
$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
Sie sehen viele weitere Beispiele in der Datei SamplePSReadLineProfile.ps1
, die im PSReadLine-Modulordner installiert ist.
Die meisten Schlüsselbindungen verwenden einige Hilfsfunktionen zum Bearbeiten der Befehlszeile. Diese APIs werden im nächsten Abschnitt dokumentiert.
Unterstützungs-APIs für benutzerdefinierte Schlüsselbindung
Die folgenden Funktionen sind in Microsoft.PowerShell.PSConsoleReadLine öffentlich, können aber nicht direkt an einen Schlüssel gebunden werden. Die meisten sind bei benutzerdefinierten Schlüsselbindungen nützlich.
void AddToHistory(string command)
Fügen Sie dem Verlauf eine Befehlszeile hinzu, ohne ihn auszuführen.
void ClearKillRing()
Löschen Sie den Killring. Dies wird hauptsächlich zum Testen verwendet.
void Delete(int start, int length)
Löschen Sie Längenzeichen von Anfang an. Dieser Vorgang unterstützt Rückgängig/Wiederholen.
void Ding()
Führen Sie die Ding-Aktion basierend auf der Benutzereinstellung aus.
void GetBufferState([ref] string input, [ref] int cursor)
void GetBufferState([ref] Ast ast, [ref] Token[] tokens,
[ref] ParseError[] parseErrors, [ref] int cursor)
Diese beiden Funktionen rufen nützliche Informationen zum aktuellen Zustand des Eingabepuffers ab. Die erste wird häufiger für einfache Fälle verwendet. Die zweite wird verwendet, wenn Ihre Bindung etwas fortgeschrittener mit dem Ast ausführt.
IEnumerable[Microsoft.PowerShell.KeyHandler]
GetKeyHandlers(bool includeBound, bool includeUnbound)
Diese Funktion wird von Get-PSReadLineKeyHandler verwendet und ist in einer benutzerdefinierten Schlüsselbindung wahrscheinlich nicht nützlich.
Microsoft.PowerShell.PSConsoleReadLineOptions GetOptions()
Diese Funktion wird von Get-PSReadLineOption verwendet und ist in einer benutzerdefinierten Schlüsselbindung wahrscheinlich nicht besonders nützlich.
void GetSelectionState([ref] int start, [ref] int length)
Wenn keine Auswahl in der Befehlszeile vorhanden ist, wird -1 sowohl in start als auch in der Länge zurückgegeben. Wenn in der Befehlszeile eine Auswahl vorhanden ist, werden der Anfang und die Länge der Auswahl zurückgegeben.
void Insert(char c)
void Insert(string s)
Fügen Sie ein Zeichen oder eine Zeichenfolge am Cursor ein. Dieser Vorgang unterstützt rückgängig/wiederholen.
string ReadLine(runspace remoteRunspace,
System.Management.Automation.EngineIntrinsics engineIntrinsics)
Dies ist der Standard Einstiegspunkt zu PSReadLine. Die Rekursion wird nicht unterstützt, daher ist es bei einer benutzerdefinierten Schlüsselbindung nicht nützlich.
void RemoveKeyHandler(string[] key)
Diese Funktion wird von Remove-PSReadLineKeyHandler verwendet und ist in einer benutzerdefinierten Schlüsselbindung wahrscheinlich nicht besonders nützlich.
void Replace(int start, int length, string replacement)
Ersetzen Sie einen Teil der Eingabe. Dieser Vorgang unterstützt rückgängig/wiederholen. Dies wird vor "Löschen" gefolgt von "Einfügen" bevorzugt, da es als einzelne Aktion zum Rückgängigmachen behandelt wird.
void SetCursorPosition(int cursor)
Bewegen Sie den Cursor auf den angegebenen Offset. Die Cursorbewegung wird nicht zum Rückgängigmachen nachverfolgt.
void SetOptions(Microsoft.PowerShell.SetPSReadLineOption options)
Diese Funktion ist eine Hilfsmethode, die vom Cmdlet Set-PSReadLineOption verwendet wird, kann jedoch für eine benutzerdefinierte Schlüsselbindung nützlich sein, die eine Einstellung vorübergehend ändern möchte.
bool TryGetArgAsInt(System.Object arg, [ref] int numericArg,
int defaultNumericArg)
Diese Hilfsmethode wird für benutzerdefinierte Bindungen verwendet, die DigitArgument berücksichtigen. Ein typischer Anruf sieht wie folgt aus:
[int]$numericArg = 0
[Microsoft.PowerShell.PSConsoleReadLine]::TryGetArgAsInt($arg,
[ref]$numericArg, 1)
Hinweis
Befehlsverlauf
PSReadLine verwaltet eine Verlaufsdatei mit allen Befehlen und Daten, die Sie über die Befehlszeile eingegeben haben. Dies kann vertrauliche Daten einschließlich Kennwörtern enthalten. Wenn Sie beispielsweise das ConvertTo-SecureString
Cmdlet verwenden, wird das Kennwort in der Verlaufsdatei als Nur-Text protokolliert. Die Verlaufsdateien sind eine Datei namens $($host.Name)_history.txt
. Auf Windows-Systemen wird die Verlaufsdatei unter $env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine
gespeichert. Auf Nicht-Windows-Systemen werden die Verlaufsdateien unter $env:XDG_DATA_HOME/powershell/PSReadLine
oder $env:HOME/.local/share/powershell/PSReadLine
gespeichert.
Feedback & Beiträge zu PSReadLine
Sie können einen Pull Request senden oder Feedback auf der GitHub-Seite übermitteln.
Weitere Informationen
PSReadLine wird stark von der GNU-Leselinienbibliothek beeinflusst.