Tian Jiale's Blog

PowerShell 美化之 ys 主题

简要说明

这篇文章本来是没有的,但之前突发奇想在 Windows上整了一个 Oh My Zsh,见文章Windows 中使用 Oh My Zsh 的各种方式,可 TMD 第二天就卡的要死,打开稳定耗时八九秒,输入命令真成了打字机,也没找到解决方案,又不甘心放弃 ys 主题,但还好找到了美化 power shell 输出提示的方法。

最终效果如下:

power shell 美化效果

Prompts

Prompts 函数可以用来创建自定义提示,这样就能替换下面这样的古董级终端命令提示。

PS C:\>

第一步,生成 power shell 配置文件。

notepad $Profile

该文件一般在用户的文档目录中,在其中增加函数 Prompts 即可实现命令提示的自定义。如果没有 return 则以最后一个字符串作为返回值。

function Prompt {
 "command prompts >"
}

之后我们对其做需要的修改即可。

VT 转义字符

转义字符只有 power shell 5 才开始支持,不过一般电脑也就是这个版本的,有关转义字符的介绍可以参见 ANSI 转义序列以及输出颜色字符详解,我们用到的是使用转义字符设置前景色。如下是示例。

$esc = [char]27
$at = "$esc[38;2;189;189;219m@$esc[0m"

输出效果是颜色为 rgb(189,189,219)@,依照此格式我们可以设置我们需要的命令提示的颜色。

ys 主题仿制

如上面图片所示,只实现了提示内容及颜色、Git 分支提示的支持,更多功能尚不支持,如果需要可以自己依据开发思路去自定义,如此也可实现自己喜欢的bash主题。

function Prompt {
 # 转义规则参见 https://www.cnblogs.com/xiaoqiangink/p/12718524.html
 $esc = [char]27
 $jing = "$esc[38;2;189;189;219m#$esc[0m"
 $at = "$esc[38;2;158;158;158m@$esc[0m"
 $on = "$esc[38;2;158;158;158mon$esc[0m"
 $in = "$esc[38;2;158;158;158min$esc[0m"
 $nl = [Environment]::NewLine
 $user = "$esc[38;2;122;184;184m$env:username$esc[0m"
 $hostname = "$esc[38;2;122;184;122m$env:ComputerName$esc[0m"
 $localtime = "$esc[38;2;158;158;158m[$(Get-Date -Format 'hh:mm:ss')]$esc[0m"

 $pattern = $env:userprofile -replace '\\', '\\'
 $promptString = "$(Get-Location)" -replace $pattern, "~"
 $promptString = $promptString -replace '\\', '/'
 $promptString = "$esc[38;2;219;219;189m$promptString$esc[0m"

 $git_branch = ""
 git rev-parse | Out-Null
 
 if ($?) {
  $branch = $(git branch --show-current --no-color)
  $branch = "$esc[38;2;122;184;184m$branch$esc[0m"
  $gitm = "$esc[38;2;217;230;242mgit:$esc[0m"
  $git_branch = " $on $gitm$branch"
 }

 "$jing $user $at $hostname $in $promptString$git_branch $localtime $nl"
}

Windows terminal 主题

我使用的主题配置如下:

{
 "background": "#0D1926",
 "black": "#000000",
 "blue": "#7A7AB8",
 "brightBlack": "#535353",
 "brightBlue": "#BDBDDB",
 "brightCyan": "#BDDBDB",
 "brightGreen": "#BDDBBD",
 "brightPurple": "#DBBDDB",
 "brightRed": "#DBBDBD",
 "brightWhite": "#FFFFFF",
 "brightYellow": "#DBDBBD",
 "cursorColor": "#FFFFFF",
 "cyan": "#7AB8B8",
 "foreground": "#D9E6F2",
 "green": "#7AB87A",
 "name": "Blazer",
 "purple": "#B87AB8",
 "red": "#B87A7A",
 "selectionBackground": "#FFFFFF",
 "white": "#D9D9D9",
 "yellow": "#B8B87A"
},

terminal 配色可以从 iTerm2-Color-SchemesWindows Terminal Themes 获取。