PSReadLine
about_PSReadLine
KURZE BESCHREIBUNG
PSReadLine bietet eine verbesserte Befehlszeilenbearbeitung in der PowerShell-Konsole.
LANGE BESCHREIBUNG
PSReadLine 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
Die folgenden Funktionen sind in der Klasse [Microsoft.PowerShell.PSConsoleReadLine] verfügbar.
Cursorbewegung
EndOfLine
- Befehl:
<End>
- Emacs:
<End>
oder<Ctrl+E>
Wenn die Eingabe über mehrere Zeilen verfügt, verschieben Sie an das Ende der aktuellen Zeile, oder verschieben Sie, wenn sie bereits am Ende der Zeile liegt, an das Ende der Eingabe. Wenn die Eingabe eine einzelne Zeile aufweist, wechseln Sie an das Ende der Eingabe.
BeginningOfLine
- Befehl:
<Home>
- Emacs:
<Home>
oder<Ctrl+A>
Wenn die Eingabe über mehrere Zeilen verfügt, verschieben Sie zum Anfang der aktuellen Zeile, oder verschieben Sie, wenn sie bereits am Anfang der Zeile steht, an den Anfang der Eingabe. Wenn die Eingabe über eine einzelne Zeile verfügt, wechseln Sie an den Anfang der Eingabe.
NextLine
- Cmd: ungebunden
- Emacs: ungebunden
Bewegen Sie den Cursor in die nächste Zeile, wenn die Eingabe über mehrere Zeilen verfügt.
PreviousLine
- Cmd: ungebunden
- Emacs: ungebunden
Bewegen Sie den Cursor in die vorherige Zeile, wenn die Eingabe über mehrere Zeilen verfügt.
ForwardChar
- Befehl:
<RightArrow>
- Emacs:
<RightArrow>
oder<Ctrl+F>
Bewegen Sie den Cursor um ein Zeichen nach rechts. Dadurch wird der Cursor möglicherweise in die nächste Zeile der mehrzeiligen Eingabe verschoben.
BackwardChar
- Befehl:
<LeftArrow>
- Emacs:
<LeftArrow>
oder<Ctrl+B>
Bewegen Sie den Cursor um ein Zeichen nach links. Dadurch kann der Cursor in die vorherige Zeile der mehrzeiligen Eingabe verschoben werden.
ForwardWord
- Cmd: ungebunden
- Emacs:
<Alt+F>
Bewegen Sie den Cursor nach vorne bis zum Ende des aktuellen Worts oder, wenn zwischen Wörtern, an das Ende des nächsten Worts. Sie können Worttrennzeichen mit folgenden Aktionen festlegen:
Set-PSReadLineOption -WordDelimiters `<string of delimiter characters>`
NextWord
- Befehl:
<Ctrl+RightArrow>
- Emacs: ungebunden
Bewegen Sie den Cursor nach vorne zum Anfang des nächsten Worts. Sie können Worttrennzeichen mit folgenden Aktionen festlegen:
Set-PSReadLineOption -WordDelimiters `<string of delimiter characters>`
BackwardWord
- Befehl:
<Ctrl+LeftArrow>
- Emacs:
<Alt+B>
Bewegen Sie den Cursor zurück an den Anfang des aktuellen Worts, oder wenn zwischen Wörtern der Anfang des vorherigen Worts. Sie können Worttrennzeichen mit folgenden Aktionen festlegen:
Set-PSReadLineOption -WordDelimiters `<string of delimiter characters>`
ShellForwardWord
- Cmd: ungebunden
- Emacs: ungebunden
Wie ForwardWord, außer Wortgrenzen werden durch PowerShell-Tokengrenzen definiert.
ShellNextWord
- Cmd: ungebunden
- Emacs: ungebunden
Wie NextWord, außer Wortgrenzen werden durch PowerShell-Tokengrenzen definiert.
ShellBackwardWord
- Cmd: ungebunden
- Emacs: ungebunden
Wie BackwardWord, außer Wortgrenzen werden durch PowerShell-Tokengrenzen definiert.
GotoBrace
- Befehl:
<Ctrl+}>
- Emacs: ungebunden
Wechseln Sie zu der entsprechenden Klammer, der geschweiften Klammer oder der eckigen Klammer.
Addline
- Befehl:
<Shift-Enter>
- Emacs:
<Shift-Enter>
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.
Grundlegende Bearbeitung
CancelLine
- Cmd: ungebunden
- Emacs: ungebunden
Brechen Sie alle Bearbeitungen in der Zeile ab, lassen Sie die Eingabezeile auf dem Bildschirm, kehren Sie jedoch von PSReadLine zurück, ohne die Eingabe auszuführen.
RevertLine
- Befehl:
<ESC>
- Emacs:
<Alt+R>
Stellt die gesamte Eingabe zurück, seit die letzte Eingabe akzeptiert und ausgeführt wurde. Dies entspricht der Verwendung des Befehls Rückgängig, bis nichts mehr rückgängig zu machen ist.
BackwardDeleteChar
- Befehl:
<Backspace>
- Emacs:
<Backspace>
oder<Ctrl+H>
Löschen Sie das Zeichen vor dem Cursor.
DeleteChar
- Befehl:
<Delete>
- Emacs:
<Delete>
Löschen Sie das Zeichen unter dem Cursor.
DeleteCharOrExit
- Cmd: ungebunden
- Emacs:
<Ctrl+D>
Wie DeleteChar, es sei denn, die Zeile ist leer, in diesem Fall beenden Sie den Prozess.
AcceptLine
- Befehl:
<Enter>
- Emacs:
<Enter>
oder<Ctrl+M>
Versuchen Sie, die aktuelle Eingabe auszuführen. Wenn die aktuelle Eingabe unvollständig ist (z. B. fehlt eine schließende Klammer, eine Klammer oder ein Anführungszeichen), wird die Fortsetzungsaufforderung in der nächsten Zeile angezeigt, und PSReadLine wartet auf die Bearbeitung der aktuellen Eingabe.
AcceptAndGetNext
- Cmd: ungebunden
- Emacs:
<Ctrl+O>
Wie AcceptLine, aber nachdem die Zeile abgeschlossen ist, beginnen Sie mit der Bearbeitung der nächsten Zeile aus dem Verlauf.
ValidateAndAcceptLine
- Cmd: ungebunden
- Emacs: ungebunden
Wie AcceptLine, führt aber zusätzliche Überprüfung durch, einschließlich:
- Überprüft auf zusätzliche Analysefehler
- Überprüft, ob alle Befehlsnamen gefunden werden.
- Wenn Sie PowerShell 4.0 oder höher ausführen, überprüft die Parameter und Argumente.
Wenn Fehler auftreten, wird die Fehlermeldung angezeigt und nicht akzeptiert oder dem Verlauf hinzugefügt, es sei denn, Sie korrigieren die Befehlszeile oder führen AcceptLine oder ValidateAndAcceptLine erneut aus, während die Fehlermeldung angezeigt wird.
BackwardDeleteLine
- Befehl:
<Ctrl+Home>
- Emacs: ungebunden
Löschen Sie den Text vom Anfang der Eingabe an den Cursor.
ForwardDeleteLine
- Befehl:
<Ctrl+End>
- Emacs: ungebunden
Löschen Sie den Text vom Cursor bis zum Ende der Eingabe.
SelectBackwardChar
- Befehl:
<Shift+LeftArrow>
- Emacs:
<Shift+LeftArrow>
Passen Sie die aktuelle Auswahl so an, dass sie das vorherige Zeichen enthält.
SelectForwardChar
- Befehl:
<Shift+RightArrow>
- Emacs:
<Shift+RightArrow>
Passen Sie die aktuelle Auswahl so an, dass sie das nächste Zeichen enthält.
SelectBackwardWord
- Befehl:
<Shift+Ctrl+LeftArrow>
- Emacs:
<Alt+Shift+B>
Passen Sie die aktuelle Auswahl an, um das vorherige Wort einzuschließen.
SelectForwardWord
- Cmd: ungebunden
- Emacs:
<Alt+Shift+F>
Passen Sie die aktuelle Auswahl an, um das nächste Wort mithilfe von ForwardWord einzuschließen.
Wählen SieNextWord aus.
- Befehl:
<Shift+Ctrl+RightArrow>
- Emacs: ungebunden
Passen Sie die aktuelle Auswahl an, um das nächste Wort mithilfe von NextWord einzuschließen.
SelectShellForwardWord
- Cmd: ungebunden
- Emacs: ungebunden
Passen Sie die aktuelle Auswahl an, um das nächste Wort mithilfe von ShellForwardWord einzuschließen.
SelectShellNextWord
- Cmd: ungebunden
- Emacs: ungebunden
Passen Sie die aktuelle Auswahl an, um das nächste Wort mithilfe von ShellNextWord einzuschließen.
SelectShellBackwardWord
- Cmd: ungebunden
- Emacs: ungebunden
Passen Sie die aktuelle Auswahl an, um das vorherige Wort mithilfe von ShellBackwardWord einzuschließen.
SelectBackwardsLine
- Befehl:
<Shift+Home>
- Emacs:
<Shift+Home>
Passen Sie die aktuelle Auswahl an, die vom Cursor bis zum Anfang der Zeile eingeschlossen werden soll.
SelectLine
- Befehl:
<Shift+End>
- Emacs:
<Shift+End>
Passen Sie die aktuelle Auswahl an, die vom Cursor bis zum Ende der Zeile eingeschlossen werden soll.
SelectAll
- Befehl:
<Ctrl+A>
- Emacs: ungebunden
Wählen Sie die gesamte Zeile aus. Verschiebt den Cursor an das Ende der Zeile.
SelfInsert
- Cmd:
<a>
,<b>
, ... - Emacs:
<a>
,<b>
, ...
Fügen Sie die eingegebene Taste ein.
Wiederholen
- Befehl:
<Ctrl+Y>
- Emacs: ungebunden
Wiederholen Sie ein Einfügen oder Löschen, das durch Rückgängig rückgängig wurde.
Rückgängig
- Befehl:
<Ctrl+Z>
- Emacs:
<Ctrl+_>
Rückgängigmachen eines vorherigen Einfügens oder Löschens.
Verlauf
ClearHistory
- Befehl:
<Alt+F7>
- Emacs: ungebunden
Löscht den Verlauf in PSReadLine. Dies wirkt sich nicht auf den PowerShell-Verlauf aus.
PreviousHistory
- Befehl:
<UpArrow>
- Emacs:
<UpArrow>
oder<Ctrl+P>
Ersetzen Sie die aktuelle Eingabe durch das vorherige Element aus dem PSReadLine-Verlauf.
NextHistory
- Befehl:
<DownArrow>
- Emacs:
<DownArrow>
oder<Ctrl+N>
Ersetzen Sie die aktuelle Eingabe durch das nächste Element aus dem PSReadLine-Verlauf.
ForwardSearchHistory
- Befehl:
<Ctrl+S>
- Emacs:
<Ctrl+S>
Search interaktiv von der aktuellen Verlaufszeile aus.
ReverseSearchHistory
- Befehl:
<Ctrl+R>
- Emacs:
<Ctrl+R>
Search interaktiv von der aktuellen Verlaufslinie rückwärts.
HistorySearchBackward
- Befehl:
<F8>
- Emacs: ungebunden
Ersetzen Sie die aktuelle Eingabe durch das vorherige Element aus dem PSReadLine-Verlauf, das den Zeichen zwischen dem Start und der Eingabe und dem Cursor entspricht.
HistorySearchForward
- Befehl:
<Shift+F8>
- Emacs: ungebunden
Ersetzen Sie die aktuelle Eingabe durch das nächste Element aus dem PSReadLine-Verlauf, das den Zeichen zwischen dem Start und der Eingabe und dem Cursor entspricht.
BeginningOfHistory
- Cmd: ungebunden
- Emacs:
<Alt+<>
Ersetzen Sie die aktuelle Eingabe durch das letzte Element aus dem PSReadLine-Verlauf.
EndOfHistory
- Cmd: ungebunden
- Emacs:
<Alt+>>
Ersetzen Sie die aktuelle Eingabe durch das letzte Element im PSReadLine-Verlauf, bei dem es sich um die möglicherweise leere Eingabe handelt, die vor allen Verlaufsbefehlen eingegeben wurde.
Vervollständigung der Registerkarte
TabCompleteWeiter
- Befehl:
<Tab>
- Emacs: ungebunden
Versuchen Sie, den Text, der den Cursor umgibt, mit der nächsten verfügbaren Vervollständigung abzuschließen.
TabCompletePrevious
- Befehl:
<Shift-Tab>
- Emacs: ungebunden
Versuchen Sie, den Text, der den Cursor umgibt, mit dem nächsten vorherigen Abschluss abzuschließen.
Abgeschlossen
- Cmd: ungebunden
- Emacs:
<Tab>
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 möglicher Vervollständigungen angezeigt.
MenuComplete
- Befehl:
<Ctrl+Space>
- Emacs:
<Ctrl+Space>
Versuchen Sie, den Text, der den Cursor umgibt, zu vervollständigen. Wenn es mehrere mögliche Vervollständigungen gibt, wird eine Liste möglicher Vervollständigungen angezeigt, und Sie können die richtige Vervollständigung mithilfe der Pfeiltasten oder TAB/UMSCHALT+TAB auswählen. Mit ESCAPE und STRG+G wird die Menüauswahl abgebrochen, und rückgängig machen Sie die Zeile in den Zustand, bevor Sie MenuVervollständigen aufrufen.
PossibleCompletions
- Cmd: ungebunden
- Emacs:
<Alt+Equals>
Zeigt die Liste der möglichen Vervollständigungen an.
SetMark
- Cmd: ungebunden
- Emacs:
<Alt+Space>
Markieren Sie die aktuelle Position des Cursors zur Verwendung in einem nachfolgenden Bearbeitungsbefehl.
ExchangePointAndMark
- Cmd: ungebunden
- Emacs:
<Ctrl+X,Ctrl+X>
Der Cursor wird an der Position der Markierung platziert, und die Markierung wird an die Position des Cursors verschoben.
Kill/Yank
Kill und Yank arbeiten mit einer Zwischenablage im PSReadLine-Modul. Es gibt einen Ringpuffer namens Kill Ring . Der beendete Text wird dem Kill-Ring hinzugefügt, und Yank kopiert Text aus dem letzten Kill. YankPop durchläuft Elemente im Kill-Ring. Wenn der Kill Ring voll ist, ersetzen neue Elemente die ältesten Elemente. Einem Kill-Vorgang, dem unmittelbar ein anderer Kill-Vorgang vorangeht, wird der vorherige Kill angefügt, anstatt ein neues Element hinzuzufügen oder ein Element im Kill Ring zu ersetzen. So können Sie einen Teil einer Zeile z. B. mit mehreren KillWord-Vorgängen ausschneiden und dann als einzelnes Yank an eine andere Stelle zurückführen.
KillLine
- Cmd: ungebunden
- Emacs:
<Ctrl+K>
Löschen Sie die Eingabe vom Cursor bis zum Ende der Zeile. Der gelöschte Text wird im Kill Ring platziert.
BackwardKillLine
- Cmd: ungebunden
- Emacs:
<Ctrl+U>
oder<Ctrl+X,Backspace>
Löschen Sie die Eingabe vom Anfang der Eingabe bis zum Cursor. Der gelöschte Text wird im Kill Ring platziert.
KillWord
- Cmd: ungebunden
- Emacs:
<Alt+D>
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.
BackwardKillWord
- Cmd: ungebunden
- Emacs:
<Alt+Backspace>
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.
ShellKillWord
- Cmd: ungebunden
- Emacs: ungebunden
Wie KillWord, außer Wortgrenzen werden durch PowerShell-Tokengrenzen definiert.
ShellBackwardKillWord
- Cmd: ungebunden
- Emacs: ungebunden
Wie BackwardKillWord werden keine Wortgrenzen durch PowerShell-Tokengrenzen definiert.
UnixWordRubout
- Cmd: ungebunden
- Emacs:
<Ctrl+W>
Wie BackwardKillWord, außer Wortgrenzen werden durch Leerzeichen definiert.
KillRegion
- Cmd: ungebunden
- Emacs: ungebunden
Beenden Sie den Text zwischen dem Cursor und der Markierung.
Kopieren
- Befehl:
<Ctrl+Shift+C>
- Emacs: ungebunden
Kopieren Sie den ausgewählten Bereich in die Systemablage. Wenn kein Bereich ausgewählt ist, kopieren Sie die ganze Zeile.
CopyOrCancelLine
- Befehl:
<Ctrl+C>
- Emacs:
<Ctrl+C>
Kopieren Sie den markierten Text in die Zwischenablage, oder wenn kein Text ausgewählt ist, brechen Sie die Bearbeitung der Zeile mit CancelLine ab.
Ausschneiden
- Befehl:
<Ctrl+X>
- Emacs: ungebunden
Löscht den ausgewählten Bereich, indem gelöschter Text in die Systemzwischenablage eingefügt wird.
Yank
- Cmd: ungebunden
- Emacs:
<Ctrl+Y>
Fügen Sie der Eingabe den zuletzt beendeten Text hinzu.
YankPop
- Cmd: ungebunden
- Emacs:
<Alt+Y>
Wenn der vorherige Vorgang Yank oder YankPop war, ersetzen Sie den zuvor beschrifteten Text durch den nächsten beendeten Text aus dem Kill-Ring.
ClearKillRing
- Cmd: ungebunden
- Emacs: ungebunden
Der Inhalt des Kill Rings wird gelöscht.
Einfügen
- Befehl:
<Ctrl+V>
- Emacs: ungebunden
Dies ähnelt Yank, verwendet jedoch die Systemablage anstelle des Kill Rings.
[!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.
YankLastArg
- Befehl:
<Alt+.>
- Emacs:
<Alt+.>
,<Alt+_>
Fügen Sie das letzte Argument aus dem vorherigen Befehl in den Verlauf ein. Wiederholte Vorgänge ersetzen das zuletzt eingefügte Argument durch das letzte Argument aus dem vorherigen Befehl (also ALT+. ALT+. wird das letzte Argument der zweiten bis letzten Verlaufszeile eingefügt.
Mit einem Argument verhält sich YankLastArg zum ersten Mal wie YankNthArg. Ein negatives Argument für nachfolgende YankLastArg-Aufrufe ändert die Richtung, während der Verlauf durchlaufen wird. Wenn Sie z. B. ALT+drücken. einmal zu oft können Sie ALT+- ALT++ eingeben. , um die Richtung umzukehren.
Argumente basieren auf PowerShell-Token.
YankNthArg
- Cmd: ungebunden
- Emacs:
<Alt+Ctrl+Y>
Fügen Sie das erste Argument (nicht den Befehlsnamen) des vorherigen Befehls in den Verlauf ein.
Fügen Sie mit einem Argument das n-te Argument ein, wobei 0 normalerweise der Befehl ist. Negative Argumente beginnen am Ende.
Argumente basieren auf PowerShell-Token.
Verschiedenes
Abbruch
- Cmd: ungebunden
- Emacs:
<Ctrl+G>
Abbrechen der aktuellen Aktion; beenden Sie beispielsweise die interaktive Verlaufssuche. Bricht eingaben wie CancelLine nicht ab.
CharacterSearch
- Befehl:
<F3>
- Emacs:
<Ctrl+]>
Lesen Sie einen Schlüssel, und suchen Sie vorwärts nach diesem Zeichen. Mit einem Argument wird nach dem n-ten Vorkommen dieses Arguments gesucht. Sucht mit einem negativen Argument rückwärts.
CharacterSearchBackward
- Befehl:
<Shift+F3>
- Emacs:
<Alt+Ctrl+]>
Wie CharacterSearch, aber sucht rückwärts. Sucht mit einem negativen Argument vorwärts.
ClearScreen
- Befehl:
<Ctrl+L>
- Emacs:
<Ctrl+L>
Löscht den Bildschirm und zeigt die aktuelle Eingabeaufforderung und eingabe am oberen Rand des Bildschirms an.
DigitArgument
- Cmd: ungebunden
- Emacs:
<Alt+[0..9]>
,<any char>
,<Alt+->
Wird verwendet, um numerische Argumente an Funktionen wie CharacterSearch oder YankNthArg zu übergeben. ALT+- schaltet das Argument so um, dass es negativ/nicht negativ ist. Wenn Sie 80 *Zeichen eingeben möchten, können Sie ALT+8 Alt+0 * eingeben.
CaptureScreen
- Cmd: ungebunden
- Emacs: ungebunden
Kopiert ausgewählte Zeilen sowohl im Text- als auch im RTF-Format in die Zwischenablage. Verwenden Sie die NACH-OBEN/NACH-UNTEN-TASTE zur ersten Zeile, um auszuwählen, und wählen Sie dann UMSCHALT+NACH OBEN/UMSCHALT+NACH UNTEN, um mehrere Zeilen auszuwählen. Drücken Sie nach dem Auswählen die EINGABETASTE, um den Text zu kopieren. Escape/STRG+C/STRG+G brechen den Vorgang ab, sodass nichts in die Zwischenablage kopiert wird.
InvokePrompt
- Cmd: ungebunden
- Emacs: ungebunden
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 Ändern des aktuellen Verzeichnisses.
WhatIsKey
- Befehl:
<Alt+?>
- Emacs:
<Alt+?>
Lesen Sie eine Taste oder einen Akkord, und zeigen Sie die Tastenbindung an.
ShowKeyBindings
- Befehl:
<Ctrl+Alt+?>
- Emacs:
<Ctrl+Alt+?>
Zeigen Sie alle aktuell gebundenen Schlüssel an.
ScrollDisplayUp
- Befehl:
<PageUp>
- Emacs:
<PageUp>
Scrollen Sie die Anzeige um einen Bildschirm nach oben.
ScrollDisplayUpLine
- Befehl:
<Ctrl+PageUp>
- Emacs:
<Ctrl+PageUp>
Scrollen Sie die Anzeige um eine Zeile nach oben.
ScrollDisplayDown
- Befehl:
<PageDown>
- Emacs:
<PageDown>
Scrollen Sie die Anzeige um einen Bildschirm nach unten.
ScrollDisplayDownLine
- Befehl:
<Ctrl+PageDown>
- Emacs:
<Ctrl+PageDown>
Scrollen Sie die Anzeige um eine Zeile nach unten.
ScrollDisplayTop
- Cmd: ungebunden
- Emacs:
<Ctrl+Home>
Scrollen Sie mit der Anzeige nach oben.
ScrollDisplayToCursor
- Cmd: ungebunden
- Emacs:
<Ctrl+End>
Scrollen Sie mit der Anzeige zum Cursor.
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 über den aktuellen Zustand des Eingabepuffers ab. Die erste wird häufiger für einfache Fälle verwendet. Die zweite wird verwendet, wenn Ihre Bindung mit dem Ast etwas fortgeschrittener macht.
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 allzu 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 Start 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 allzu 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. Cursorbewegungen werden nicht auf rückgängig 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
POWERSHELL-KOMPATIBILITÄT
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.
BEFEHLSVERLAUF
PSReadLine verwaltet eine Verlaufsdatei mit allen Befehlen und Daten, die Sie über die Befehlszeile eingegeben haben. Dies kann vertrauliche Daten enthalten, einschließlich Kennwörtern. Wenn Sie beispielsweise das ConvertTo-SecureString
Cmdlet verwenden, wird das Kennwort in der Verlaufsdatei als Nur-Text protokolliert. Die Verlaufsdateien sind eine Datei mit dem Namen $($host.Name)_history.txt
. Auf Windows-Systemen wird die Verlaufsdatei unter $env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine
gespeichert.
FEEDBACK & MITWIRKEN ZU PSReadLine
Sie können auf der GitHub-Seite keine Pull Request senden oder Feedback übermitteln.
SIEHE AUCH
PSReadLine wird stark von der GNU-Leselinienbibliothek beeinflusst.