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 字体
安装 oh my posh
Oh-My-Posh 为 PowerShell 提供主题了功能。
官方有安装文档:Windows | Oh My Posh
下载安装oh-my-posh
winget install oh-my-posh --source winget
这将安装一个应用程序oh-my-posh.exe
编辑相应配置文件
官方文档Change your prompt | Oh My Posh
1.在Windows Terminal中敲下下面两行命令
- 第一条(确保先创建配置文件)
New-Item -Path $PROFILE -Type File -Force
- 第二条(使用记事本打开配置文件)它的作用和 Linux 中的
~/.bashrc
相似;
notepad $PROFILE
2.在打开的记事本中写入如下内容(脚本文件),并保存
# 导入oh-my-posh
oh-my-posh init pwsh | Invoke-Expression
- 命令表示导入oh-my-posh
更改后,请重新加载配置文件以使更改生效。
. $PROFILE
更新oh-my-posh
winget upgrade oh-my-posh
自定义主题
oh-my-posh提供了一些预留主题,查看Themes | Oh My Posh。
以agnosterplus主题为例,想要更改主题:
notepad $PROFILE
根据官方文档Windows | Oh My Posh所说,应当这样更改:
- 这里的
$env:POSH_THEMES_PATH
指向oh-my-posh的预置主题目录
更改原本的init
行,更改主题为agnosterplus
# 导入oh-my-posh 并且应用agnosterplus主题
oh-my-posh init pwsh --config "$env:POSH_THEMES_PATH\agnosterplus.omp.json" | Invoke-Expression
更改后,请重新加载配置文件以使更改生效。
. $PROFILE
- 如果你没有使用 PowerLine 字体,使用经典主题
robbyrussell
也不会出现乱码方块问题。
配置完后,每次打开Windows Terminal中的Power shell都会执行配置文件中的命令。
预留主题
如果不是很喜欢默认主题,可以自行选择主题样式。
oh-my-posh提供了一些预留主题,查看Themes | Oh My Posh。
也可以使用以下命令来查看所有主题以及主题的名称
Get-PoshThemes
找到喜欢的主题后,可以在之前的脚本文件中将主题名称替换为你想要主题的名称。
注意:此处获取主题在oh-my-posh2的命令为:
Get-Theme
这时,你会发现出现了一些方框,效果并不像图片上那么好。那是因为,还没有给主题安装适应的字体。
安装posh-git
posh-git 是一个 PowerShell 模块,它通过提供可在 PowerShell 提示符中显示的 Git 状态摘要信息来集成 Git 和 PowerShell,
Posh-Git 提供了 Git 状态信息的提示,并为 Git 命令、参数、远程和分支名称等添加 tab 自动补全;
首先,你得安装git,git-安装-配置
在 Windows 上,脚本执行策略必须设置为 RemoteSigned
或 Unrestricted
。通过执行Get-ExecutionPolicy
来检查脚本执行策略设置。
如果策略未设置为两个必需值之一,请以管理员身份运行 PowerShell 并执行 。
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Confirm
congPowerShell 提示符执行以下两个命令之一,具体取决于(A) 你从未安装过 posh-git,还是 (B) 你已经安装了以前的版本:
(A) 你从未安装过 posh-git
# (A) You've never installed posh-git from the PowerShell Gallery
PowerShellGet\Install-Module posh-git -Scope CurrentUser -Force
注意:如果系统要求你信任 PowerShell 库中的程序包,请回答以继续安装 posh-git
yes
或(B) 你已经安装了以前的版本:
# (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配置文件的引擎)
if (!(Test-Path -Path $PROFILE )) { New-Item -Type File -Path $PROFILE -Force }
- 第二条(使用记事本打开配置文件)它的作用和 Linux 中的
~/.bashrc
相似;
notepad $PROFILE
2.在打开的记事本中写入如下内容(脚本文件),并保存
# 导入posh-git
Import-Module posh-git
- 命令表示导入posh-git
然后使用命令让配置文件生效
更改后,请重新加载配置文件以使更改生效。
. $PROFILE
安装Nerd Fonts字体并应用
1.安装字体
2.使用字体
创建 linux style的命令alias
官方已经提供了一些兼容性别名 - PowerShell |微软文档 (microsoft.com)
方式1 -- 通用别名创建函数
自己可以增加一个创建别名的函数:django - 相当于PowerShell中的Bash别名 - Stack Overflow
一般通过创建函数(New-Item Function)
的方式来创建Alias,而不是使用官方的Set-Alias
命令,详情见:关于函数提供程序 - PowerShell | Microsoft Docs
在$profile
中添加
notepad $PROFILE
function New-BashStyleAlias([string]$name, [string]$command)
{
$sb = [scriptblock]::Create($command)
New-Item "Function:\global:$name" -Value $sb | Out-Null
}
调用示例如下
New-BashStyleAlias django-admin-jy 'jython.exe /path/to/jython-dev/dist/bin/django-admin.py @args'
官方已经有了ls
的别名,但还没有la``ll
New-BashStyleAlias la ls
New-BashStyleAlias ll ls
实际上通过创建函数(New-Item Function)
的方式来创建别名Alias,将不能进行tab自动补全,详情见:关于函数提供程序 - PowerShell | Microsoft Docs
通过这种方式创建的别名,要删除,使用命令
Remove-Item Function:<Function name>
例如删除ll
别名
Remove-Item Function:ll
获取所有的函数
Get-ChildItem -Path Function:
方式2 -- 定义一个函数
另外一种方式是定义一个_函数_,这样可以自动完成参数名称(在 -
之后按 tab 键),缺点是你要为每个alias都编写一个函数
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
或函数的名称
,也可以是脚本或可执行文件的名称/路径
。
阅读文档
- about Aliases - PowerShell | Microsoft Docs
- Set-Alias (Microsoft.PowerShell.Utility) - PowerShell | Microsoft Docs
首先设置一个保存别名的文件
在配置文件所在的目录创建一个新的配置文件profile.ps1
notepad $((Split-Path $profile -Parent) + "\profile.ps1")
在其中写入一些alias
Set-Alias -Name la -Value ls
Set-Alias -Name ll -Value ls
这个新的配置文件将在powershell加载时加载
以后想要修改,可以
notepad $((Split-Path $profile -Parent) + "\profile.ps1")
其实际保存在Documents\PowerShell\profile.ps1
,Documents
是你系统的文档文件夹的路径
通过这种方式创建的别名,要获取所有别名
Get-Alias
参考、引用、致谢
在 Windows 10 中使用 zsh 作为默认终端 - 七海の参考書 (shiraha.cn)
How to create PowerShell alias permanently? (tutorialspoint.com)