共用方式為


PSReadLine

about_PSReadLine

簡短描述

PSReadLine 在 PowerShell 控制台中提供改善的命令行編輯體驗。

完整描述

PSReadLine 2.0 提供 PowerShell 控制台的強大命令行編輯體驗。 它提供:

  • 命令行的語法著色
  • 語法錯誤的視覺指示
  • 編輯和歷程記錄) (更好的多行體驗
  • 可自定義的按鍵系結
  • Cmd 和 Emacs 模式
  • 許多組態選項
  • Cmd 模式中的 Bash 樣式完成 (選擇性,Emacs 模式中的預設值為)
  • Emacsyank/kill-ring
  • 以 PowerShell 令牌為基礎的「單字」移動和終止

PSReadLine 需要 PowerShell 3.0 或更新版本,以及控制台主機。 它不適用於PowerShell ISE。 它會在 Visual Studio Code的控制台中運作。

注意

從 PowerShell 7.0 開始,如果偵測到螢幕助讀程式程式,PowerShell 會略過 Windows 上的自動載入 PSReadLine。 目前,PSReadLine 不適用於螢幕助讀程式。 Windows 上 PowerShell 7.0 的預設轉譯和格式設定正常運作。 如有必要,您可以手動載入模組。

下列函式可在 類別 [Microsoft.PowerShell.PSConsoleReadLine] 中使用。

基本編輯函式

中止

中止目前的動作,例如累加歷程記錄搜尋。

  • Emacs: <Ctrl+g>

AcceptAndGetNext

嘗試執行目前的輸入。 如果它可以像 AcceptLine) 一樣 (執行,請在下次呼叫 ReadLine 時從歷程記錄中重新叫用下一個專案。

  • Emacs: <Ctrl+o>

AcceptLine

嘗試執行目前的輸入。 如果目前的輸入不完整 (例如遺漏右括弧、括弧或引號,則接續提示會顯示在下一行,而 PSReadLine 會等候索引鍵編輯目前的輸入。

  • Cmd: <Enter>
  • Emacs: <Enter>
  • Vi 插入模式: <Enter>

AddLine

接續提示會顯示在下一行,PSReadLine 會等候索引鍵編輯目前的輸入。 即使單行本身完成輸入,這也適用於輸入多行輸入作為單一命令。

  • Cmd: <Shift+Enter>
  • Emacs: <Shift+Enter>
  • Vi 插入模式: <Shift+Enter>
  • Vi 命令模式: <Shift+Enter>

BackwardDeleteChar

刪除游標之前的字元。

  • Cmd: <Backspace><Ctrl+h>
  • Emacs: <Backspace>、、 <Ctrl+Backspace><Ctrl+h>
  • Vi 插入模式: <Backspace>
  • Vi 命令模式: <X><d,h>

BackwardDeleteLine

如同BackwardKillLine - 會從該行的點刪除文字,但不會將已刪除的文字放在kill-ring中。

  • Cmd: <Ctrl+Home>
  • Vi 插入模式: <Ctrl+u><Ctrl+Home>
  • Vi 命令模式:<Ctrl+u>、、 <Ctrl+Home><d,0>

BackwardDeleteWord

刪除上一個字。

  • Vi 命令模式: <Ctrl+w><d,b>

BackwardKillLine

清除從輸入開始到游標的輸入。 清除的文字會放在 kill-ring 中。

  • Emacs: <Ctrl+u><Ctrl+x,Backspace>

BackwardKillWord

清除從目前單字開頭到游標的輸入。 如果游標位於單字之間,則輸入會從上一個單字的開頭清除至游標。 清除的文字會放在 kill-ring 中。

  • Cmd: <Ctrl+Backspace>
  • Emacs: <Alt+Backspace><Escape,Backspace>
  • Vi 插入模式: <Ctrl+Backspace>
  • Vi 命令模式: <Ctrl+Backspace>

CancelLine

取消目前的輸入,將輸入保留在畫面上,但返回主機,以便再次評估提示。

  • Vi 插入模式: <Ctrl+c>
  • Vi 命令模式: <Ctrl+c>

複製

將選取的區域複製到系統剪貼簿。 如果未選取任何區域,請複製整行。

  • Cmd: <Ctrl+C>

CopyOrCancelLine

如果選取文字,請複製到剪貼簿,否則取消該行。

  • Cmd: <Ctrl+c>
  • Emacs: <Ctrl+c>

剪下

刪除選取的區域,將已刪除的文字放在系統剪貼簿中。

  • Cmd: <Ctrl+x>

DeleteChar

刪除游標底下的字元。

  • Cmd: <Delete>
  • Emacs: <Delete>
  • Vi 插入模式: <Delete>
  • Vi 命令模式:<Delete>、、<d,l><x>、、<d,Space>

DeleteCharOrExit

刪除游標下的字元,或如果行是空的,請結束進程。

  • Emacs: <Ctrl+d>

DeleteEndOfWord

刪除至字尾。

  • Vi 命令模式: <d,e>

DeleteLine

刪除目前行,啟用復原。

  • Vi 命令模式: <d,d>

DeleteLineToFirstChar

將文字從游標刪除到行的第一個非空白字元。

  • Vi 命令模式: <d,^>

DeleteToEnd

刪除至行尾。

  • Vi 命令模式: <D><d,$>

DeleteWord

刪除下一個字。

  • Vi 命令模式: <d,w>

ForwardDeleteLine

如同 ForwardKillLine - 從行尾到行尾刪除文字,但不會將已刪除的文字放在終止環中。

  • Cmd: <Ctrl+End>
  • Vi 插入模式: <Ctrl+End>
  • Vi 命令模式: <Ctrl+End>

InsertLineAbove

不論游標位於目前行的位置為何,都會在目前行上方建立新的空白行。 游標會移至新行的開頭。

  • Cmd: <Ctrl+Enter>

InsertLineBelow

不論游標位於目前行的位置為何,都會在目前行底下建立新的空白行。 游標會移至新行的開頭。

  • Cmd: <Shift+Ctrl+Enter>

InvertCase

反轉目前字元的大小寫,並移至下一個字元。

  • Vi 命令模式: <~>

KillLine

清除數據指標到輸入結尾的輸入。 清除的文字會放在終止環中。

  • Emacs: <Ctrl+k>

KillRegion

終止游標與標記之間的文字。

  • 函式未系結。

KillWord

清除從游標到目前單字結尾的輸入。 如果游標位於單字之間,則輸入會從游標清除到下一個單字的結尾。 清除的文字會放在終止環中。

  • Cmd: <Ctrl+Delete>
  • Emacs: <Alt+d><Escape,d>
  • Vi 插入模式: <Ctrl+Delete>
  • Vi 命令模式: <Ctrl+Delete>

貼上

從系統剪貼簿貼上文字。

  • Cmd: <Ctrl+v>、、 <Shift+Insert>
  • Vi 插入模式: <Ctrl+v>
  • Vi 命令模式: <Ctrl+v>

重要

使用 Paste 函式時,剪貼簿緩衝區的整個內容會貼到 PSReadLine 的輸入緩衝區中。 輸入緩衝區接著會傳遞至PowerShell剖析器。 使用主控台應用程式的 滑鼠右鍵 貼上方法貼上的輸入會一次複製到輸入緩衝區一個字元。 當複製換行符時,輸入緩衝區會傳遞至剖析器。 因此,輸入會一次剖析一行。 貼上方法之間的差異會導致不同的執行行為。

PasteAfter

將剪貼簿貼到游標之後,將游標移至貼上的文字結尾。

  • Vi 命令模式: <p>

PasteBefore

將剪貼簿貼到游標之前,將游標移至貼上的文字結尾。

  • Vi 命令模式: <P>

PrependAndAccept

前面加上 '#' 並接受這一行。

  • Vi 命令模式: <#>

取消復原

復原復原。

  • Cmd: <Ctrl+y>
  • Vi 插入模式: <Ctrl+y>
  • Vi 命令模式: <Ctrl+y>

RepeatLastCommand

重複最後一個文字修改。

  • Vi 命令模式: <.>

RevertLine

將所有輸入還原為目前的輸入。

  • Cmd: <Escape>
  • Emacs: <Alt+r><Escape,r>

ShellBackwardKillWord

清除從目前單字開頭到游標的輸入。 如果游標位於單字之間,則輸入會從上一個單字的開頭清除至游標。 清除的文字會放在終止環中。

函式未系結。

ShellKillWord

清除從游標到目前單字結尾的輸入。 如果游標位於單字之間,則輸入會從游標清除到下一個單字的結尾。 清除的文字會放在終止環中。

函式未系結。

SwapCharacters

交換目前字元及其之前的第一個字元。

  • Emacs: <Ctrl+t>
  • Vi 插入模式: <Ctrl+t>
  • Vi 命令模式: <Ctrl+t>

復原

復原先前的編輯。

  • Cmd: <Ctrl+z>
  • Emacs: <Ctrl+_><Ctrl+x,Ctrl+u>
  • Vi 插入模式: <Ctrl+z>
  • Vi 命令模式: <Ctrl+z><u>

UndoAll

復原行的所有先前編輯。

  • Vi 命令模式: <U>

UnixWordRubout

清除從目前單字開頭到游標的輸入。 如果游標位於單字之間,則輸入會從上一個單字的開頭清除至游標。 清除的文字會放在終止環中。

  • Emacs: <Ctrl+w>

ValidateAndAcceptLine

嘗試執行目前的輸入。 如果目前的輸入不完整 (例如遺漏右括弧、括弧或引號,則接續提示會顯示在下一行,而 PSReadLine 會等候索引鍵編輯目前的輸入。

  • Emacs: <Ctrl+m>

ViAcceptLine

接受行並切換至插入模式。

  • Vi 命令模式: <Enter>

ViAcceptLineOrExit

就像 Emacs 模式中的 DeleteCharOrExit 一樣,但接受行而不是刪除字元。

  • Vi 插入模式: <Ctrl+d>
  • Vi 命令模式: <Ctrl+d>

ViAppendLine

新行會插入目前這一行下方。

  • Vi 命令模式: <o>

ViBackwardDeleteGlob

刪除上一個單字,只使用空格元做為單字分隔符。

  • Vi 命令模式: <d,B>

ViBackwardGlob

將游標移回上一個單字的開頭,只使用空格符做為分隔符。

  • Vi 命令模式: <B>

ViDeleteBrace

尋找相符的大括弧、括弧或方括弧,並刪除內的所有內容,包括大括弧。

  • Vi 命令模式: <d,%>

ViDeleteEndOfGlob

刪除至字尾。

  • Vi 命令模式: <d,E>

ViDeleteGlob

刪除下一個 glob (空格符分隔字組) 。

  • Vi 命令模式: <d,W>

ViDeleteToBeforeChar

刪除直到指定的字元為止。

  • Vi 命令模式: <d,t>

ViDeleteToBeforeCharBackward

刪除直到指定的字元為止。

  • Vi 命令模式: <d,T>

ViDeleteToChar

刪除直到指定的字元為止。

  • Vi 命令模式: <d,f>

ViDeleteToCharBackward

刪除回溯直到指定的字元為止。

  • Vi 命令模式: <d,F>

ViInsertAtBegining

切換至 [插入] 模式,並將游標放在行的開頭。

  • Vi 命令模式: <I>

ViInsertAtEnd

切換至 [插入] 模式,並將游標置於行尾。

  • Vi 命令模式: <A>

ViInsertLine

新行會插入目前行上方。

  • Vi 命令模式: <O>

ViInsertWithAppend

從目前列位置附加 。

  • Vi 命令模式: <a>

ViInsertWithDelete

刪除目前的字元,並切換至 [插入] 模式。

  • Vi 命令模式: <s>

ViJoinLines

聯結目前行和下一行。

  • Vi 命令模式: <J>

ViReplaceLine

清除整個命令行。

  • Vi 命令模式: <S><c,c>

ViReplaceToBeforeChar

取代直到指定的字元為止。

  • Vi 命令模式: <c,t>

ViReplaceToBeforeCharBackward

取代直到指定的字元為止。

  • Vi 命令模式: <c,T>

ViReplaceToChar

刪除直到指定的字元為止。

  • Vi 命令模式: <c,f>

ViReplaceToCharBackward

取代直到指定的字元為止。

  • Vi 命令模式: <c,F>

ViYankBeginningOfLine

從緩衝區開頭到數據指標的十分叉子。

  • Vi 命令模式: <y,0>

ViYankEndOfGlob

從游標到 WORD () 結尾的) 。

  • Vi 命令模式: <y,E>

ViYankEndOfWord

從游標到文字結尾 () 。

  • Vi 命令模式: <y,e>

ViYankLeft

游標左邊的 (字元 () 。

  • Vi 命令模式: <y,h>

ViYankLine

對整個緩衝區進行管理。

  • Vi 命令模式: <y,y>

ViYankNextGlob

從游標到下一個 WORD () 的開頭,

  • Vi 命令模式: <y,W>

ViYankNextWord

在游標後面 () 字。

  • Vi 命令模式: <y,w>

ViYankPercent

從比對大括弧到/移的括弧。

  • Vi 命令模式: <y,%>

ViYankPreviousGlob

從 WORD 開頭 () 到游標。

  • Vi 命令模式: <y,B>

ViYankPreviousWord

在游標之前 (字組) 。

  • Vi 命令模式: <y,b>

ViYankRight

(字元) 在游標的正下方和右邊。

  • Vi 命令模式: <y,l><y,Space>

ViYankToEndOfLine

從游標到緩衝區結尾的溢出。

  • Vi 命令模式: <y,$>

ViYankToFirstChar

從第一個非空格符到游標的逸出。

  • Vi 命令模式: <y,^>

美國佬

將最近終止的文字新增至輸入。

  • Emacs: <Ctrl+y>

YankLastArg

將前一個歷程記錄行的最後一個自變數啟用。 使用 自變數時,第一次叫用它時,其行為就如同一般,就像一樣。 如果多次叫用,而是逐一查看歷程記錄,而arg會設定負值方向 (反轉方向。)

  • Cmd: <Alt+.>
  • Emacs:<Alt+.>、、<Alt+_><Escape,.><Escape,_>

YankNthArg

從上一個歷程記錄行) 命令之後,將第一個自變數 (。 使用自變數時,從0) 開始 (nth自變數,如果自變數為負數,則從最後一個自變數開始。

  • Emacs: <Ctrl+Alt+y><Escape,Ctrl+y>

YankPop

如果上一個作業是「雅克」或「容克Pop」,請以刪除環中的下一個已終止文字取代先前已擷取的文字。

  • Emacs: <Alt+y><Escape,y>

數據指標移動函式

BackwardChar

將游標向左移動一個字元。 這可能會將游標移至前一行的多行輸入。

  • Cmd: <LeftArrow>
  • Emacs: <LeftArrow><Ctrl+b>
  • Vi 插入模式: <LeftArrow>
  • Vi 命令模式:<LeftArrow>、、 <Backspace><h>

BackwardWord

將游標移回目前單字的開頭,如果介於單字之間,則為上一個單字的開頭。 Word 界限是由一組可設定的字元所定義。

  • Cmd: <Ctrl+LeftArrow>
  • Emacs: <Alt+b><Escape,b>
  • Vi 插入模式: <Ctrl+LeftArrow>
  • Vi 命令模式: <Ctrl+LeftArrow>

BeginningOfLine

如果輸入有多行,請移至目前行的開頭,或者如果已經在行的開頭,請移至輸入的開頭。 如果輸入有單行,請移至輸入的開頭。

  • Cmd: <Home>
  • Emacs: <Home><Ctrl+a>
  • Vi 插入模式: <Home>
  • Vi 命令模式: <Home>

EndOfLine

如果輸入有多個行,請移至目前行的結尾,或者如果已經在行尾,請移至輸入的結尾。 如果輸入有單行,請移至輸入的結尾。

  • Cmd: <End>
  • Emacs: <End><Ctrl+e>
  • Vi 插入模式: <End>

ForwardChar

將游標向右移動一個字元。 這可能會將游標移至多行輸入的下一行。

  • Cmd: <RightArrow>
  • Emacs: <RightArrow><Ctrl+f>
  • Vi 插入模式: <RightArrow>
  • Vi 命令模式:<RightArrow>、、 <Space><l>

ForwardWord

將游標向前移至目前單字的結尾,或在單字之間,移至下一個字的結尾。 Word 界限是由一組可設定的字元所定義。

  • Emacs: <Alt+f><Escape,f>

GotoBrace

移至相符的大括弧、括弧或方括弧。

  • Cmd: <Ctrl+]>
  • Vi 插入模式: <Ctrl+]>
  • Vi 命令模式: <Ctrl+]>

