背景

Windows现在对开发者越来越友好了,有了WSL2且支持Docker,并且JetBrains的IDE也支持WSL2,开发环境改善了不少,Windows成为最好用的Linux发行版。

Windows的应用商店有一些高颜值的终端,作为传统的cmd与powershell终端的替代,视觉上提升了很多。powershell也有了新版,例如我目前在使用的PowerShell 7.1.5版本。

然而,对于在Linux上常用的oh-my-zsh,Powershell默认状态却并不美观,其命令提示符非常单调,也不能显示git仓库的分支。

效果

在众多oh-my-zsh主题里,我比较喜欢ys主题,主要是因为比较简约,不需要特殊的字体,没有各种花里胡哨的效果,因此可以在各种终端环境下完整地显示。下面是Linux上ys主题与PowerShell基于starshipys主题的对比效果:

screenshot-20211024232952

可以看到,还原度还是比较高的。移除了分支状态,因为效果一般并且很拖速度,考虑到很多时候是在IDE里管理代码,一般只需要关心下分支即可,所以干脆省去了。

网上很多是使用oh-my-posh进行美化的,本篇就不重复介绍了。我发现starship是跨平台而且感觉更为轻量,所以使用这个。

安装

首先安装新版PowerShell和Windows Terminal,都可以直接在微软商店里安装。PowerShell配置文件命令行那里最后加上 -NoLogo就可以不显示每次打开PowerShell时显示的提示内容:

1
2
3
4
5
PowerShell 7.1.5
Copyright (c) Microsoft Corporation.

https://aka.ms/powershell
Type 'help' to get help.

scoop安装

Windows上缺少好用的包管理工具,勉强接近的就是scoop了,尽管scoop也缺少很多功能,但装几个包还是够用的。玩scoop需要自备梯子,官网:Scoop

1
iwr -useb get.scoop.sh | iex

starship安装

1
scoop install starship

配置

PowerShell配置

%userprofile%\Documents\PowerShell目录下新建Microsoft.PowerShell_profile.ps1,填入如下内容:

1
Invoke-Expression (&starship init powershell)

PS:为了让PowerShell更好用,我还添加了如下内容:

1
2
3
4
5
Set-PSReadLineOption -EditMode Emacs
Set-PSReadlineKeyHandler -Key Tab -Function MenuComplete
# Autocompletion for arrow keys
Set-PSReadlineKeyHandler -Key UpArrow -Function HistorySearchBackward
Set-PSReadlineKeyHandler -Key DownArrow -Function HistorySearchForward

starship如何配置

%userprofile%\.config目录下新建starship.toml文件,该文件即是starship的配置文件。

starship的配置采用TOML配置文件,可以大概分为两大部分:整体配置与部分配置。顶层无section的部分是整体配置,各个部分在相应的section里进行配置。

例如,整体配置里,format就是控制要展示哪些部分以及这些部分要怎么展示。可以展示的部分有用户名(username)、主机名(hostname)等。

而针对每个部分的配置,都在相应的section里。例如,针对username这个部分的配置,就在[username]这个section里。

starship有一些默认配置,可以覆盖这些默认配置来自定义出自己喜欢的效果。具体的配置参数详见:Configuration | Starship

仿ys主题配置

下面是我的仿ys主题的配置:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
format = """$username$hostname$directory$git_branch$time$status
$character"""
command_timeout = 100
add_newline = true

[username]
style_user = "blue bold"
style_root = "red bold"
format = "[# $user]($style) "
disabled = false
show_always = true

[hostname]
format =  "@ [$hostname](bold green) "
disabled = false
ssh_only = false

[directory]
truncation_length = 1024
truncate_to_repo = false
style = "yellow bold"
format = "in [$path]($style) "

[git_branch]
style = "cyan"
symbol = ""
format = "on git:[$symbol$branch]($style) "

[status]
format = "$symbol[$status]($style) "
disabled = false
style = "red"
symbol = "C:"

[time]
disabled = false
format = '[\[$time\]]($style) '
time_format = "%T"
utc_time_offset = "+8"
style = "white"

[character]
success_symbol = "[>](bold green)"
error_symbol = "[>](bold red)"

总结

总的来说,starship还是比较轻量级的,没有自带多套主题,导致自定义起来稍微有点麻烦,特别是对于不想翻文档查看应该如何配置的,而且网上关于starship配置的文章也不多。但其实,配置起来也并没有太麻烦,这也和文档写得一般有一些关系,如果有一些现成的配置案例作为参考就更好懂了。