前言
Windows 推出了新的终端 Windows Teminal
,虽然外观有所进步,但还是达不到自己预期,因此可以自己简单修改一下。
准备工作
计算机上启动 Windows PowerShell
时,执行策略很可能是 Restricted
(默认设置)。
Restricted
执行策略不允许任何脚本运行。AllSigned
和RemoteSigned
执行策略可防止Windows PowerShell
运行没有数字签名的脚本。
因此如果直接安装很可能出现无法运行脚本的错误。
查看当前策略
打开 Windows PowerShell
然后输入:
1get-executionpolicy
2
3PS C:\WINDOWS\system32> get-executionpolicy
4Restricted
修改策略
以管理员身份打开 Windows Posershell
,执行下列命令:
1set-executionpolicy remotesigned
2# 运行后输入 Y
安装 Windows 终端
直接在微软商店搜索下载 Windows Terminal
安装 PowerShell 7
按照官方的教程 或者直接使用下面的命令:
1winget 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
下载。
1winget install JanDeDobbeleer.OhMyPosh -s winget
接下来安装并设置字体。安装作者推荐的 MesloLGM NF
字体,点此下载,这样可以解决部分字体图标渲染问题。打开 Windows Terminal
,按 Ctrl + Shift + , 打开设置文件,然后在第 41
行 profiles
下 default
中添加字体设置,在第 43
行回车,然后添加如下代码后保存。
1"font":
2{
3 "face": "MesloLGM NF"
4}
加载 oh-my-posh
设置,在 Windows Terminal
中输入下面第一行命令创建新配置文件,创建后输入两条命名创建配置文件并使用记事本打开:
1if (!(Test-Path -Path $PROFILE )) { New-Item -Type File -Path $PROFILE -Force }
2notepad $profile
写入配置:
1oh-my-posh init pwsh | Invoke-Expression
这样 oh-my-posh
就安装完成了,接下来可以自己选择主题。
主题
oh-my-posh
有很多主题,可以在官方文档页面预览,地址如下:
选择好自己的主题后,在终端输入下面的命令:
1Get-PoshThemes
然后终端会出现所有的主题预览,最后会出现主题文件所在地址,打开即可看到所有的主题文件,再次输入 notepad $profile
,然后将配置修改为以下:
1oh-my-posh init pwsh --config $env:POSH_THEMES_PATH/cloud-native-azure.omp.json | Invoke-Expression
可以将主题名称修改为自己想要的主题,保存后即可完成。
配置自动补全
自动补全插件为 PSReadLine
在终端安装模块:
1Install-Module -Name PowerShellGet -Force -Scope CurrentUser
2Install-Module PSReadLine -Scope CurrentUser
或者可以使用管理员打开终端,这样命令后就不需要加
-Scope CurrentUser
安装好模块后输入 `notepad $PROFILE 打开配置文件,添加下列命令:
1Import-Module PSReadLine
2Set-PSReadlineKeyHandler -Key Tab -Function MenuComplete
或者可以直接在配置文件中添加官方示例的代码,地址点击这里,需要注意的是,下面两行代码需要放到最开头,同时在 Import-Module PSReadLine
下一行添加 Set-PSReadlineKeyHandler -Key Tab -Function MenuComplete
。
1# 放到开头
2using namespace System.Management.Automation
3using namespace System.Management.Automation.Language
4...
5Import-Module PSReadLine
6Set-PSReadlineKeyHandler -Key Tab -Function MenuComplete
Posh-git
安装命令如下:
1PowerShellGet\Install-Module posh-git -Scope CurrentUser -Force
安装后在 notepad $PROFILE
打开配置文件引入模块:
1Import-Module posh-git
个人配置
1# 初始化配置及主题
2oh-my-posh init pwsh --config $env:POSH_THEMES_PATH/robbyrussell.omp.json | Invoke-Expression
3# 导入 PSReadLine 模块
4Import-Module PSReadLine
5# 设置 TAB 键补全
6Set-PSReadlineKeyHandler -Key Tab -Function Complete
7# 设置 Ctrl+z 为撤销
8Set-PSReadLineKeyHandler -Key "Ctrl+z" -Function Undo
9# 设置向上键为后向搜索历史记录
10Set-PSReadLineKeyHandler -Key UpArrow -ScriptBlock {
11
12 [Microsoft.PowerShell.PSConsoleReadLine]::HistorySearchBackward()
13
14 [Microsoft.PowerShell.PSConsoleReadLine]::EndOfLine()
15
16}
17# 设置向下键为前向搜索历史纪录
18Set-PSReadLineKeyHandler -Key DownArrow -ScriptBlock {
19
20 [Microsoft.PowerShell.PSConsoleReadLine]::HistorySearchForward()
21
22 [Microsoft.PowerShell.PSConsoleReadLine]::EndOfLine()
23
24}
25# 插入引号优化
26
27Set-PSReadLineKeyHandler -Chord '"',"'" `
28
29 -BriefDescription SmartInsertQuote `
30
31 -LongDescription "Insert paired quotes if not already on a quote" `
32
33 -ScriptBlock {
34
35 param($key, $arg)
36
37
38
39 $line = $null
40
41 $cursor = $null
42
43 [Microsoft.PowerShell.PSConsoleReadLine]::GetBufferState([ref]$line, [ref]$cursor)
44
45
46
47 if ($line.Length -gt $cursor -and $line[$cursor] -eq $key.KeyChar) {
48
49 # Just move the cursor
50
51 [Microsoft.PowerShell.PSConsoleReadLine]::SetCursorPosition($cursor + 1)
52
53 }
54
55 else {
56
57 # Insert matching quotes, move cursor to be in between the quotes
58
59 [Microsoft.PowerShell.PSConsoleReadLine]::Insert("$($key.KeyChar)" * 2)
60
61 [Microsoft.PowerShell.PSConsoleReadLine]::GetBufferState([ref]$line, [ref]$cursor)
62
63 [Microsoft.PowerShell.PSConsoleReadLine]::SetCursorPosition($cursor - 1)
64
65 }
66
67}
68# git自动补全
69Import-Module posh-git
参考
最后修改于 2024-03-18