Windows终端美化
安装 oh-my-posh 美化 Windows 终端 Windows Terminal

前言

Windows 推出了新的终端 Windows Teminal,虽然外观有所进步,但还是达不到自己预期,因此可以自己简单修改一下。

准备工作

计算机上启动 Windows PowerShell 时,执行策略很可能是 Restricted(默认设置)。

  • Restricted 执行策略不允许任何脚本运行。
  • AllSignedRemoteSigned 执行策略可防止 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 + , 打开设置文件,然后在第 41profilesdefault 中添加字体设置,在第 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