powershell美化

上一级页面:index-windows

前言

部分开发者可能习惯用PowerShell,但我习惯直接在WSL中做复杂脚本的开发。

PowerShell官方指南: PowerShell 文档 - PowerShell | Microsoft Docs

目前默认是5.x版本,可以手动安装最新的7.x。

官方文档:Windows 终端自定义提示符设置 | Microsoft Docs

PowerShell 美化

PowerShell 是微软的 shell 程序,比 cmd 先进,内置在 Windows 10 内的版本是 5.0,但是现在已经有全新的 PowerShell Core 7.0 可供下载安装了,个人建议下载一个,毕竟后面那个跨平台()但是不下也可以,不妨碍后面的教程:

因为苹果 zsh 的终端有各种花里胡哨的东西,所以 PowerShell 也想变漂亮;在 zsh 中有一个比较厉害的插件叫做 oh-my-zsh,所以到 PowerShell 这里来就整了一个差不多的 oh-my-posh,也可以美化 PowerShell;

因为 Windows Terminal + PowerShell Core + oh my posh 已经被微软官方认定为最佳组合了,所以官方也整了一个教程教你怎么使用这个玩意了,所以可以直接去看

安装 Powerline 字体

shell-字体配置

安装 oh my posh

Oh-My-Posh 为 PowerShell 提供主题了功能。

官方有安装文档:Windows | Oh My Posh

下载安装oh-my-posh

1
winget install oh-my-posh --source winget

这将安装一个应用程序oh-my-posh.exe

编辑相应配置文件

官方文档Change your prompt | Oh My Posh

1.在Windows Terminal中敲下下面两行命令

  • 第一条(确保先创建配置文件)
1
New-Item -Path $PROFILE -Type File -Force
  • 第二条(使用记事本打开配置文件)它的作用和 Linux 中的 ~/.bashrc 相似;
1
notepad $PROFILE

2.在打开的记事本中写入如下内容脚本文件,并保存

1
2
3

# 导入oh-my-posh
oh-my-posh init pwsh | Invoke-Expression
  • 命令表示导入oh-my-posh

更改后,请重新加载配置文件以使更改生效。

1
. $PROFILE

更新oh-my-posh

1
winget upgrade oh-my-posh

自定义主题

Customize | Oh My Posh

oh-my-posh提供了一些预留主题,查看Themes | Oh My Posh

agnosterplus主题为例,想要更改主题:

1
notepad $PROFILE

根据官方文档Windows | Oh My Posh所说,应当这样更改:

  • 这里的$env:POSH_THEMES_PATH指向oh-my-posh的预置主题目录

更改原本的init行,更改主题为agnosterplus

1
2
3
# 导入oh-my-posh 并且应用agnosterplus主题

oh-my-posh init pwsh --config "$env:POSH_THEMES_PATH\agnosterplus.omp.json" | Invoke-Expression

更改后,请重新加载配置文件以使更改生效。

1
. $PROFILE
  • 如果你没有使用 PowerLine 字体,使用经典主题 robbyrussell 也不会出现乱码方块问题。

配置完后,每次打开Windows Terminal中的Power shell都会执行配置文件中的命令。

预留主题

如果不是很喜欢默认主题,可以自行选择主题样式。

oh-my-posh提供了一些预留主题,查看Themes | Oh My Posh

也可以使用以下命令来查看所有主题以及主题的名称

1
Get-PoshThemes

找到喜欢的主题后,可以在之前的脚本文件中将主题名称替换为你想要主题的名称。

  • 注意:此处获取主题在oh-my-posh2的命令为:

    1
    Get-Theme

这时,你会发现出现了一些方框,效果并不像图片上那么好。那是因为,还没有给主题安装适应的字体。

安装posh-git

posh-git 是一个 PowerShell 模块,它通过提供可在 PowerShell 提示符中显示的 Git 状态摘要信息来集成 Git 和 PowerShell,

Posh-Git 提供了 Git 状态信息的提示,并为 Git 命令、参数、远程和分支名称等添加 tab 自动补全;

首先,你得安装git,git-安装-配置

在 Windows 上,脚本执行策略必须设置为 RemoteSignedUnrestricted。通过执行Get-ExecutionPolicy 来检查脚本执行策略设置。

如果策略未设置为两个必需值之一,请以管理员身份运行 PowerShell 并执行 。

1
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Confirm

