Please enable Javascript to view the contents

PowerShell主题设置

 ·  ☕ 5 分钟
    🏷️

PowerShell下不同主题的效果图:powershell-theme01.png

配置方式一:简单更改配色

  • 更改默认PowerShell终端字体:比如更纱黑体
  • 通过微软提供的 PowerShell 配色的小工具 ColorTool 更改配色
  • 使用第三方终端:比如 Fluent Terminal

配置方式二:自定义提示符

推荐直接用下面的方式:

  • 安装 oh-my-posh:它是 PowerShell 提示符的主题框架,将让你可以为PowerShell提示符设置主题,并且自带多个主题。(点击链接可获取更多信息)

  • 安装 posh-git:用于显示Git状态指示(它不包含git) Posh-Git(PowerShell Git)将在PowerShell 提示符下为您提供git存储库的目录中相关信息。

  • 安装 Get-ChildItemColor :为 PowerShell 的输出添加颜色(比如为 ls 的输出上色)

    上面三个需要通过 NuGet 安装,所以先以管理员方式打开 PowerShell,然后分别运行下面的两条命令:

    1
    2
    
    Install-PackageProvider NuGet -MinimumVersion '2.8.5.201' -Force
    Set-PSRepository -Name PSGallery -InstallationPolicy Trusted
    

    然后在普通 PowerShell 中 使用下面的命令安装 oh-my-posh 、 posh-git 和 Get-ChildItemColor :

    1
    2
    3
    
    Install-Module -AllowClobber posh-git -Scope CurrentUser 
    Install-Module oh-my-posh -Scope CurrentUser
    Install-Module -AllowClobber Get-ChildItemColor -Scope CurrentUser
    

    其实直接在管理员模式下运行上面命令(去掉末尾的-Scope CurrentUser )还会省去很多麻烦

  • 添加(配置文件可能还不存在)或编辑 PowerShell 配置文件,

    1
    2
    3
    4
    
    # 先使用如下命令来检测和添加一个 PowerShell 配置文件
    if (!(Test-Path -Path $PROFILE )) { New-Item -Type File -Path $PROFILE -Force }
    # 再通过如下命令编辑该配置文件
    ise $PROFILE
    

    ise:表示 Windows PowerShell ISE ,通常用它来编辑 .ps1文件;你也可以使用记事本打开 notepad $PROFILE

    Powershell 的配置文件路径由变量 $PROFILE 确定,文件名一般为 Microsoft.PowerShell_profile.ps1

  • 然后在配置文件中添加如下内容

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    
    # 在打开 PowerShell 时导入模块
    Import-Module Get-ChildItemColor
    # 通过别名的方式将 l 和 ls 设置为 Get-ChildItemColor 相关输出以进行着色
    Set-Alias l Get-ChildItem -option AllScope
    Set-Alias ls Get-ChildItemColorFormatWide -option AllScope
    # 导入另外两个模块
    Import-Module posh-git 
    Import-Module oh-my-posh 
    # 选择主题(可以在命令行中输入 Set-Theme 加 tab 来查看可用主题名称)
    Set-Theme robbyrussell
    
  • 下载支持的字体:用于正确显示内容,避免出现方块 ;比如更纱黑体

  • 安装第三方终端: 默认的PowerShell终端不管是配色还是易用性都非常差;要想完整适配 oh-my-posh ,需要使用第三方终端比如 Cmder 或 Fluent Terminal

  • 配置第三方终端使用相关字体,比如更纱黑体。不要忘记这一步。

  • 重启第三方终端,连接 PowerShell 查看效果

第三方终端使用 Cmder

如果使用的是 Cmder 则还需要从下面的两项配置中选择一种进行配置:

  • 配置方式一:将上面 $PROFILE(即Microsoft.PowerShell_profile.ps1文件) 的内容加入 cmder安装路径的 config目录下的 user-profile.ps1中。

  • 配置方式二:你也可以配置 cmder 的 Powershell标签 直接加载 Microsoft.PowerShell_profile.ps1文件。通过在cmder 👉 settings 👉 启动 👉 任务 👉 PowerShell::PowerShell 的命令组内容修改为下面的形式,注意文件路径需要是你自己的 Microsoft.PowerShell_profile.ps1路径:

    PowerShell -ExecutionPolicy Bypass -NoLogo -NoProfile -NoExit -Command "Invoke-Expression '. ''D:\Fan Dean\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1'''"
    

错误排查

无法下载模块

关键的提示信息:“警告: 无法下载可用提供程序列表。请检查 Internet 连接。”

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
$  Install-Module posh-git -Scope CurrentUser

需要使用 NuGet 提供程序来继续操作
PowerShellGet 需要使用 NuGet 提供程序"2.8.5.201"或更高版本来与基于 NuGet 的存储库交互。必须在"C:\Program
Files\PackageManagement\ProviderAssemblies""C:\Users\Fan
Dean\AppData\Local\PackageManagement\ProviderAssemblies"中提供 NuGet 提供程序。也可以通过运行
'Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force' 安装 NuGet 提供程序。是否要让 PowerShellGet
 立即安装并导入 NuGet 提供程序?