GotoColumn

移至arg所指示的數據行。

  • Vi 命令模式: <|>

GotoFirstNonBlankOfLine

將游標移至行中的第一個非空白字元。

  • Vi 命令模式: <^>

MoveToEndOfLine

將游標移至輸入的結尾。

  • Vi 命令模式: <End><$>

NextLine

將游標移至下一行。

  • 函式未系結。

NextWord

將游標向前移動至下一個單字的開頭。 Word 界限是由一組可設定的字元所定義。

  • Cmd: <Ctrl+RightArrow>
  • Vi 插入模式: <Ctrl+RightArrow>
  • Vi 命令模式: <Ctrl+RightArrow>

NextWordEnd

將游標向前移至目前單字的結尾,或在單字之間,移至下一個字的結尾。 Word 界限是由一組可設定的字元所定義。

  • Vi 命令模式: <e>

PreviousLine

將游標移至上一行。

  • 函式未系結。

ShellBackwardWord

將游標移回目前單字的開頭,如果介於單字之間,則為上一個單字的開頭。 Word 界限是由PowerShell令牌所定義。

  • 函式未系結。

ShellForwardWord

將游標向前移動至下一個單字的開頭。 Word 界限是由PowerShell令牌所定義。

  • 函式未系結。

ShellNextWord

