Windows Terminal美化(配置Powershell7+PSReadLine+oh-my-posh)

本文最后更新于:2020年9月20日 下午

好看是第一生产力。 — 鲁迅

最终效果如封面。

Windows Terminal基础配置

Scoop安装

Scoop是一款Windows下的包管理器,不是必须安装的,但是之后的部分配置我是用Scoop下载的。
Scoop的安装:

$ set-executionpolicy remotesigned -scope currentuser
$ iex (new-object net.webclient).downloadstring('https://get.scoop.sh')
# 测试是否安装成功:
scoop help

Scoop快速入门

以安装Python为例:

  1. 搜索软件包(会在你现在安装的仓库里搜索):scoop search python
  2. 安装:scoop install python (可以先使用scoop info python查看当前软件的详细信息看是不是你需要的)
  3. 提示安装成功后,可以通过 scoop list 查看当前安装的软件
  4. 卸载:scoop uninstall python
  5. 更新:scoop update python(可以先通过scoop status查看当前是否有可更新的软件)。也可以使用命令 scoop update * 直接更新所有软件包括scoop自身。
  6. 清理历史版本软件包与缓存:scoop cleanup *。scoop更新软件后不会自动卸载旧版本的软件包,需要手动cleanup来清理。

Scoop安装的软件存放路径:C:\Users\用户名\scoop

添加仓库

Scoop自带的官方仓库main的软件比较少,不太能满足我们的需求,但是它有一个bucket软件源策略,而且有社区来维护,常用软件基本能够找到。

bucket官方维护源包括:(输入命令 scoop bucket known 可以查看)

scoop bucket add main # 默认
scoop bucket add extras # 推荐
scoop bucket add versions # 收录软件包的历史版本
scoop bucket add nightlies
scoop bucket add nirsoft
scoop bucket add php
scoop bucket add nerd-fonts # 编程字体
scoop bucket add nonportable
scoop bucket add java
scoop bucket add games
scoop bucket add jetbrains # 推荐

也可以添加第三方的,语法格式为:scoop bucket add [仓库名] [仓库地址]

例如添加一个包括一些国内常用应用(微信、QQ、网易云音乐)的第三方库:
scoop bucket add dorado https://github.com/chawyehsu/dorado

移除仓库:scoop rm php

Scoop命令不完全指北

scoop help 获取命令帮助列表
scoop install 软件名 安装
scoop install 软件名@3.7.6 安装指定版本
scoop install extras/sumatrapdf 安装指定仓库内版本
scoop update 软件名 更新
scoop update * 更新Scoop、所有安装的软件
scoop cleanup * 清理历史版本软件包与缓存
scoop uninstall 软件名 卸载
scoop reset 软件名 版本切换
scoop depends 软件名 查看软件的依赖
scoop hold 软件名 禁止软件更新
scoop unhold 软件名 启动软件更新
scoop home 软件名 打开软件主页
scoop info 软件名 显示软件信息
scoop list 列出所有已安装软件
scoop prefix 软件名 查看软件路径
scoop reset 软件名 恢复软件版本
scoop search 软件名 搜索软件
scoop status 软件名 查看软件更新状态

gsudo安装

gsudo解决了管理员权限问题,不需要再单独打开管理员权限的Powershell窗口。
安装:scoop install gsudo
使用:在需要使用的命令前添加 gsudo 即可。(或者只输入命令gsudo,则直接进入管理员模式)

下载

Windows Terminal下载:

  • 方式一:Windows Terminal下载
  • 方式二:直接在 Microsoft Store 搜索下载
  • 方式三:使用 Scoop 安装(通过 @h404bi 维护的第三方 bucket)
    scoop bucket add dorado https://github.com/h404bi/dorado
    scoop install windowsterminal

PowerShell 7下载

WT配置自定义

打开配置文件:

自定义全局属性

位于配置文件最开始的位置,可修改的全部属性参考:全局设置
我修改的配置:

  • Terminal 亮暗主题:"theme": "dark"

自定义环境入口(添加新Shell)

Windows Terminal 下拉菜单中可选择的环境是能自由配置的,其中每个环境有可以单独设置字体,初始目录,配色方案,背景等等。

环境的配置位于profiles[]中:

一个典型的环境配置包括(以我配置的PowerShell7为例):

{
    // 下拉菜单中显示的名字
    "name": "PowerShell7",

    // 下拉菜单中显示的icon
    // 路径的语法格式可以用: 
    //      1. ms-appdata:///roaming/{图片路径}
    //      2. 直接填图片路径 
    "icon": "ms-appdata:///roaming/E:\\保存图片\\icon\\cloudshell.png", 

    // 标识符,直接在PowerShell中输入命令 new-guid 就可以得到一个新的GUID
    // 如果guid设置为和全局属性的"defaultProfile"一样的话,打开 WT 就会默认为这个环
    "guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}", 
    
    // 唤起环境时执行这一命令,我这里加了个参数不输出启动日志信息
    "commandline": "path\\pwsh.exe -nologo", 

    // 唤起环境时所处的起始目录
    "startingDirectory": "path\\...", 

    "cursorColor": "#fa9395", // 光标的颜色
    "cursorShape": "vintage", // 光标的形状。包括:bar、empytBox、filledBox、vintage
    "colorScheme": "Chalkboard", // 配色方案,除了几个默认的还可以在下面的"schemes": []中定义
    "background": "#2a2a2a", // 背景色
    "useAcrylic": true, // 是否开启毛玻璃特效
    "acrylicOpacity": 0.3, // 毛玻璃特效的不透明度
    "backgroundImage": "path\\IMG_111.jpg", // 背景图片
    "backgroundImageOpacity": 0.5 // 背景图片的不透明度
}

更多详细配置参考:配置文件设置

