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>
MenuComplete
嘗試對游標周圍的文字執行完成。 如果有多個可能的完成,則會使用最長的明確前置詞來完成。 如果嘗試完成最長的明確完成,則會顯示可能的完成清單。
- 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 受到 GNU 自述行 連結庫的影響很大。