將游標向前移至目前單字的結尾,或在單字之間,移至下一個字的結尾。 Word 界限是由PowerShell令牌所定義。

  • 函式未系結。

ViBackwardWord

將游標移回目前單字的開頭,如果介於單字之間,則為上一個單字的開頭。 Word 界限是由一組可設定的字元所定義。

  • Vi 命令模式: <b>

ViEndOfGlob

將游標移至字尾,只使用空格元做為分隔符。

  • Vi 命令模式: <E>

ViEndOfPreviousGlob

移至上一個單字的結尾,只使用空格元做為單字分隔符。

  • 函式未系結。

ViGotoBrace

類似於 GotoBrace,但是以字元為基礎,而不是以令牌為基礎。

  • Vi 命令模式: <%>

ViNextGlob

移至下一個單字,只使用空格元做為單字分隔符。

  • Vi 命令模式: <W>

ViNextWord

將游標向前移動至下一個單字的開頭。 Word 界限是由一組可設定的字元所定義。

  • Vi 命令模式: <w>

歷程記錄函式

BeginningOfHistory

移至歷程記錄中的第一個專案。

  • Emacs: <Alt+<>'

ClearHistory

清除 PSReadLine 中的歷程記錄。 這不會影響PowerShell歷程記錄。

  • Cmd: <Alt+F7>