添加自定义配色方案

一个可以预览Windows Terminal主题并一键复制json文件的网站:Windows Terminal Themes

点击下面的Get theme即将json文件复制到剪切板。e.g.

{
  "name": "Andromeda",
  "black": "#000000",
  "red": "#cd3131",
  "green": "#05bc79",
  "yellow": "#e5e512",
  "blue": "#2472c8",
  "purple": "#bc3fbc",
  "cyan": "#0fa8cd",
  "white": "#e5e5e5",
  "brightBlack": "#666666",  //命令行参数
  "brightRed": "#cd3131",  //错误信息
  "brightGreen": "#05bc79",
  "brightYellow": "#e5e512",  //命令
  "brightBlue": "#2472c8",
  "brightPurple": "#bc3fbc",
  "brightCyan": "#0fa8cd",
  "brightWhite": "#e5e5e5",
  "background": "#262a33",
  "foreground": "#e5e5e5"
}

我标识了几个颜色代表的参数,都不喜欢也可以自己DIY。

自定义快捷键

"keybindings": []进行设置。默认的包括:

  • Ctrl + Shift + F:全局查找
  • Ctrl + Shift + T:打开新标签页
  • Ctrl + Shift + 1/2/3...:进入配置文件中定义的第一/二/三/…个环境
  • Ctrl + Tab:前一个标签页
  • Ctrl + Shift + Tab:后一个标签页
  • Alt + Shift + -:横向分屏
  • Alt + Shift + +:纵向分屏
  • Ctrl + +:放大
  • Ctrl + -:缩小
  • Ctrl + 0:恢复默认缩放比例

更多详细配置参考:自定义键绑定

其他配置

oh-my-posh安装和配置

打开管理员权限的Powershell窗口(安装了gsudo的可以在命令前面直接加上gsudo):

Install-Module posh-git # 如果你的电脑里没有安装Git,输入这行会报错,解决方法是安装Git或者把这一行去掉。
Install-Module oh-my-posh
Set-Theme Agnoster # 这个是设置主题,你也可以选其他的,通过命令Get-Theme命令来查看其他主题

上面的导入只对当前窗口有效,所以需要将其添加到配置文件中:

$ if (!(Test-Path -Path $PROFILE )) { New-Item -Type File -Path $PROFILE -Force } notepad $PROFILE
# 该命令打开默认 PowerShell 的启动配置文件(如果没有就创建),notepad表示用记事本打开,如果你安装了vscode,也可以替换成 code
# 已经存在启动配置文件的话可以直接用命令 notepad/code $PROFILE 打开

然后把前面三行内容复制到 Microsoft.PowerShell_profile.ps1 文件中。
重新打开窗口或者输入命令.$Profile让配置文件生效。

oh-my-posh只支持部分字体,可以使用我目前用的这款:Fira Code

隐藏主机名

个人觉得命令行前面显示的一长串太难看了。

  1. 找到oh-my-posh的主题文件夹。

    • 如果你安装有everything可以直接搜索Agnoster或者任意主题名字试试。
    • 没有的话应该在这个路径下:C:\Users\你的用户名\Documents\PowerShell\Modules\oh-my-posh\2.0.465\Themes
  2. 打开对应主题的.psm1文件,比如我使用的 Agnoster.psm1,搜索 $user@$computer 定位到如下内容,直接将整个 if语句 注释掉。

PSReadLine安装和配置

PSReadLine 是一个由微软发布的用于 PowerShell 的行读取实现,提供了以下功能:

  • 语法着色
  • 简单语法错误通知
  • 良好的多行体验
  • 可自定义的键绑定
  • Cmd和Emacs模式
  • 许多配置选项
  • Bash 样式的补全
  • Bash/zsh 样式的交互式历史记录搜索
  • Emacs yank/kill ring
  • 基于 PowerShell Token 的单词移动和删除
  • 撤销/重做
  • 自动保存历史记录,包括在实时会话中共享历史记录
  • 菜单补全、Intellisense

安装$ Install-Module -Name PSReadLine -AllowPrerelease -Force
打开配置文件code $PROFILE
在里面添加以下内容:

Set-PSReadLineOption -PredictionSource History # 设置预测文本来源为历史记录
 
Set-PSReadlineKeyHandler -Key Tab -Function Complete # 设置 Tab 键补全
Set-PSReadLineKeyHandler -Key "Ctrl+d" -Function MenuComplete # 设置 Ctrl+d 为菜单补全和 Intellisense
Set-PSReadLineKeyHandler -Key "Ctrl+z" -Function Undo # 设置 Ctrl+z 为撤销
Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward # 设置向上键为后向搜索历史记录
Set-PSReadLineKeyHandler -Key DownArrow -Function HistorySearchForward # 设置向下键为前向搜索历史纪录

PSReadLine更多配置参考

别名配置

经常使用Git,所以想设置一些简短点的别名。
powershell的别名不支持语句,只能用命令所以这里还是搞了蛮久的。
需要用函数来帮忙,举个🌰 :假如我想设置git commit -m -> cm。因为后面肯定是有个字符串参数的,所以在配置文件里要这么写:

function getCommit() {
      git commit -m $args
}
Set-Alias cm getCommit

另外这个函数名getCommit是不能随便起的,有一定的规范,按我这种写应该是没问题的。
如果是不带参数的命令,就可以去掉$args
Powershell 别名详细参考




参考网址:
https://sspai.com/post/59380
https://docs.microsoft.com/zh-cn/windows/terminal/
https://segmentfault.com/a/1190000023337501
https://zhuanlan.zhihu.com/p/137251716
https://printempw.github.io/windows-terminal-setup-guide/#3-2-%E5%85%A8%E5%B1%80%E9%85%8D%E7%BD%AE