congPowerShell 提示符执行以下两个命令之一,具体取决于(A) 你从未安装过 posh-git,还是 (B) 你已经安装了以前的版本:

(A) 你从未安装过 posh-git

1
2
# (A) You've never installed posh-git from the PowerShell Gallery
PowerShellGet\Install-Module posh-git -Scope CurrentUser -Force

注意:如果系统要求你信任 PowerShell 库中的程序包,请回答以继续安装 posh-gityes

或(B) 你已经安装了以前的版本:

1
2
# (B) You've already installed a previous version of posh-git from the PowerShell Gallery
PowerShellGet\Update-Module posh-git

编辑相应配置文件

官方文档dahlbyk/posh-git: A PowerShell environment for Git (github.com)

1.在Windows Terminal中敲下下面两行命令

  • 第一条(启动编辑power shell配置文件的引擎)
1
if (!(Test-Path -Path $PROFILE )) { New-Item -Type File -Path $PROFILE -Force }
  • 第二条(使用记事本打开配置文件)它的作用和 Linux 中的 ~/.bashrc 相似;
1
notepad $PROFILE

2.在打开的记事本中写入如下内容脚本文件,并保存

1
2
# 导入posh-git
Import-Module posh-git
  • 命令表示导入posh-git

然后使用命令让配置文件生效

更改后,请重新加载配置文件以使更改生效。

1
. $PROFILE

安装Nerd Fonts字体并应用

1.安装字体

shell-字体配置

2.使用字体

windows-terminal字体配置

创建 linux style的命令alias

官方已经提供了一些兼容性别名 - PowerShell |微软文档 (microsoft.com)

方式1 – 通用别名创建函数

自己可以增加一个创建别名的函数:django - 相当于PowerShell中的Bash别名 - Stack Overflow

一般通过创建函数(New-Item Function)的方式来创建Alias,而不是使用官方的Set-Alias命令,详情见:关于函数提供程序 - PowerShell | Microsoft Docs

$profile中添加

1
notepad $PROFILE
1
2
3
4
5
function New-BashStyleAlias([string]$name, [string]$command)
{
$sb = [scriptblock]::Create($command)
New-Item "Function:\global:$name" -Value $sb | Out-Null
}

调用示例如下

1
New-BashStyleAlias django-admin-jy 'jython.exe /path/to/jython-dev/dist/bin/django-admin.py @args'

官方已经有了ls的别名,但还没有la``ll

1
2
New-BashStyleAlias la ls
New-BashStyleAlias ll ls

实际上通过创建函数(New-Item Function)的方式来创建别名Alias,将不能进行tab自动补全,详情见:关于函数提供程序 - PowerShell | Microsoft Docs

通过这种方式创建的别名,要删除,使用命令

1
Remove-Item Function:<Function name>

例如删除ll别名

1
Remove-Item Function:ll

获取所有的函数

1
Get-ChildItem -Path Function:

方式2 – 定义一个函数

另外一种方式是定义一个_函数_,这样可以自动完成参数名称(在 -之后按 tab 键),缺点是你要为每个alias都编写一个函数

1
2
3
function django-admin-jy {
jython.exe /path/to/jython-dev/dist/bin/django-admin.py @args
}

方式3 – 官方的Set-Alias等命令

也可以通过官方的方式(Set-Alias等)来创建alias

要注意的是,PowerShell 别名(Set-Alias等命令)不允许使用参数,它们只能引用命令名称,所以这种方法不能写出通用的创建函数

命令名称可以是 cmdlet函数的名称,也可以是脚本或可执行文件的名称/路径

阅读文档

首先设置一个保存别名的文件

在配置文件所在的目录创建一个新的配置文件profile.ps1

1
notepad $((Split-Path $profile -Parent) + "\profile.ps1")

在其中写入一些alias

1
2
3
Set-Alias -Name la -Value ls
Set-Alias -Name ll -Value ls

这个新的配置文件将在powershell加载时加载

以后想要修改,可以

1
notepad $((Split-Path $profile -Parent) + "\profile.ps1")

其实际保存在Documents\PowerShell\profile.ps1,Documents是你系统的文档文件夹的路径

Pasted image 20220609151207

通过这种方式创建的别名,要获取所有别名

1
Get-Alias

参考、引用、致谢

在 Windows 10 中使用 zsh 作为默认终端 - 七海の参考書 (shiraha.cn)

How to create PowerShell alias permanently? (tutorialspoint.com)