EndOfHistory

移至記錄中目前輸入) 的最後一個專案 (。

  • Emacs: <Alt+>>

ForwardSearchHistory

透過歷程記錄執行累加向前搜尋。

  • Cmd: <Ctrl+s>
  • Emacs: <Ctrl+s>

HistorySearchBackward

將目前的輸入取代為 PSReadLine 歷程記錄中的 『previous』 專案,以符合開始與輸入與游標之間的字元。

  • Cmd: <F8>

HistorySearchForward

將目前的輸入取代為 PSReadLine 歷程記錄中的 『next』 專案,以符合開始與輸入與數據指標之間的字元。

  • Cmd: <Shift+F8>

NextHistory

將目前的輸入取代為 PSReadLine 歷程記錄中的 『next』 專案。

  • Cmd: <DownArrow>
  • Emacs: <DownArrow><Ctrl+n>
  • Vi 插入模式: <DownArrow>
  • Vi 命令模式:<DownArrow>、、 <j><+>

PreviousHistory

將目前的輸入取代為 PSReadLine 歷程記錄中的 『previous』 專案。

  • Cmd: <UpArrow>
  • Emacs: <UpArrow><Ctrl+p>
  • Vi 插入模式: <UpArrow>
  • Vi 命令模式:<UpArrow>、、 <k><->

ReverseSearchHistory

透過歷程記錄執行累加回溯搜尋。

  • Cmd: <Ctrl+r>
  • Emacs: <Ctrl+r>

ViSearchHistoryBackward

提示搜尋字串,並在 AcceptLine 上起始搜尋。

  • Vi 插入模式: <Ctrl+r>
  • Vi 命令模式: </><Ctrl+r>

完成函式

完成

嘗試對游標周圍的文字執行完成。 如果有多個可能的完成,則會使用最長的明確前置詞來完成。 如果嘗試完成最長的明確完成,則會顯示可能的完成清單。

  • Emacs: <Tab>

嘗試對游標周圍的文字執行完成。 如果有多個可能的完成,則會使用最長的明確前置詞來完成。 如果嘗試完成最長的明確完成,則會顯示可能的完成清單。

  • Cmd: <Ctrl+Space>
  • Emacs: <Ctrl+Space>

PossibleCompletions

顯示可能的完成清單。

  • Emacs: <Alt+=>
  • Vi 插入模式: <Ctrl+Space>
  • Vi 命令模式: <Ctrl+Space>

TabCompleteNext

嘗試完成游標周圍的文字,並完成下一個可用的完成。

  • Cmd: <Tab>
  • Vi 命令模式: <Tab>

TabCompletePrevious

嘗試完成游標周圍具有先前可用完成的文字。

  • Cmd: <Shift+Tab>
  • Vi 命令模式: <Shift+Tab>

ViTabCompleteNext

視需要結束目前的編輯群組,並叫用 TabCompleteNext。

  • Vi 插入模式: <Tab>

ViTabCompletePrevious

視需要結束目前的編輯群組,並叫用 TabCompletePrevious。

  • Vi 插入模式: <Shift+Tab>

其他函式

CaptureScreen

啟動互動式螢幕擷取 - 向上/向下箭號選取行,輸入將選取的文字複製到剪貼簿做為文字和 html。

  • 函式未系結。

ClearScreen

清除畫面,並在畫面頂端繪製目前的線條。

  • Cmd: <Ctrl+l>
  • Emacs: <Ctrl+l>
  • Vi 插入模式: <Ctrl+l>
  • Vi 命令模式: <Ctrl+l>

DigitArgument

啟動要傳遞至其他函式的新數位自變數。

  • Cmd:<Alt+0>、、<Alt+1><Alt+2><Alt+3><Alt+5><Alt+4><Alt+6><Alt+7>、、<Alt+8>、、 <Alt+9><Alt+->
  • Emacs:<Alt+0>、、<Alt+1><Alt+2><Alt+4><Alt+3><Alt+5><Alt+6>、、<Alt+7>、、<Alt+8>、、 <Alt+9><Alt+->
  • Vi 命令模式:<0>、、、<1><3><2><4><5><6><7>、、 <8><9>

InvokePrompt

清除目前的提示,並呼叫 prompt 函式以重新顯示提示。 適用於變更狀態的自定義金鑰處理程式,例如變更當前目錄。

  • 函式未系結。

ScrollDisplayDown

向下卷動顯示一個畫面。

  • Cmd: <PageDown>
  • Emacs: <PageDown>

ScrollDisplayDownLine

將顯示向下捲動一行。

  • Cmd: <Ctrl+PageDown>
  • Emacs: <Ctrl+PageDown>

ScrollDisplayToCursor

將顯示器捲動至游標。

  • Emacs: <Ctrl+End>

ScrollDisplayTop

將顯示器捲動到頂端。

  • Emacs: <Ctrl+Home>

ScrollDisplayUp

向上捲動顯示一個畫面。

  • Cmd: <PageUp>
  • Emacs: <PageUp>

ScrollDisplayUpLine

向上卷動顯示一行。

  • Cmd: <Ctrl+PageUp>
  • Emacs: <Ctrl+PageUp>

SelfInsert

插入索引鍵。

  • 函式未系結。

ShowKeyBindings

顯示所有系結索引鍵。

  • Cmd: <Ctrl+Alt+?>
  • Emacs: <Ctrl+Alt+?>
  • Vi 插入模式: <Ctrl+Alt+?>

ViCommandMode

將目前的作業模式從 Vi-Insert 切換為 Vi-Command。

  • Vi 插入模式: <Escape>

ViDigitArgumentInChord

啟動新的數位自變數,以在vi的其中一個子節中傳遞至其他函式。

  • 函式未系結。

ViEditVisually

在$env:EDITOR 或 $env:VISUAL 所指定的文字編輯器中編輯命令行。

  • Emacs: <Ctrl+x,Ctrl+e>
  • Vi 命令模式: <v>

ViExit

結束殼層。

  • 函式未系結。

ViInsertMode

切換至 [插入] 模式。

  • Vi 命令模式: <i>

WhatIsKey

讀取金鑰,並告知我密鑰所系結的內容。

  • Cmd: <Alt+?>
  • Emacs: <Alt+?>

選取函式

ExchangePointAndMark

游標會放在標記的位置,而標記會移至游標的位置。

  • Emacs: <Ctrl+x,Ctrl+x>

SelectAll

選取整行。

  • Cmd: <Ctrl+a>

SelectBackwardChar

調整目前的選取範圍以包含前一個字元。

  • Cmd: <Shift+LeftArrow>
  • Emacs: <Shift+LeftArrow>

SelectBackwardsLine

調整目前的選取範圍,以從游標包含到行的開頭。

  • Cmd: <Shift+Home>
  • Emacs: <Shift+Home>

SelectBackwardWord

調整目前的選取範圍以包含上一個單字。

  • Cmd: <Shift+Ctrl+LeftArrow>
  • Emacs: <Alt+B>

SelectForwardChar

調整目前的選取範圍以包含下一個字元。

  • Cmd: <Shift+RightArrow>
  • Emacs: <Shift+RightArrow>

SelectForwardWord

調整目前的選取範圍,以使用 ForwardWord 包含下一個單字。

  • Emacs: <Alt+F>

SelectLine

調整目前的選取範圍,以從游標包含到行尾。

  • Cmd: <Shift+End>
  • Emacs: <Shift+End>

SelectNextWord

調整目前的選取範圍以包含下一個字。

  • Cmd: <Shift+Ctrl+RightArrow>

SelectShellBackwardWord

調整目前的選取範圍,以使用ShellBackwardWord包含上一個字。

  • 函式未系結。

SelectShellForwardWord

調整目前的選取範圍,以使用ShellForwardWord包含下一個字。

  • 函式未系結。

SelectShellNextWord

調整目前的選取範圍,以使用ShellNextWord包含下一個字。

  • 函式未系結。

SetMark

標記游標的目前位置,以供後續編輯命令使用。

  • Emacs: <Ctrl+>'

搜尋 函式

CharacterSearch

讀取字元,然後向前搜尋該字元的下一個出現專案。 如果指定了自變數,則向前搜尋 (,如果第 n 個出現的負數) ,則向前搜尋或向後搜尋。

  • Cmd: <F3>
  • Emacs: <Ctrl+]>
  • Vi 插入模式: <F3>
  • Vi 命令模式: <F3>

