1823 字
9 分钟
美化我的 Windows Powershell 全纪录

这,是Windows Terminal下的Powershell

在每天的coding中,我都要与它打交道,久而久之,我发现它有点单调,于是我萌生了美化它的想法

前置条件#

  • Powershell 7+(必须)
  • Powershell 的设置中允许用户运行脚本(必须)
    • 使用Set-ExecutionPolicy来进行设置,后面跟着级别(例如RemoteSignedunrestricted)等,可以加-user来只对本用户进行修改
  • Windows Terminal(Win11自带,Win10必须)
  • scoop(可选)

备份#

在做美化之前,我强烈建议你进行一次备份,直接搜索创建还原点然后根据按钮提示进行备份就可以了

安装scoop(可选)#

使用这条命令安装scoop

Terminal window
Invoke-Expression (New-Object System.Net.WebClient).DownloadString('https://get.scoop.sh')

如果遇到错误提示,请检查是否进行了Set-ExecutionPolicy

安装过程的提示应该是这样的

Terminal window
PS C:\Users\GamerNoTitle> Invoke-Expression (New-Object System.Net.WebClient).DownloadString('https://get.scoop.sh')
Initializing...
Downloading...
Creating shim...
Adding ~\scoop\shims to your path.
Scoop was installed successfully!
Type 'scoop help' for instructions.

到这里就安装完毕了,输入scoop会弹出它的使用提示

安装所需要的字体(可选)#

{% note warning %}

不一定要用本文提到的这两种 Nerd Fonts,建议挑一个自己喜欢的

{% endnote %}

安装 Meslo Nerd Fonts#

{% note info %}

这是网上大多数 Powershell 美化攻略都推荐的字体,我个人不是很喜欢,你可以尝试一下,如果不喜欢,可以往下看看别的

{% endnote %}

因为会有特殊字体的需求,所以我需要把它们先提前装好,我直接用 scoop 安装的 nerd-fonts

如果你没有特殊图标字体的需求,可以不装的

Terminal window
scoop bucket add nerd-fonts
scoop install Meslo-NF-Mono # 这里需要管理员权限

如果你像我下图这样遇到了网络问题,记得打开TUN模式

安装完了以后,我们需要在Windows Terminal的设置中,把默认字体从Cascadia Mono改成MesloLGS Nerd Font Mono(或同系列其他字体)

安装 CaskaydiaMono Nerd Font#

因为个人感觉 Meslo Nerd Fonts 实在是太细了,我还是喜欢原来 Terminal 自带的那个字体,于是我就去找其他的 Nerd Font,然后找到了这个,感觉比较符合我的胃口

下载链接:https://github.com/ryanoasis/nerd-fonts/releases/download/v3.3.0/CascadiaMono.zip

直接按照平常装字体那么安装就行了,然后在字体选择里面选择它就可以了

其他 Nerd Font#

来这里挑吧:https://www.nerdfonts.com/font-downloads

安装 oh-my-posh#

可以去微软商店装

https://apps.microsoft.com/detail/xp8k0hkjfrxgck?hl=en-us&gl=US

或者直接从 Github 下载 MSI 安装包

Releases · JanDeDobbeleer/oh-my-posh

安装好后,如果你装了 scoop,建议再安装一个 posh-git

Terminal window
scoop bucket add extras
scoop install posh-git
Add-PoshGitToProfile

如果本机没有7-zip,它会自动装一个(依赖)

Terminal window
PS C:\Users\GamerNoTitle> scoop install posh-git
WARN Purging previous failed installation of 7zip.
ERROR '7zip' isn't installed correctly.
Removing older version (24.09).
'7zip' was uninstalled.
Installing '7zip' (24.09) [64bit] from 'main' bucket
7z2409-x64.msi (1.9 MB) [=========================================================================] 100%
Checking hash of 7z2409-x64.msi ... ok.
Extracting 7z2409-x64.msi ... done.
Linking ~\scoop\apps\7zip\current => ~\scoop\apps\7zip\24.09
Creating shim for '7z'.
Creating shim for '7zFM'.
Making C:\Users\GamerNoTitle\scoop\shims\7zfm.exe a GUI binary.
Creating shim for '7zG'.
Making C:\Users\GamerNoTitle\scoop\shims\7zg.exe a GUI binary.
Creating shortcut for 7-Zip (7zFM.exe)
Persisting Codecs
Persisting Formats
Running post_install script...done.
'7zip' (24.09) was installed successfully!
Notes
-----
Add 7-Zip as a context menu option by running:
"C:\Users\GamerNoTitle\scoop\apps\7zip\current\install-context.reg"
Installing 'posh-git' (1.1.0) [64bit] from 'extras' bucket
posh-git.1.1.0.nupkg (44.3 KB) [==================================================================] 100%
Checking hash of posh-git.1.1.0.nupkg ... ok.
Extracting posh-git.1.1.0.nupkg ... done.
Running pre_install script...done.
Linking ~\scoop\apps\posh-git\current => ~\scoop\apps\posh-git\1.1.0
Adding ~\scoop\modules to your PowerShell module path.
Installing PowerShell module 'posh-git'
Linking ~\scoop\modules\posh-git => ~\scoop\apps\posh-git\current
'posh-git' (1.1.0) was installed successfully!

