Featured image of post Windows Terminal+PowerShell 7 打造 Windows 下最好用的终端

Windows Terminal+PowerShell 7 打造 Windows 下最好用的终端

本文介绍了关于如何使用 Windows Terminal 和 PowerShell 7 打造 Windows 上好用且强大的终端模拟器

简介

Windows Terminal

Windows Terminal 是 Microsoft 在 Build 2019 大会上公布的面向 Windows 10 以上操作系统,用来替代 Windows 控制台主机 的新型终端模拟器。

Build 2019

Windows Terminal 面向命令行工具和 Shell(如 CMD、PowerShell 和适用于 Linux 的 Windows 子系统 (WSL))用户的新式终端应用程序,支持多选项卡/窗口、Unicode 和 UTF-8 字符、GPU 加速文本呈现引擎,用户可以创建自己的主题,自定义文本、颜色、背景和快捷方式

PowerShell 7

PowerShell 7 是一个开源、跨平台(支持 Windows、Linux、macOS)的自动化和配置工具/框架,针对结构化数据(JSON、CSV、XML…)、REST API 和对象模型进行优化

PowerShell 包括一个命令行 Shell、PowerShell 脚本语言和用于处理 cmdlet 的框架,PowerShell 7 是相对 Windows 系统内置的 PowerShell 全新版本,它带来了一些新的特性

  • 使用 ForEach-Object -Parallel 实现管道并行化
  • 新的运算符
    • 三元运算符:a ? b : c
    • 管道链运算符:||&&
    • 空条件运算符:????=
  • 简化且动态的错误视图
  • 兼容层,使用户能够在隐式 Windows PowerShell 会话中导入模块
  • 自动新版本通知
  • 直接从 PowerShell 7 调用 DSC 资源的功能(实验性)

oh-my-posh

oh-my-posh 是一个适用于任何能够使用函数或变量调整字符串的 Shell 提示主题引擎(Promote Theme Engine),它易于配置且完全可自定义

安装

遵循下面的步骤,开始一步步动手打造我们的 PowerShell 7 + Windows Terminal 终端模拟器

Windows Terminal

Windows Terminal 有稳定版与预览版之分,如无特殊需求,笔者 推荐直接从 Windows UWP Store 安装稳定版

安装 Windows Terminal

PowerShell 7

PowerShell 7 直接在 Releases 页面下载最新正式版 .MSI 格式安装包,运行安装程序,在「Optional Actions」勾选以下三项,分别是

  • 将 PowerShell 7 添加到系统环境变量
  • 注册 Windows 事件日志报表
  • 启用 PowerShell 远程处理

安装 pwsh

下一步选择 PowerShell 更新选项,勾选以下两个选项后续可以通过 Microsoft Update 更新 PowerShell

pwsh 更新选项

Nerd Fonts 字体

oh-my-posh 内置主题里的一些图标或符号需要安装额外的字体才能完美显示,一些文章推荐的 PowerLine 字体并不适用于 oh-my-posh,我们这里应该使用 Nerd Fonts 字体,Nerd Fonts 是一个使用大量字形(图标)修补开发人员目标字体的项目

Nerd Font

可以在 Nerd Fonts 官网 上挑选喜欢的字体,或者 在线预览 部分字体,然后在 Releases 页面下载安装字体

Nerd Fonts 官网

笔者本文中演示使用的是 Nerd Fonts 修补过的 FantasqueSansMono 字体

接下来的部分,笔者建议使用 Scoop 安装的方式,如果你的系统上还没安装 Scoop,请参考 使用 Scoop 管理 Windows 下的软件和开发环境

PSReadLine

PSReadLine 是一个 PowerShell 模块,可以让 PowerShell 的命令行更好用,这里我们通过 Scoop 安装

# 添加 extras bucket
$ scoop bucket add extras

# 安装 PSReadLine
$ scoop install PSReadLine

posh-git

posh-git 是一个 PowerShell 模块,可以让 git 更好用

# 通过 scoop 安装 posh-git
$ scoop install posh-git

oh-my-posh