CharacterSearchBackward

讀取字元,然後向後搜尋該字元的下一個出現專案。 如果指定自變數,請向後搜尋 (或向前搜尋第 n 個出現的負數) 。

  • Cmd: <Shift+F3>
  • Emacs: <Ctrl+Alt+]>
  • Vi 插入模式: <Shift+F3>
  • Vi 命令模式: <Shift+F3>

RepeatLastCharSearch

重複最後一筆記錄的字元搜尋。

  • Vi 命令模式: <;>

RepeatLastCharSearchBackwards

重複最後錄製的字元搜尋,但方向相反。

  • Vi 命令模式: <,>

RepeatSearch

以與之前相同的方向重複最後一次搜尋。

  • Vi 命令模式: <n>

RepeatSearchBackward

以與之前相同的方向重複最後一次搜尋。

  • Vi 命令模式: <N>

SearchChar

讀取下一個字元,然後尋找它、往後再返回字元。 這是針對 『t』 功能。

  • Vi 命令模式: <f>

SearchCharBackward

讀取下一個字元,然後尋找它、往後移動,然後返回字元。 這適用於 『T' 功能。

  • Vi 命令模式: <F>

SearchCharBackwardWithBackoff

讀取下一個字元,然後尋找它、往後移動,然後返回字元。 這適用於 『T' 功能。

  • Vi 命令模式: <T>

