Set-PSReadLineOption

自定義 PSReadLine命令行編輯的行為。

Syntax

Set-PSReadLineOption
   [-EditMode <EditMode>]
   [-ContinuationPrompt <string>]
   [-HistoryNoDuplicates]
   [-AddToHistoryHandler <Func[string,Object]>]
   [-CommandValidationHandler <Action[CommandAst]>]
   [-HistorySearchCursorMovesToEnd]
   [-MaximumHistoryCount <int>]
   [-MaximumKillRingCount <int>]
   [-ShowToolTips]
   [-ExtraPromptLineCount <int>]
   [-DingTone <int>]
   [-DingDuration <int>]
   [-BellStyle <BellStyle>]
   [-CompletionQueryItems <int>]
   [-WordDelimiters <string>]
   [-HistorySearchCaseSensitive]
   [-HistorySaveStyle <HistorySaveStyle>]
   [-HistorySavePath <string>]
   [-AnsiEscapeTimeout <int>]
   [-PromptText <string[]>]
   [-ViModeIndicator <ViModeStyle>]
   [-ViModeChangeHandler <scriptblock>]
   [-PredictionSource <PredictionSource>]
   [-PredictionViewStyle <PredictionViewStyle>]
   [-Colors <hashtable>]
   [-TerminateOrphanedConsoleApps]
   [<CommonParameters>]

Description

Cmdlet Set-PSReadLineOption 會在編輯命令行時自定義 PSReadLine 模組的行為。 若要檢視 PSReadLine 設定,請使用 Get-PSReadLineOption

此命令所設定的選項僅適用於目前的工作階段。 若要保存任何選項,請將它們新增至配置檔腳本。 如需詳細資訊,請參閱 about_Profiles自定義殼層環境

範例

範例 1:設定前景和背景色彩

本範例會將 PSReadLine 設定為在灰色背景上顯示具有綠色前景文字的批註標記。 在範例中使用的逸出序列中, 32 代表前景色彩, 47 代表背景色彩。

Set-PSReadLineOption -Colors @{ "Comment"="`e[32;47m" }

您可以選擇只設定前景文字色彩。 例如,批註標記的亮綠色前景文字色彩:"Comment"="`e[92m"

範例 2:設定鈴鐺樣式

在此範例中, PSReadLine 會回應需要使用者注意的錯誤或條件。 BellStyle 設定為以 60 毫秒發出 1221 Hz 的聽覺嗶聲。

Set-PSReadLineOption -BellStyle Audible -DingTone 1221 -DingDuration 60

注意

此功能可能無法在平臺上的所有主機上運作。

範例 3:設定多個選項

Set-PSReadLineOption 可以使用哈希表來設定多個選項。

$PSReadLineOptions = @{
    EditMode = "Emacs"
    HistoryNoDuplicates = $true
    HistorySearchCursorMovesToEnd = $true
    Colors = @{
        "Command" = "#8181f7"
    }
}
Set-PSReadLineOption @PSReadLineOptions

哈希表會 $PSReadLineOptions 設定索引鍵和值。 Set-PSReadLineOption 使用的索引鍵和值 @PSReadLineOptions 來更新 PSReadLine 選項。

您可以在 PowerShell 命令列上檢視輸入哈希表名稱 $PSReadLineOptions 的索引鍵和值。

範例 4:設定多個色彩選項

這個範例示範如何在單一命令中設定多個色彩值。

Set-PSReadLineOption -Colors @{
  Command            = 'Magenta'
  Number             = 'DarkGray'
  Member             = 'DarkGray'
  Operator           = 'DarkGray'
  Type               = 'DarkGray'
  Variable           = 'DarkGreen'
  Parameter          = 'DarkGreen'
  ContinuationPrompt = 'DarkGray'
  Default            = 'DarkGray'
}

範例 5:設定多個類型的色彩值

此範例示範三種不同的方法,說明如何設定 PSReadLine 中顯示的標記色彩。

Set-PSReadLineOption -Colors @{
 # Use a ConsoleColor enum
 "Error" = [ConsoleColor]::DarkRed

 # 24 bit color escape sequence
 "String" = "$([char]0x1b)[38;5;100m"

 # RGB value
 "Command" = "#8181f7"
}

範例 6:使用 ViModeChangeHandler 顯示 Vi 模式變更

此範例會發出數據指標變更 VT 逸出,以回應 Vi 模式變更。

