Powershell 语法高亮显示覆盖前景色

Powershell 语法高亮显示覆盖前景色

我正在尝试设置 powershell 窗口的颜色。特别是,我经常会打开几个不同的窗口用于不同的目的,我想使用字体颜色来轻松区分它们(我为每个目的都有一个设置脚本,我想在其中设置颜色)。

我尝试使用以下命令执行此操作: $host.ui.rawui.ForegroundColor = "Blue" 当我运行此命令时,提示符会正确更改颜色,如果我按几次回车键,新行的颜色相同。但是,如果我发送命令(如ls)或甚至输入一些文本,然后将其删除并按回车键,颜色会恢复到其原始颜色: 示例图片 (最后的颜色变化是我输入文本,删除它,然后按回车键)

鉴于这种变化似乎发生在我输入文本时,我猜问题出在语法高亮上。每当调用高亮时,新的颜色就会消失。事实上,如果我使用Remove-Module psreadline,就不会有这个问题(我知道 psreadline 会处理语法高亮)。

这里的解决方案是什么?

  • 删除 psreadline 和所有相关功能?(有人知道如何在没有 psreadline 的情况下向 shell 命令历史记录中添加项目吗?)
  • 通过其他方式禁用语法高亮?(找不到方法,只有提示将所有高亮颜色更改为相同颜色,但这无法解决我的问题。没有高亮也没关系)
  • 每次发送命令时中断 PS 并重置颜色(看起来很黑客。此外,怎么做?)
  • 告诉 psreadline 将颜色重置为当前颜色(蓝色)而不是默认颜色(灰色)?(如何?)
  • 更新默认颜色(以便它恢复为蓝色)?(我如何才能使不同的窗口使用不同的方式而不必每次都手动设置?)
  • 忍受灰色文本并承认失败?

例子:

PS C:\> $console.ForegroundColor = "blue"; $console.ForegroundColor
Blue
PS C:\> $console.ForegroundColor
Gray

答案1

告诉 psreadline 将颜色重置为当前颜色(蓝色)而不是默认颜色(灰色)?

尝试将以下内容添加到您的profile.ps1

$options = Get-PSReadlineOption
$options.CommandColor = "blue"
$options.KeywordColor = "blue"
$options.NumberColor = "blue"
$options.MemberColor = "blue"
$options.VariableColor = "blue"

以下是我的参考:

$console = $host.UI.RawUI
$console.ForegroundColor = "black"
$console.BackgroundColor = "white"

$buffer = $console.BufferSize
$buffer.Width = 200
$buffer.Height = 2000
$console.BufferSize = $buffer

$size = $console.WindowSize
$size.Width = 200
$size.Height = 60
$console.WindowSize = $size

$colors = $host.PrivateData
$colors.VerboseForegroundColor = "blue"
$colors.VerboseBackgroundColor = "white"
$colors.WarningForegroundColor = "yellow"
$colors.WarningBackgroundColor = "white"
$colors.ErrorForegroundColor = "red"
$colors.ErrorBackgroundColor = "white"

Import-Module AudioDeviceCmdlets
Set-ExecutionPolicy Unrestricted

$env:Path = "C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\apps\WSCC\Sysinternals Suite;C:\apps\WSCC\NirSoft Utilities";

Function Prompt {
    $host.UI.RawUI.WindowTitle = Get-Location
    "> "
}

$options = Get-PSReadlineOption
$options.CommandColor = "black"
$options.KeywordColor = "black"
$options.NumberColor = "black"
$options.MemberColor = "black"
$options.VariableColor = "black"

# display version
# write-host "Version: " -noNewLine | get-host | select-object version | format-table -hideTableHeaders
write-host "Version: " -noNewLine | get-host | select version | ft -hideTableHeaders
chcp 65001 | out-null

相关内容