SearchCharWithBackoff

讀取下一個字元,然後尋找它、往後再返回字元。 這是針對 『t』 功能。

  • Vi 命令模式: <t>

SearchForward

提示搜尋字串,並在 AcceptLine 上起始搜尋。

  • Vi 插入模式: <Ctrl+s>
  • Vi 命令模式: <?><Ctrl+s>

自定義按鍵系結

PSReadLine 支援使用 Cmdlet 的自定義按鍵系結 Set-PSReadLineKeyHandler。 大部分自定義按鍵系結都會呼叫上述其中一個函式,例如

Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward

您可以將 ScriptBlock 系結至金鑰。 ScriptBlock 可以執行許多您想要的動作。 一些有用的範例包括

  • 編輯命令行
  • 開啟新視窗 (,例如說明)
  • 變更目錄而不變更命令行

ScriptBlock 會收到兩個自變數:

  • $key - [ConsoleKeyInfo] 物件,這是觸發自定義系結的索引鍵。 如果您將相同的 ScriptBlock 系結至多個密鑰,而且需要根據密鑰執行不同的動作,您可以檢查$key。 許多自定義系結都會忽略這個自變數。

  • $arg - 任意自變數。 通常,這是使用者從 Key bindings DigitArgument 傳遞的整數自變數。 如果您的系結不接受自變數,請合理忽略此自變數。