启用 oh-my-posh#

使用下面的命令来加载 oh-my-posh

Terminal window
oh-my-posh init pwsh | Invoke-Expression

此时就会发现终端已经大变样了

可以去 oh-my-posh 的网站看看各种各样的主题,挑一个自己喜欢的

Themes | Oh My Posh

这里放上几个我觉得还不错的主题名称

blueish
catppuccin
easy-term
gmay
if_tea
Tokyo

你需要使用这样的命令来使得 oh-my-posh 每次都被加载(你需要把theme换成你喜欢的主题名称)

Terminal window
oh-my-posh init pwsh --config 'C:\Users\GamerNoTitle\AppData\Local\Programs\oh-my-posh\themes\<theme>.omp.json' | Invoke-Expression

这行命令需要写在 $PROFILE 里面,可以直接 notepad $PROFILE 或者 code $PROFILE 打开这个配置文件,写进去就好了,例如我用的主题是easy-term,就写作oh-my-posh init pwsh --config "$env:POSH_THEMES_PATH/easy-term.omp.json" | Invoke-Expression

再次打开Powershell,就会发现它确实已经加载了自己的配置文件了

安装文件图标模块(可选)#

我想要让我的Terminal自动根据文件类型显示图标,这个时候我们需要安装Terminal-Icons(需要安装Nerd Fonts)

这里我采用 scoop 安装:scoop install terminal-icons

Terminal window
╭─  🏠  ~  | RAM: 24/31GB ⌛ 462ms ⏰ 17:56:13
╰─ scoop install terminal-icons
Installing 'terminal-icons' (0.11.0) [64bit] from 'extras' bucket
terminal-icons.0.11.0.nupkg (124.5 KB) [======================================================================] 100%
Checking hash of terminal-icons.0.11.0.nupkg ... ok.
Extracting terminal-icons.0.11.0.nupkg ... done.
Running pre_install script...done.
Linking ~\scoop\apps\terminal-icons\current => ~\scoop\apps\terminal-icons\0.11.0
Installing PowerShell module 'Terminal-Icons'
Linking ~\scoop\modules\Terminal-Icons => ~\scoop\apps\terminal-icons\current
'terminal-icons' (0.11.0) was installed successfully!
Notes
-----
Use the module by running: 'Import-Module Terminal-Icons'
Add it to your $PROFILE to make it permanent
A Nerd Font is required for this module to work

同样,我们需要把配置写进 $PROFILE 里面,直接加上这一行

Terminal window
Import-Module -Name Terminal-Icons

然后跑 ls 或者 dir 就能够看到图标了

总结#

最后我换了张图,顺带换了个配色方案,这样看起来就很协调了

其实玩这个美化还有一个原因就是我昨天给我的 Ubuntu Live Server 装了 zsh,然后就想着把 Windows 也弄一下,弄出来的结果挺不错的,应该能在我的电脑坚持比较久的时间吧(俗话说美化的尽头是默认)

芙芙可爱捏~最后放上方案合集

  • 配色方案:One Half Dark

  • 字体:CaskaydiaMono Nerd Font

  • 背景图:自己去下 https://t.me/DohnaNyan/9471

  • 背景不透明度:30%

  • 其他保留默认

  • $PROFILE内容

