搭配 Oh My Posh 使用 PowerShell

CMD 是很快,但是功能偏少,最近看到了 Oh-my-posh 项目,于是决定试试的 PowerShell

准备

设置 PowerShell 执行策略,允许运行脚本

1
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
  • AllSigned: 所有脚本都需要签名,包括本地脚本。
  • Bypass: 不阻止任何操作,并且没有任何警告或提示。
  • Default: 设置默认策略,默认为 Restricted
  • RemoteSigned: 脚本可以运行,需要受信任的发布者对从 Internet 下载的脚本和配置文件的数字签名。
  • Restricted: 允许单个命令,阻止运行所有脚本文件。

关于执行策略 - PowerShell

配置 Oh My Posh

安装

或是手动安装

1
Set-ExecutionPolicy Bypass -Scope Process -Force; Invoke-Expression ((New-Object System.Net.WebClient).DownloadString('https://ohmyposh.dev/install.ps1'))

打开 PowerShell 输入,创建 oh my posh 配置文件

1
notepad $profile

保存下面内容

1
oh-my-posh init pwsh | Invoke-Expression

Windows 11 新版本的记事本如果提示找不到指定路径,可以直接输入 $profile 输出对应的路径,手动创建一下
或是直接在 文档 目录下创建一个 WindowsPowerShell 文件夹

然后重新打开一个 PowerShell 窗口,查看是否生效

修改主题

1
Get-PoshThemes

会获得所有主题的列表,并展示出来,然后按照提示选择或是编辑一个自己喜欢配置文件

下面是我自己使用的,与我在 Linux 下使用的 oh-my-zsh 有相同的样式

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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
{
"blocks": [
{
"alignment": "left",
"newline": false,
"segments": [
{
"foreground": "red",
"style": "plain",
"template": "[",
"type": "text"
},
{
"foreground": "red",
"style": "plain",
"template": " % ",
"type": "root"
},
{
"style": "plain",
"template": "<red>{{ .UserName }}</><red>@</><red>{{ .HostName }}]</> ",
"type": "session"
},
{
"foreground": "white",
"properties": {
"style": "full"
},
"style": "plain",
"template": "<darkGray></>{{ .Path }} ",
"type": "path"
},
{
"style": "plain",
"template": "<darkGray>on</> <white>git:</><cyan>{{ .HEAD }}</>{{ if .Working.Changed }}<red> x</>{{ end }} ",
"type": "git",
"properties": {
"fetch_status": true
}
},
{
"foreground": "darkGray",
"style": "plain",
"template": "[{{ .CurrentDate | date .Format }}]",
"type": "time"
},
{
"foreground": "red",
"style": "plain",
"template": " C:{{ if gt .Code 0 }}{{ .Code }}{{ end }} ",
"type": "exit"
}
],
"type": "prompt"
},
{
"alignment": "left",
"newline": true,
"segments": [
{
"foreground": "white",
"style": "plain",
"template": ">",
"type": "text"
}
],
"type": "prompt"
}
],
"final_space": true,
"version": 2
}

问题

VSCode 中打开终端提示
oh-my-posh : 无法将“oh-my-posh”项识别为 cmdlet、函数、脚本文件或可运行程序的名称

打开配置

1
notepad $profile

将开头的 oh-my-posh 修改为 oh-my-posh.exe 完整路径

PowerShell Tips

使用 &&

使用 ; 即可,例如

1
hexo g; hexo s

设置 alias

首先要允许脚本执行。

在配置文件 note $profile 中添加

1
function 别名 { 需要替代的命令,可以包含空格 }

例如:

1
function hd {hexo clean; hexo generate; hexo deploy}

启动 PowerShell 后可以直接运行 hd 替代

1
hexo clean; hexo generate; hexo deploy

Ref:

PowerShell 中使用 curl 无法接受参数

例如 curl ip.sb -4 报错

1
2
3
Invoke-WebRequest : 找不到接受实际参数“-4”的位置形式参数。
所在位置 行:1 字符: 1
...

这是因为 在 PowerShell 中,curlInvoke-WebRequest 的别名,可以使用下面的命令移除该别名,直接使用 curl

1
Remove-Item alias:curl

如果需要持久生效,需要将该命令保存到 $profile 文件中。

.gitignore 不生效

如果在 Powershell 中使用 echo 创建 .gitignore,文件的编码是 UTF-16LE 不是 UTF-8
使用 UTF-8 编码重新创建即可