讓我們看看將命令行新增至歷程記錄的範例,而不需執行。 當您發現忘記執行某些動作,但不想重新輸入您已輸入的命令行時,這非常有用。

$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

您可以在 PSReadLine 模組資料夾中安裝的檔案 SamplePSReadLineProfile.ps1 中看到更多範例。

大部分的按鍵系結會使用一些協助程式函式來編輯命令行。 這些 API 記載於下一節。

自訂金鑰系結支援 API

下列函式在 Microsoft.PowerShell.PSConsoleReadLine 中是公用的,但無法直接系結至索引鍵。 大部分在自定義按鍵系結中都很有用。

void AddToHistory(string command)

將命令行新增至歷程記錄,而不需執行。

void ClearKillRing()

清除 kill-ring。 這主要用於測試。

void Delete(int start, int length)

從開頭刪除長度字元。 此作業支持復原/取消復原。

void Ding()

根據使用者喜好設定執行 Ding 動作。

void GetBufferState([ref] string input, [ref] int cursor)
void GetBufferState([ref] Ast ast, [ref] Token[] tokens,
  [ref] ParseError[] parseErrors, [ref] int cursor)

這兩個函式會擷取有關輸入緩衝區目前狀態的實用資訊。 第一個更常用於簡單案例。 如果您的系結使用 Ast 執行更進階的動作,則會使用第二個 。