[Y](Y)  [N](N)  [S] 暂停(S)  [?] 帮助 (默认值为"Y"):
警告: 无法下载可用提供程序列表。请检查 Internet 连接。
PackageManagement\Install-PackageProvider : 找不到提供程序"NuGet"的指定搜索条件的匹配项。程序包提供程序要求 "Pac
kageManagement""Provider" 标记。请检查指定的程序包是否具有标记。
所在位置 C:\Program Files\WindowsPowerShell\Modules\PowerShellGet\1.0.0.1\PSModule.psm1:7468 字符: 21
...

先尝试 以管理员方式打开 PowerShell,然后分别运行下面的两条命令:

1
2
Install-PackageProvider NuGet -MinimumVersion '2.8.5.201' -Force
Set-PSRepository -Name PSGallery -InstallationPolicy Trusted

如果还是不行则需要科学上网或通过 scoop 安装:

1
scoop install posh-git oh-my-posh 

如果无法下载 Get-ChildItemColor 可以参考该链接(官方文档),选择手动安装。

提示找不到模块

开启终端时提示模块找不到 ,比如:

Import-Module : The specified module 'posh-git' was not loaded because no valid module file was found in any module di
rectory.
。。。

PowerShell 会在PSModulePath变量指定的目录中搜索指定的模块(安装时也会安装到这里)。查看该变量值的方法是在 PowerShell 运行 $Env:PSModulePath ,如果要添加或修改变量值可以:

  • 修改其对应的环境变量

  • 或参见" 修改PSModulePath安装路径"

  • 或在配置文件中添加,方式如下:

    1
    2
    3
    
    # 添加 Get-ChildItemColor 所在模块的路径
    $DModulePath="D:\Felix\Documents\WindowsPowerShell\Modules" 
    $env:PSModulePath = $env:PSModulePath.Insert(0, "$DModulePath;")
    

没有发现 git 命令

如果出现

PS C:\Users\Fan Dean> Import-Module posh-git
警告: git command could not be found. Please create an alias or add it to your PATH.
C:\Users\Fan Dean> Import-Module oh-my-posh
  • 可能是你没有安装 git ,安装就好了。

  • 可能你的git包含于cmder完整版中,但是此路径没有包含在PATH中,则需要添加一下。

出现方块

终端忘记设置字体或下载的字体无法支持相应符号,建议安装 更纱黑体。

补充

查看主题配置:

# 查看当前主题配置
$ ThemeSettings
MyThemesLocation     : D:\Fan Dean\Documents\WindowsPowerShell\PoshThemes
ErrorCount           : 0
GitSymbols           : {OriginSymbols, LocalWorkingStatusSymbol, LocalDefaultStatusSymbol, BranchUntrackedSymbol...}
CurrentUser          : Fan Dean
PromptSymbols        : {SegmentSeparatorForwardSymbol, ElevatedSymbol, TruncatedFolderSymbol,
                       SegmentSeparatorBackwardSymbol...}
CurrentThemeLocation : D:\Scoop\Applications\modules\oh-my-posh\Themes\Paradox.psm1
Colors               : {AdminIconForegroundColor, PromptBackgroundColor, PromptHighlightColor, GitLocalChangesColor...}

部分符号检测:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
# function U:用于检测当前选择的字体是否能正确显示那些特殊符号
function U
{
    param
    (
        [int] $Code
    )
 
    if ((0 -le $Code) -and ($Code -le 0xFFFF))
    {
        return [char] $Code
    }
 
    if ((0x10000 -le $Code) -and ($Code -le 0x10FFFF))
    {
        return [char]::ConvertFromUtf32($Code)
    }
 
    throw "Invalid character code $Code"
}
# 运行 . $PROFILE 重新加载配置文件, 然后在powershell中运行下面的命令
# Write-Host "$(U 0xE0B0) $(U 0x00B1) $(U 0xE0A0) $(U 0x27A6) $(U 0x2718) $(U 0x26A1) $(U 0x2699)"

将上面内容添加到 Microsoft.PowerShell_profile.ps1 文件中,然后在 Powershell中运行下面的命令来检测当前字体是否支持某些码点(但是这个不够全面):

Write-Host "$(U 0xE0B0) $(U 0x00B1) $(U 0xE0A0) $(U 0x27A6) $(U 0x2718) $(U 0x26A1) $(U 0x2699)"

为cmder配置背景图片:

如果你为Cmder设置了背景图片,并且为cmder设置了Power line,则会发现显示有些问题(蓝色部分没有显示);(通过鼠标悬停,看到提示)此时我们需要在"背景"处修改"替换颜色索引" 值为 #0 (默认为*,它会把蓝色替换掉,而我们的背景是黑色,#0表示的就是黑色)

参考:

您的鼓励是我最大的动力
alipay QR Code

Felix
作者
Felix
如无必要,勿增实体。

3

目录