function OnViModeChange {
    if ($args[0] -eq 'Command') {
        # Set the cursor to a blinking block.
        Write-Host -NoNewLine "`e[1 q"
    } else {
        # Set the cursor to a blinking line.
        Write-Host -NoNewLine "`e[5 q"
    }
}
Set-PSReadLineOption -ViModeIndicator Script -ViModeChangeHandler $Function:OnViModeChange

OnViModeChange 函式會設定 Vi 模式的游標選項:插入和命令。 ViModeChangeHandlerFunction:使用提供者將 OnViModeChange 參考為腳本區塊物件。

如需詳細資訊,請參閱 about_Providers

範例 7:使用 HistoryHandler 篩選新增至歷程記錄的命令

下列範例示範如何使用 AddToHistoryHandler 來防止將任何 Git 命令儲存至歷程記錄。

$ScriptBlock = {
    Param([string]$line)

    if ($line -match "^git") {
        return $false
    } else {
        return $true
    }
}

Set-PSReadLineOption -AddToHistoryHandler $ScriptBlock

如果命令以 開頭git,則 scriptblock 會傳$false回 。 這與傳 SkipAdding回 AddToHistory 列舉的效果相同。 如果命令不是以 git開頭,處理程式會 $true 傳回 ,而 PSReadLine 會將命令儲存在歷程記錄中。

範例 8:在命令執行之前,使用 CommandValidationHandler 來驗證命令

此範例示範如何在執行命令之前,使用 CommandValidationHandler 參數執行驗證命令。 此範例會特別使用 子命令cmt檢查命令git,並以完整名稱 commit取代該命令。 如此一來,您可以建立子命令的速記別名。

# Load the namespace so you can use the [CommandAst] object type
using namespace System.Management.Automation.Language

Set-PSReadLineOption -CommandValidationHandler {
    param([CommandAst]$CommandAst)

    switch ($CommandAst.GetCommandName()) {
        'git' {
            $gitCmd = $CommandAst.CommandElements[1].Extent
            switch ($gitCmd.Text) {
                'cmt' {
                    [Microsoft.PowerShell.PSConsoleReadLine]::Replace(
                        $gitCmd.StartOffset, $gitCmd.EndOffset - $gitCmd.StartOffset, 'commit')
                }
            }
        }
    }
}
# This checks the validation script when you hit enter
Set-PSReadLineKeyHandler -Chord Enter -Function ValidateAndAcceptLine

範例 9:使用 PromptText 參數

當發生剖析錯誤時, PSReadLine 會變更提示紅色的一部分。 PromptText 參數會告訴 PSReadLine 提示字串的一部分,使其成為紅色。

例如,下列範例會建立包含目前路徑的提示,後面接著大於字元 (>) 和空格。