IEnumerable[Microsoft.PowerShell.KeyHandler]
  GetKeyHandlers(bool includeBound, bool includeUnbound)

此函式是由 Get-PSReadLineKeyHandler 使用,而且可能不適用於自定義按鍵系結。

Microsoft.PowerShell.PSConsoleReadLineOptions GetOptions()

此函式是由 Get-PSReadLineOption 使用,而且在自定義按鍵系結中可能不太有用。

void GetSelectionState([ref] int start, [ref] int length)

如果命令行上沒有選取專案,則會以開始和長度傳回 -1。 如果命令行上有選取範圍,則會傳回選取範圍的開始和長度。

void Insert(char c)
void Insert(string s)

在游標處插入字元或字串。 此作業支持復原/取消復原。

string ReadLine(runspace remoteRunspace,
  System.Management.Automation.EngineIntrinsics engineIntrinsics)

這是 PSReadLine 的主要進入點。 它不支援遞歸,因此在自定義按鍵系結中並不有用。

void RemoveKeyHandler(string[] key)

此函式是由 Remove-PSReadLineKeyHandler 使用,而且在自定義按鍵系結中可能不太有用。

void Replace(int start, int length, string replacement)

取代部分輸入。 此作業支持復原/取消復原。 這是慣用於Delete後面接著Insert,因為它會被視為復原的單一動作。

void SetCursorPosition(int cursor)

將游標移至指定的位移。 未追蹤數據指標移動以進行復原。

void SetOptions(Microsoft.PowerShell.SetPSReadLineOption options)

此函式是 Cmdlet Set-PSReadLineOption 所使用的協助程式方法,但對於想要暫時變更設定的自定義按鍵系結可能很有用。

bool TryGetArgAsInt(System.Object arg, [ref] int numericArg,
  int defaultNumericArg)

這個協助程式方法用於接受 DigitArgument 的自定義系結。 一般呼叫看起來像這樣

[int]$numericArg = 0
[Microsoft.PowerShell.PSConsoleReadLine]::TryGetArgAsInt($arg,
  [ref]$numericArg, 1)

注意

命令歷程記錄

PSReadLine 會維護歷程記錄檔,其中包含您從命令行輸入的所有命令和數據。 這可能包含敏感數據,包括密碼。 例如,如果您使用 ConvertTo-SecureString Cmdlet,密碼會以純文本的形式記錄在歷程記錄檔中。 歷程記錄檔是名為的 $($host.Name)_history.txt檔案。 在 Windows 系統上,歷程記錄檔會儲存在 $env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine。 在非 Windows 系統上,歷程記錄檔會儲存在 $env:XDG_DATA_HOME/powershell/PSReadLine$env:HOME/.local/share/powershell/PSReadLine

意見反應 & 參與 PSReadLine

GitHub 上的 PSReadLine

歡迎在 GitHub 頁面上提交提取要求或提交意見反應。

另請參閱

PSReadLine 受到 GNU 自述行 連結庫的影響很大。