从 2022 年 5 月开始,oh-my-posh 不再是 PowerShell 模块了,现在它作为独立的二进制程序安装(迁移指南

oh-my-posh 变更提示

对于新的二进制版 oh-my-posh 在 Windows 上的安装方式有三种

  1. 通过 Scoop 安装(本文推荐和使用的方式)
  2. 通过 Winget 安装
  3. 手动安装(不推荐)

这里我们仍然通过 Scoop 安装

$ scoop install oh-my-posh

winfetch [可选]

winfetch 是一个 PowerShell 命令行脚本,以令人愉悦的样式显示 Windows 计算机的软件和硬件信息,它和 *nix 下的 neofetch/screenfetch 类似

# 使用 Scoop 安装 winfetch
$ scoop install winfetch

配置

PowerShell 7

使用管理员身份运行 Windows Terminal(PowerShell 7)

# 设置执行策略
Set-ExecutionPolicy RemoteSigned

一般我们不用 Azure 相关服务的话,建议禁用 Azure 账户模块

$env:AZ_ENABLE=$false

使用记事本编辑 PowerShell 配置文件(如果没有该文件会自动新建)

if (!(Test-Path -Path $PROFILE )) { New-Item -Type File -Path $PROFILE -Force } notepad $PROFILE

将下面内容粘贴进去保存即可

# 导入 posh-git 模块
Import-Module posh-git

# 设置 oh-my-posh Shell 提示主题
oh-my-posh init pwsh --config "$(scoop prefix oh-my-posh)\themes\ys.omp.json" | Invoke-Expression

# 启用瞬态提示
# Enable-PoshTransientPrompt

# 设置 Ctrl + Z 为撤销
Set-PSReadLineKeyHandler -Key "Ctrl+z" -Function Undo

# 设置 Tab 键菜单补全
Set-PSReadlineKeyHandler -Key Tab -Function Complete

# 使用 ls 和 ll 查看目录
function ListDirectory {
    (Get-ChildItem).Name
    Write-Host("")
}
Set-Alias -Name ls -Value ListDirectory
Set-Alias -Name ll -Value Get-ChildItem

# 设置向上键为后向搜索历史记录
Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward

# 设置向下键为前向搜索历史纪录
Set-PSReadLineKeyHandler -Key DownArrow -Function HistorySearchForward

# 清除 scoop 缓存和软件旧版本 | 别名: scoopwipe
function scoopwipe{sudo scoop cleanup -gk * && sudo scoop cleanup * -g && scoop cache rm * && scoop cleanup * && Write-Host "Scoop 缓存清理完成啦~👌" }

# 启动 Hugo 本地预览服务器(通过局域网可访问)192.168.0.102 是本机局域网 IP | 别名: hugos
#function hugos{hugo server --bind="0.0.0.0" --baseURL http://192.168.0.102}

# GPG for Canokeys: https://www.dejavu.moe/posts/canokey-openpgp/
# 杀死 gpg agent 进程 | 別名: killgpg
#function killgpg{gpg-connect-agent killagent /bye}

# 启动 gpg agent 进程 | 别名: startgpg
#function startgpg{gpg-connect-agent /bye}

# 查看 gpg 智能卡状态 | 别名: card
#function card{gpg-connect-agent killagent /by && gpg-connect-agent /bye && gpg --card-status}

# 快速获取 yyyy-MM-dd HH:mm:ss 格式的时间 | 别名: time
#function time{Get-Date -Format 'yyyy-MM-dd HH:mm:ss'}

如果要编辑 PowerShell 7 配置文件

# 使用系统自带记事本编辑配置文件
$ notepad $PROFILE

# 使用 VSCode 编辑配置文件
$ code $PROFILE

查看 oh-my-posh 所有内置主题样式

$ Get-PoshThemes

查看 oh-my-posh 内置主题

如果要修改 oh-my-posh 主题,将 PowerShell 7 配置文件里下面一行的 ys 修改为其他主题名称即可

# 这是 ys 主题
oh-my-posh init pwsh --config "$(scoop prefix oh-my-posh)\themes\ys.omp.json" | Invoke-Expression

# 比如修改为 aliens 主题
oh-my-posh init pwsh --config "$(scoop prefix oh-my-posh)\themes\aliens.omp.json" | Invoke-Expression

更改配置文件后使其立即生效

. $PROFILE

配置 Windows Terminal

打开 Windows Terminal 后,使用快捷键 Ctrl + , 打开设置,然后点击左下角 打开 JSON 文件

打开 Windows Terminal 配置文件

笔者 提供了一份几乎「开箱即用」的 Windows Terminal 配置文件,包含 Windows Terminal 配色生成网站 上的全部终端配色主题,你可以使用它覆盖你的 Windows Terminal 配置文件,然后根据自己的需求稍微修改下,就可以直接用了

winfetch

winfetch 第一次运行名令时会自动生成一个配置文件,路径为

C:\Users\用户名\.config\winfetch\config.ps1

可以参考 winfetch 的 Configuration 文档自由修改显示的样式和信息,也可以直接使用 笔者配置文件,效果如下

winfetch

到此为止,使用 Windows Terminal+PowerShell 7 打造 Windows 下最好用的终端模拟器就完成啦,后续你还可以自己修改 Windows Terminal 的配色、背景图片、亚克力效果等等