function prompt { "PS $pwd> " }`
Set-PSReadLineOption -PromptText '> ' # change the '>' character red
Set-PSReadLineOption -PromptText '> ', 'X ' # replace the '>' character with a red 'X'

第一個字串是當發生剖析錯誤時,您想要讓提示字串成為紅色的部分。 第二個字串是剖析錯誤時要使用的替代字串。

參數

-AddToHistoryHandler

指定 ScriptBlock ,控制命令新增至 PSReadLine 歷程記錄的方式。

ScriptBlock 會接收命令行做為輸入。

ScripBlock 應該傳回 AddToHistoryOption 列舉的成員、其中一個成員的字串名稱,或布爾值。 下列清單描述可能的值及其效果。

  • MemoryAndFile - 將命令新增至歷程記錄檔和目前的工作階段。
  • MemoryOnly - 將命令新增至目前會話的歷程記錄。
  • SkipAdding - 請勿將命令新增至目前工作階段的歷程記錄檔。
  • $false - 與 值 SkipAdding相同。
  • $true - 與 值 MemoryAndFile相同。
Type:Func<T,TResult>[System.String,System.Object]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-AnsiEscapeTimeout

當輸入重新導向時,此選項專屬於 Windows,例如,在或screentmux執行 時。

透過 Windows 上的重新導向輸入,許多索引鍵會以逸出字元開頭的字元序列傳送。 無法區分單一逸出字元後面接著更多字元和有效的逸出序列。

假設終端機可以比用戶類型更快傳送字元。 PSReadLine 會先等候此逾時,再結束它收到完整的逸出序列。

如果您在輸入時看到隨機或非預期的字元,您可以調整此逾時。

Type:Int32
Position:Named
Default value:100
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-BellStyle

指定 PSReadLine 如何回應各種錯誤和模棱兩可的情況。

有效值如下:

  • 聽著:一個簡短的嗶聲。
  • 視覺效果:文字會短暫閃爍。
  • :沒有意見反應。
Type:BellStyle
Position:Named
Default value:Audible
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Colors

Colors 參數會指定 PSReadLine 所使用的各種色彩。

自變數是哈希表,其中索引鍵會指定元素,而值則指定色彩。 如需詳細資訊,請參閱 about_Hash_Tables

色彩可以是 ConsoleColor 的值,例如 [ConsoleColor]::Red或有效的 ANSI 逸出序列。 有效的逸出序列取決於您的終端機。 在 PowerShell 5.0 中,紅色文字的範例逸出序列為 $([char]0x1b)[91m。 在 PowerShell 6 和更新版本中,相同的逸出序列是 `e[91m。 您可以指定其他逸出序列,包括下列類型:

已新增兩個色彩設定,以支援 PSReadLine 2.2.0 中的 自定義 ListView

  • ListPredictionColor - 設定前置 > 字元和尾端來源名稱的色彩,例如 [History]。 根據預設,它會使用 DarkYellow 做為前景色彩。

  • ListPredictionSelectedColor - 設定指出已選取清單專案的色彩。 根據預設,它會使用 DarkBlack 做為背景色彩。

  • 256 色彩

  • 24 位色彩

  • 前景、背景或兩者

  • 反向,粗體

如需 ANSI 色彩代碼的詳細資訊,請參閱維琪百科文章 ANSI 逸出程式碼

有效的金鑰包括:

  • ContinuationPrompt:接續提示的色彩。
  • 強調:強調色彩。 例如,搜尋歷程記錄時的相符文字。
  • 錯誤:錯誤色彩。 例如,在提示字元中。
  • 選取範圍:要反白顯示功能表選取範圍或選取文字的色彩。
  • 預設值:預設令牌色彩。
  • 批註:批註標記色彩。
  • 關鍵詞:關鍵詞標記色彩。
  • 字串:字串標記色彩。
  • 運算子:運算符標記色彩。
  • 變數:變數標記色彩。
  • 命令:命令令牌色彩。
  • 參數:參數令牌色彩。
  • 類型:類型令牌色彩。
  • 數位:數字標記色彩。
  • 成員:成員名稱令牌色彩。
  • InlinePrediction:預測建議內嵌檢視的色彩。
  • ListPrediction:前置 > 字元和預測來源名稱的色彩。
  • ListPredictionSelected:清單檢視中所選預測的色彩。
Type:Hashtable
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-CommandValidationHandler

指定ValidateAndAcceptLine 呼叫的 ScriptBlock。 如果擲回例外狀況,驗證會失敗,並回報錯誤。

擲回例外狀況之前,驗證處理程式可以將游標放在錯誤點,以便更容易修正。 驗證處理程式也可以變更命令行,以更正常見的印刷錯誤。

ValidateAndAcceptLine 可用來避免使用無法運作的命令來雜亂您的歷程記錄。

Type:Action<T>[CommandAst]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-CompletionQueryItems

指定顯示而不提示的完成項目數目上限。

如果要顯示的項目數目大於此值, PSReadLine 會在顯示完成專案之前提示 是/否

Type:Int32
Position:Named
Default value:100
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ContinuationPrompt

指定輸入多行輸入時,在後續行開頭顯示的字串。 預設值為大於符號的雙精度浮點數(>>)。 空字串有效。

Type:String
Position:Named
Default value:>>
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-DingDuration

指定當 BellStyle 設定為 Audible,嗶聲的持續時間。

Type:Int32
Position:Named
Default value:50ms
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-DingTone

指定當 BellStyle 設定為 Audible,嗶聲的音調(Hz)。

Type:Int32
Position:Named
Default value:1221
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-EditMode

指定命令行編輯模式。 使用此參數會重設 所 Set-PSReadLineKeyHandler設定的任何金鑰系結。

有效值如下:

  • Windows:金鑰系結會模擬 PowerShell、Cmd 和 Visual Studio。
  • Emacs:金鑰系結會模擬 Bash 或 Emacs。
  • Vi:按鍵系結模擬 Vi。

用來 Get-PSReadLineKeyHandler 查看目前設定 之 EditMode 的索引鍵系結。

Type:EditMode
Position:Named
Default value:Windows
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ExtraPromptLineCount

指定額外的行數。

如果您的提示跨越一行以上,請指定此參數的值。 當您想要在 PSReadLine 顯示某些輸出之後顯示提示時,請使用此選項。 例如, PSReadLine 會傳回完成清單。

這個選項比舊版 PSReadLine 少,但在使用函式時 InvokePrompt 很有用。

Type:Int32
Position:Named
Default value:0
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-HistoryNoDuplicates

此選項會控制召回行為。 重複的命令仍會新增至歷程記錄檔。 設定此選項時,只會在叫用命令時出現最新的調用。 重複的命令會新增至歷程記錄,以在召回期間保留順序。 不過,您通常不想在召回或搜尋歷程記錄時多次看到命令。

根據預設,全域 PSConsoleReadLineOptions 物件的 HistoryNoDuplicates 屬性會設定為 True。 若要變更屬性值,您必須指定 SwitchParameter 的值,如下所示:-HistoryNoDuplicates:$False。 您可以只使用 SwitchParameter-HistoryNoDuplicates設定回 True

使用下列命令,您可以直接設定 屬性值:

(Get-PSReadLineOption).HistoryNoDuplicates = $False

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-HistorySavePath

指定儲存歷程記錄之檔案的路徑。 執行 Windows 或非 Windows 平台的電腦會將檔案儲存在不同的位置。 檔案名會儲存在變數 $($Host.Name)_history.txt中,例如 ConsoleHost_history.txt

如果您未使用此參數,預設路徑如下所示:

Windows

  • $env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine\$($Host.Name)_history.txt

非 Windows

  • $env:XDG_DATA_HOME/powershell/PSReadLine/$($Host.Name)_history.txt
  • $HOME/.local/share/powershell/PSReadLine/$($Host.Name)_history.txt
Type:String
Position:Named
Default value:A file named $($Host.Name)_history.txt in $env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine on Windows and $env:XDG_DATA_HOME/powershell/PSReadLine or $HOME/.local/share/powershell/PSReadLine on non-Windows platforms
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-HistorySaveStyle

指定 PSReadLine 如何儲存歷程記錄。

有效值如下所示:

  • SaveIncrementally:執行每個命令後儲存歷程記錄,並在PowerShell的多個實例之間共用。
  • SaveAtExit:P owerShell 結束時附加歷程記錄檔。
  • SaveNothing:請勿使用歷程記錄檔。

注意

如果您將 HistorySaveStyle 設定SaveNothing ,然後將它設定為SaveIncrementally稍後在同一個會話中,PSReadLine 會儲存先前在會話中執行的所有命令。

Type:HistorySaveStyle
Position:Named
Default value:SaveIncrementally
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-HistorySearchCaseSensitive

指定在 ReverseSearchHistoryHistorySearchBackward函式中,歷程記錄搜尋會區分大小寫。

根據預設,全域 PSConsoleReadLineOptions 物件的 HistorySearchCaseSensitive 屬性會設定為 False使用此 SwitchParameter 會將 屬性值設定為 True。 若要將屬性值變更回來,您必須指定 SwitchParameter 的值,如下所示:-HistorySearchCaseSensitive:$False

使用下列命令,您可以直接設定 屬性值:

(Get-PSReadLineOption).HistorySearchCaseSensitive = $False

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-HistorySearchCursorMovesToEnd

表示游標會使用搜尋,移至您從歷程記錄載入的命令結尾。 當此參數設定為 $False時,游標會保留在按下向上或向下箭號時的位置。

根據預設,全域 PSConsoleReadLineOptions 物件的 HistorySearchCursorMovesToEnd 屬性會設定為 False使用此 SwitchParameter 會將 屬性值設定為 True。 若要將屬性值變更回來,您必須指定 SwitchParameter 的值,如下所示:-HistorySearchCursorMovesToEnd:$False

使用下列命令,您可以直接設定 屬性值:

(Get-PSReadLineOption).HistorySearchCursorMovesToEnd = $False

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-MaximumHistoryCount

指定要儲存在 PSReadLine 歷程記錄中的命令數目上限。

PSReadLine 歷程記錄與 PowerShell 歷程記錄不同。

Type:Int32
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-MaximumKillRingCount

指定儲存在終止環中的項目數目上限。

Type:Int32
Position:Named
Default value:10
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-PredictionSource

指定 PSReadLine 的來源以取得預測性建議。

有效值為:

  • - 停用預測性 IntelliSense 功能 (預設值)。
  • 歷程記錄 - 啟用預測性 IntelliSense 功能,並使用 PSReadLine 歷程記錄作為唯一的來源。
  • 外掛程式 - 啟用預測性 IntelliSense 功能,並使用外掛程式 (CommandPrediction) 作為唯一的來源。 PSReadLine 2.2.0 已新增此值
  • HistoryAndPlugin - 啟用預測性 IntelliSense 功能,並使用歷程記錄和外掛程式作為來源。 PSReadLine 2.2.0 已新增此值
Type:Microsoft.PowerShell.PredictionSource
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-PredictionViewStyle

設定預測文字顯示樣式。 預設值為 InlineView

  • InlineView - 目前存在的樣式,類似於魚殼和 zsh。 (預設值)
  • ListView - 建議會在下拉式清單中轉譯,而且使用者可以選取使用 UpArrowDownArrow

此參數已在 PSReadLine 2.2.0 中新增

Type:Microsoft.PowerShell.PredictionViewStyle
Position:Named
Default value:InlineView
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-PromptText

此參數會設定 PromptText 屬性的值。 預設值是 "> "

PSReadLine 會分析您的提示函式,以判斷如何只變更部分提示的色彩。 此分析不可靠 100%。 如果 PSReadLine 以非預期的方式變更您的提示,請使用此選項。 包含任何尾端空格符。

此參數的值可以是單一字串或兩個字串的陣列。 第一個字串是您想要在剖析錯誤時變更為紅色的提示字串部分。 第二個字串是剖析錯誤時要使用的替代字串。

Type:String[]
Position:Named
Default value:>
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ShowToolTips

顯示可能的完成時,工具提示會顯示在完成清單中。

此選項預設為啟用。 在舊版 PSReadLine 中,預設不會啟用此選項。 若要停用,請將此選項設定為 $False

這個參數和選項已新增至 PSReadLine 2.3.4。

根據預設,全域 PSConsoleReadLineOptions 物件的 ShowTool 提示 屬性會設定為 True使用此 SwitchParameter 會將 屬性值設定為 True。 若要變更屬性值,您必須指定 SwitchParameter 的值,如下所示:-ShowToolTips:$False

使用下列命令,您可以直接設定 屬性值:

(Get-PSReadLineOption).ShowToolTips = $False

Type:SwitchParameter
Position:Named
Default value:True
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-TerminateOrphanedConsoleApps

此參數會將 TerminateOrphanedConsoleApps 選項設定為 $true

在 Windows 上,當您按下 Ctrl+c 來終止進程時,附加至主控台的每個進程都會接收終止訊號,而不只是作用中的殼層。 有時候,當殼層啟動一些大型子進程樹狀結構時,(假設建置系統,例如),某些進程可能會結束,讓多個進程同時嘗試取用控制台輸入。

將 TerminateOrphanedConsoleApps 選項設定$true時,PSReadLine 會記錄目前附加至主控台的進程清單。 之後,每當 PSReadLine 執行時,就會取得附加至主控台的新進程清單,並終止不在原始清單中的進程。

這個參數和選項已新增至 PSReadLine 2.3.4。

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ViModeChangeHandler

當 ViModeIndicator 設定為 Script時,每次模式變更時,都會叫用提供的腳本區塊。 腳本區塊會提供 類型的 ViMode一個自變數。

此參數是在 PowerShell 7 中引進的。

Type:ScriptBlock
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ViModeIndicator

此選項會設定目前 Vi 模式的視覺指標。 插入模式或命令模式。

有效值如下:

  • :沒有指標。
  • 提示:提示會變更色彩。
  • 數據指標:數據指標會變更大小。
  • 文稿:列印使用者指定的文字。
Type:ViModeStyle
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-WordDelimiters

指定為 ForwardWord 或 KillWord函式分隔文字的字元。

Type:String
Position:Named
Default value:;:,.[]{}()/\|^&*-=+'"---
Required:False
Accept pipeline input:False
Accept wildcard characters:False

輸入

None

您無法使用管線將物件傳送至此 Cmdlet。

輸出

None

此 Cmdlet 不會傳回任何輸出。