Terminal window
oh-my-posh init pwsh --config "$env:POSH_THEMES_PATH/easy-term.omp.json" | Invoke-Expression
Import-Module -Name Terminal-Icons
  • 更改过的easy-term内容(添加了Python的venv显示,效果看下图,覆盖了 C:\Users\%username%\AppData\Local\Programs\oh-my-posh\themes\easy-term.omp.json

{
"$schema": "https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/schema.json",
"blocks": [
{
"alignment": "left",
"newline": true,
"segments": [
{
"background": "#0c7bbb",
"foreground": "#ffffff",
"leading_diamond": "\u256d\u2500\ue0b2",
"properties": {
"alpine": "\uf300",
"arch": "\uf303",
"centos": "\uf304",
"debian": "\uf306",
"elementary": "\uf309",
"fedora": "\uf30a",
"gentoo": "\uf30d",
"linux": "\ue712",
"macos": "\ue711",
"manjaro": "\uf312",
"mint": "\uf30f",
"opensuse": "\uf314",
"raspbian": "\uf315",
"ubuntu": "\uf31c",
"windows": "\ue70f"
},
"style": "diamond",
"template": " {{ if .WSL }}\ue712 on {{ end }}{{ .Icon }} ",
"type": "os"
},
{
"background": "#DA627D",
"foreground": "#ffffff",
"powerline_symbol": "\ue0b0",
"style": "diamond",
"template": " 🏠 ",
"type": "text"
},
{
"background": "#8a62da",
"foreground": "#ffffff",
"powerline_symbol": "\ue0b0",
"properties": {
"style": "folder"
},
"style": "powerline",
"template": " {{ .Path }} ",
"type": "path"
},
{
"background": "#191f48",
"foreground": "#43CCEA",
"style": "powerline",
"powerline_symbol": "\ue0b0",
"foreground_templates": [
"{{ if or (.Working.Changed) (.Staging.Changed) }}#FF9248{{ end }}",
"{{ if and (gt .Ahead 0) (gt .Behind 0) }}#ff4500{{ end }}",
"{{ if gt .Ahead 0 }}#B388FF{{ end }}",
"{{ if gt .Behind 0 }}#B388FF{{ end }}"
],
"properties": {
"branch_template": "{{ trunc 25 .Branch }}",
"fetch_stash_count": true,
"fetch_status": true,
"fetch_upstream_icon": true
},
"template": " {{ .UpstreamIcon }}{{ .HEAD }}{{if .BranchStatus }} {{ .BranchStatus }}{{ end }}{{ if .Working.Changed }} \uf044 {{ .Working.String }}{{ end }}{{ if and (.Working.Changed) (.Staging.Changed) }} |{{ end }}{{ if .Staging.Changed }} \uf046 {{ .Staging.String }}{{ end }}{{ if gt .StashCount 0 }} \ueb4b {{ .StashCount }}{{ end }} ",
"trailing_diamond": "\ue0b4",
"type": "git"
}
],
"type": "prompt"
},
{
"alignment": "right",
"segments": [
{
"foreground": "#81ff91",
"style": "diamond",
"template": "<#cc7eda> \u007C </><#7eb8da>RAM:</> {{ (div ((sub .PhysicalTotalMemory .PhysicalAvailableMemory)|float64) 1073741824.0) }}/{{ (div .PhysicalTotalMemory 1073741824.0) }}GB",
"type": "sysinfo"
},
{
"foreground": "#81ff91",
"properties": {
"fetch_version": true
},
"style": "powerline",
"template": "<#cc7eda> \u007C </><#7eb8da>\ue718</> {{ if .PackageManagerIcon }}{{ .PackageManagerIcon }} {{ end }}{{ .Full }}",
"type": "node"
},
{
"type": "php",
"style": "powerline",
"foreground": "#81ff91",
"template": "<#cc7eda> \u007C </><#7eb8da>\ue73d</> {{ .Full }}"
},
{
"type": "npm",
"style": "powerline",
"foreground": "#81ff91",
"template": "<#cc7eda> \u007C </><#7eb8da>\ue71e </> {{ .Full }}"
},
{
"type": "python",
"style": "powerline",
"foreground": "#81ff91",
"properties": {
"fetch_virtual_env": true,
"fetch_version": true
},
"template": "{{ if .Venv }}<#cc7eda> \u007C </><#7eb8da>\ue73c</> {{ .Env.VIRTUAL_ENV | base }} ({{ .Full }}){{ end }}"
},
{
"type": "sysinfo",
"style": "powerline",
"foreground": "#81ff91",
"template": "<> </>"
},
{
"background": "#cecece",
"foreground": "#4b4b4b",
"leading_diamond": "\ue0b2",
"trailing_diamond": "\ue0b0",
"properties": {
"style": "austin",
"threshold": 150
},
"style": "diamond",
"template": "⌛ {{ .FormattedMs }} ",
"type": "executiontime"
},
{
"background": "#cecece",
"foreground": "#4b4b4b",
"leading_diamond": "\ue0b2",
"properties": {
"time_format": "15:04:05"
},
"style": "diamond",
"template": "⏰ {{ .CurrentDate | date .Format }} ",
"trailing_diamond": "\ue0b0",
"type": "time"
}
],
"type": "prompt"
},
{
"alignment": "left",
"newline": true,
"segments": [
{
"foreground": "#0c7bbb",
"style": "plain",
"template": "\u2570\u2500",
"type": "text"
}
],
"type": "prompt"
}
],
"final_space": true,
"version": 3
}
美化我的 Windows Powershell 全纪录
https://bili33.top/posts/beatify-my-powershell/
作者
GamerNoTitle
发布于
2025-03-09
许可协议
CC BY-NC-SA 4.0