Windows 推出了新的终端 Windows Teminal
,虽然外观有所进步,但还是达不到自己预期,因此可以自己简单修改一下。
准备工作#
计算机上启动 Windows PowerShell
时,执行策略很可能是 Restricted
(默认设置)。
Restricted
执行策略不允许任何脚本运行。AllSigned
和 RemoteSigned
执行策略可防止 Windows PowerShell
运行没有数字签名的脚本。
因此如果直接安装很可能出现无法运行脚本的错误。
查看当前策略#
打开 Windows PowerShell
然后输入:
1
2
3
4
| get-executionpolicy
PS C:\WINDOWS\system32> get-executionpolicy
Restricted
|
修改策略#
以管理员身份打开 Windows Posershell
,执行下列命令:
1
2
| set-executionpolicy remotesigned
# 运行后输入 Y
|
安装 Windows 终端#
直接在微软商店搜索下载 Windows Terminal
安装 PowerShell 7#
按照官方的教程 或者直接使用下面的命令:
1
| winget install --id Microsoft.Powershell --source winget
|
安装好后打开 Windows 终端
,在 设置-启动-默认配置文件
中修改为 PowerShell
,注意不是 Windows PowerShell
,保存修改。
如果提示没有 winget
命令,首先通过微软商店安装,参考官方文档。
WinGet 命令行工具仅在 Windows 10 1709(版本 16299)或更高版本上受支持。 在你首次以用户身份登录 Windows(这会触发 Microsoft Store 将 Windows 程序包管理器注册为异步进程的一部分)之前,WinGet 工具不可用。 如果最近已经以用户身份进行了首次登录,但发现 WinGet 尚不可用,则可以打开 PowerShell 并输入以下命令来请求此 WinGet 注册:Add-AppxPackage -RegisterByFamilyName -MainPackage Microsoft.DesktopAppInstaller_8wekyb3d8bbwe
。
使用 oh-my-posh
来优化功能,美化界面。安装方法两种,一种是在微软商店搜索下载,另一种是 winget
下载。
1
| winget install JanDeDobbeleer.OhMyPosh -s winget
|
接下来安装并设置字体。安装作者推荐的 MesloLGM NF
字体,点此下载,这样可以解决部分字体图标渲染问题。打开 Windows Terminal
,按 Ctrl + Shift + , 打开设置文件,然后在第 41
行 profiles
下 default
中添加字体设置,在第 43
行回车,然后添加如下代码后保存。
1
2
3
4
| "font":
{
"face": "MesloLGM NF"
}
|
加载 oh-my-posh
设置,在 Windows Terminal
中输入下面第一行命令创建新配置文件,创建后输入两条命名创建配置文件并使用记事本打开:
1
2
| if (!(Test-Path -Path $PROFILE )) { New-Item -Type File -Path $PROFILE -Force }
notepad $profile
|
写入配置:
1
| oh-my-posh init pwsh | Invoke-Expression
|
这样 oh-my-posh
就安装完成了,接下来可以自己选择主题。
oh-my-posh
有很多主题,可以在官方文档页面预览,地址如下:
主题预览
选择好自己的主题后,在终端输入下面的命令:
然后终端会出现所有的主题预览,最后会出现主题文件所在地址,打开即可看到所有的主题文件,再次输入 notepad $profile
,然后将配置修改为以下:
1
| oh-my-posh init pwsh --config $env:POSH_THEMES_PATH/cloud-native-azure.omp.json | Invoke-Expression
|
可以将主题名称修改为自己想要的主题,保存后即可完成。
配置自动补全#
自动补全插件为 PSReadLine
在终端安装模块:
1
2
| Install-Module -Name PowerShellGet -Force -Scope CurrentUser
Install-Module PSReadLine -Scope CurrentUser
|
或者可以使用管理员打开终端,这样命令后就不需要加 -Scope CurrentUser
安装好模块后输入 `notepad $PROFILE 打开配置文件,添加下列命令:
1
2
| Import-Module PSReadLine
Set-PSReadlineKeyHandler -Key Tab -Function MenuComplete
|
或者可以直接在配置文件中添加官方示例的代码,地址点击这里,需要注意的是,下面两行代码需要放到最开头,同时在 Import-Module PSReadLine
下一行添加 Set-PSReadlineKeyHandler -Key Tab -Function MenuComplete
。
1
2
3
4
5
6
| # 放到开头
using namespace System.Management.Automation
using namespace System.Management.Automation.Language
...
Import-Module PSReadLine
Set-PSReadlineKeyHandler -Key Tab -Function MenuComplete
|
Posh-git#
安装命令如下:
1
| PowerShellGet\Install-Module posh-git -Scope CurrentUser -Force
|
安装后在 notepad $PROFILE
打开配置文件引入模块:
个人配置#
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
| # 初始化配置及主题
oh-my-posh init pwsh --config $env:POSH_THEMES_PATH/robbyrussell.omp.json | Invoke-Expression
# 导入 PSReadLine 模块
Import-Module PSReadLine
# 设置 TAB 键补全
Set-PSReadlineKeyHandler -Key Tab -Function Complete
# 设置 Ctrl+z 为撤销
Set-PSReadLineKeyHandler -Key "Ctrl+z" -Function Undo
# 设置向上键为后向搜索历史记录
Set-PSReadLineKeyHandler -Key UpArrow -ScriptBlock {
[Microsoft.PowerShell.PSConsoleReadLine]::HistorySearchBackward()
[Microsoft.PowerShell.PSConsoleReadLine]::EndOfLine()
}
# 设置向下键为前向搜索历史纪录
Set-PSReadLineKeyHandler -Key DownArrow -ScriptBlock {
[Microsoft.PowerShell.PSConsoleReadLine]::HistorySearchForward()
[Microsoft.PowerShell.PSConsoleReadLine]::EndOfLine()
}
# 插入引号优化
Set-PSReadLineKeyHandler -Chord '"',"'" `
-BriefDescription SmartInsertQuote `
-LongDescription "Insert paired quotes if not already on a quote" `
-ScriptBlock {
param($key, $arg)
$line = $null
$cursor = $null
[Microsoft.PowerShell.PSConsoleReadLine]::GetBufferState([ref]$line, [ref]$cursor)
if ($line.Length -gt $cursor -and $line[$cursor] -eq $key.KeyChar) {
# Just move the cursor
[Microsoft.PowerShell.PSConsoleReadLine]::SetCursorPosition($cursor + 1)
}
else {
# Insert matching quotes, move cursor to be in between the quotes
[Microsoft.PowerShell.PSConsoleReadLine]::Insert("$($key.KeyChar)" * 2)
[Microsoft.PowerShell.PSConsoleReadLine]::GetBufferState([ref]$line, [ref]$cursor)
[Microsoft.PowerShell.PSConsoleReadLine]::SetCursorPosition($cursor - 1)
}
}
# git自动补全
Import-Module posh-git
|