不能再不更新博客了,可是这段时间因为各种考试大作业课设然后人又比较摸所以就没有什么文章更新;这篇文章也是开了好久才慢慢的补全的==
废话不多说,既然是花里胡哨的东西那就尽快的说完==
Windows 10 终端美化还是有不少事情可以搞的:比如通过 WSL 使用美妙的 Linux 终端,比如使用美丽的 UWP 终端软件替换掉愚蠢的 Windows 自带的 conhost.exe,还比如使用某些模拟环境的终端;下面一点点讲:
终端客户端
推荐两个,一个是 Windows Terminal,微软开源的美丽的 UWP 终端,另有预览版下载;非预览版可以使用 wt
命令直接打开,预览版没试过,似乎不行;如果是自行构建的版本可以用 wtd
命令直接打开;然后就是 Fluent Terminal,也是开源的,现在上了 Microsoft Store;个人觉得这个比上一个好看,但是现在用的还是前者居多;
从上面的两个终端中选择一个下载安装即可,都是 UWP 应用;因为现在微软官方的终端的使用体验已经很好了,所以建议直接下载 Windows Terminal,后面的教程也全部基于这个;
补充说明:虽然不能方便的使用命令行唤起 Windows Terminal Preview,但是可以通过增加到右键菜单来方便的使用它:在 C:\Users\<username>\AppData\Local\Microsoft\WindowsApps
目录下有很多 UWP App 命令行启动的程序,Windows Terminal Preview 的启动程序也在其中:它还叫 wt.exe
,但是并不在根目录下,很容易就可以找到;然后将注册表文件中对应的项目换成 Preview 的接口就可以了:
1 | Windows Registry Editor Version 5.00 |
在我的电脑上,Windows Terminal Preview 的位置是 C:\Users\shiroha\AppData\Local\Microsoft\WindowsApps\Microsoft.WindowsTerminalPreview_8wekyb3d8bbwe\wt.exe
加上转义符号进行替换即可;图标的话也做好了,直接下载普通版或者预览版的图标,放在特定位置之后修改上面的图标路径就可以了;
此外,为了保证终端可以在我们唤起菜单的目录下启动,我们需要将对应(默认)配置文件的启动目录("startingDirectory"
)换成 null
;
PowerShell 美化
这是微软的 shell 程序,比 cmd 先进,内置在 Windows 10 内的版本是 5.0,但是现在已经有全新的 PowerShell Core 7.0 可供下载安装了,个人建议下载一个,毕竟后面那个跨平台()但是不下也可以,不妨碍后面的教程:
因为苹果 zsh 的终端有各种花里胡哨的东西,所以 PowerShell 也想变漂亮;在 zsh 中有一个比较厉害的插件叫做 oh-my-zsh,所以到 PowerShell 这里来就整了一个差不多的 oh-my-posh,也可以美化 PowerShell;
因为 Windows Terminal + PowerShell Core + oh my posh 已经被微软官方认定为最佳组合了,所以官方也整了一个教程教你怎么使用这个玩意了,所以可以直接去看(
安装 Powerline 字体
微软官方的 PowerLine 字体 Cascadia Code / Cascadia Mono,可以直接下载安装;
个人比较喜欢的 Menlo 字体,可以从它的发布页下载;
这里还有一个整合包:Github 仓库地址,包含了绝大多数比较好看的 PL 字体,并且有安装脚本;
当然,Jetbrains 家的 Jetbrains Mono,Mozilla 家的 Fira 等等有名字体都是有 PL 版本的,可以百度自行下载;
PowerLine 字体为一些特殊形状提供支持(比如箭头啊,Git 标志啊,苹果/Ubuntu 标志啊之类的),要想在控制台上显示这些图标,必须要有 PowerLine 字体支持;
但是标准 PowerLine 字体包含的特殊图标并不多,如果需要使用包含更多图标的终端,可能需要一些 Nerd 字体(下面有讲),比如Hack Nerd Font;
安装 oh my posh
首先,你得安装 Git for Windows;
然后,在管理员状态下的 PowerShell (Core) 中运行下面的命令安装 oh my posh 及相关组件:
1 | Install-Module posh-git -Scope CurrentUser |
中途遇到询问全部选是。这可能会自动在电脑上安装包管理器 NuGet;Posh-Git 提供了 Git 状态信息的提示,并为 Git 命令、参数、远程和分支名称等添加 tab 自动补全; Oh-My-Posh 为 PowerShell 提供主题了功能。
如果是 PowerShell Core,您还需要安装 PSReadline:
1 | Install-Module -Name PSReadLine -Scope CurrentUser -Force -SkipPublisherCheck |
它允许在 PowerShell 中自定义命令行编辑环境;
之后使用下面的命令打开/新建一个 PowerShell 配置文件,它的作用和 Linux 中的 ~/.bashrc
相似;
1 | if (!(Test-Path -Path $PROFILE )) { New-Item -Type File -Path $PROFILE -Force } |
不使用路径检测,直接输入 notepad $PROFILE
也会直接创建一个新文件,只是会弹出对话框询问而已;
之后会用 notepad
打开这个配置文件,在其中加上下面的内容:
1 | Import-Module posh-git |
可以自行选择主题样式,oh my posh 自带十个经典主题;官方文档中使用的是 Paradox
,这个主题的单行版本是 Agnoster
;显示的比较详尽的主题有 Honukai
,oh-my-zsh 经典主题是 robbyrussell
;还有几个比较特别的是 PowerLine
和 Darkblood
;即使你没有使用 PowerLine 字体,使用经典主题 robbyrussell
也不会出现方块问题,这是好的。
设置终端样式
我们必然要通过 Windows Terminal 来使用全新的 PowerShell;打开 Windows Terminal 的配置文件页面,增加/修改对应的配置文件:
1 | { |
或者:
1 | { |
上面的是官方提供的明暗两种配色方式,只需要保证在对应的配置文件中选择了 PL 字体就可以了;
又及:我的两台电脑的 PowerShell 中 ls
命令均自动指向 dir
命令,而我的小伙伴的电脑却没有,需要手动设置或者安装 Gow 来实现(个人不太喜欢 Gow);我不知道这是什么原因,可能某些软件安装时会自动帮你设置这些吧;此外,其他教程中有提到安装 Chocolatey,这是一个 Windows 包管理器,和 homebrew 很像,但是因为没有必要所以这里没有提;
原生 zsh
但是比起主题受限的 PowerShell,我想可能还是 zsh 更加有吸引力;虽然 zsh 是 Linux 上的玩意,但是我想大家都用过 Git Bash —— 一个基于 MinGW64 环境的仿 Linux 环境的终端;虽然它已经很 Linux 了,但是很多功能还是被删减了;但是我们可以使用未删减的 Git SDK 来使用 zsh;
Git SDK 全称 Git for Windows SDK,是基于 MSYS2(MinGW64 + Cygwin 合体增强)的仿 Linux 环境;安装后大约会占用 4~5 GB 的磁盘空间,但是包含了完整的仿 Linux 环境:包括常用工具,完整的 GNU Complier 链以及包管理器 pacman;基本上是一套完整的集成开发环境,所以是 SDK ==
此外,虽然 Git SDK 是基于 MSYS2 的,是 Git 的超集…… 但是你仍然需要安装 Git(可能可以通过适当的配置解决),因为很多软件只认识 Git;建议安装 Git SDK 而不是 MSYS2,因为前者比后者好用(原因不明)。
安装 Git SDK
你可以去 Git for Windows 官网,拉到最下面可以看到 Git SDK 的下载;这样下载的是一个安装器,会自动从一个仓库克隆这个程序所需要的全部文件但是下载速度感人,即使你科学上网也不能保证一个满意的下载速度;所以个人建议直接去 Github 仓库下载 main 分支下的文件;注意的是后者解包后文件总大小小于前者,笔者安装过程中也意外发现只有后者可以在我的电脑上正常运行,所以建议直接拉取 Github 仓库;
将解压后的文件放在某个位置,并且将其目录下的 usr/bin
文件夹加入系统变量——因为这样用起来比较舒服,一些程序(比如 zsh
)在全局变量空间中也能找到 MSYS2 的工具包,但是这可能会和其他类似工具比如 Gow 产生冲突,所以一般加在靠后的位置,这样就会优先使用 Windows 中的工具;
安装 zsh 以及 oh my zsh
这一部分的教程好像挺多的,不再重复说明了…… 算了还是说一下吧:
修改 pacman 软件包源
在 /etc/pacman.d/
目录下有三个文件:mirrorlist.msys
、mirrorlist.mingw64
和 mirrorlist.mingw32
;我们可以直接在 Windows 中使用文本编辑器修改它们为国内源:
1 | ## |
注意服务器的顺序,将国内服务器放在优先的位置才能保证 pacman 优先使用它;
调整之后执行 pacman -Syu
和 pacman -Su
更新源信息,首次更新可能需要重启;
安装相关软件包
首先,我们要有 zsh:
1 | pacman -S zsh |
然后,我们要有 oh-my-zsh:
1 | sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)" |
当然,修改 host 文件,设置终端代理过于麻烦;我们可以科学上网后直接访问上述命令中的地址,获得脚本的内容后放到某个文件夹下,再使用 zsh 去执行脚本即可;
安装后脚本会在 ~
目录下创建 .oh-my-zsh
目录,和 ~/.zshrc
在同一个目录中;这个 ~
目录对应的就是 Windows 的用户文件夹,注意不要删掉它们;如果觉得碍眼可以把它们设为系统文件 + 隐藏文件(cmd 中的 attrib +s+h
或者 PowerShell 中的 $file.Attributes += 'hidden, system'
),就不会在资源管理器中看到它们了;
关闭自动更新
此外,oh-my-zsh
会定期的运行更新检查来从 Github
下载最新的更新;但是由于国内网络环境的因素,这个过程并不能流利地进行,这样就会导致在更新的时候卡在初始化终端,造成不好的体验;关闭自动更新也需要编辑 ~/.zshrc
文件,找到 DISABLE_AUTO_UPDATE
项目,并取消其默认的注释:
1 | - # DISABLE_AUTO_UPDATE="true" |
这样就关闭了 oh-my-zsh
定期的自动更新;如果需要手动更新,可以运行 upgrade_oh_my_zsh
。
设置主题
打开 ~/.zshrc
文件,可以命令行用 vim 打开,也可以直接在资源管理器中打开,编辑其中的 ZSH_THEME
字段就可以更换它的主题,编辑 plugins=(git zsh-autosuggestions)
在括号中增加内容来启用插件;因为 zsh 还是借助 Windows 的 conhost 或者其他终端软件运行,所以并不需要在这个文件中修改字体;
因为 MSYS2 pacman 中的 zsh 似乎没有包含一部分插件,所以若部分插件找不到,可以在这里下载,之后复制到 ~/.oh-my-zsh
文件夹的对应位置中即可;
有一个美妙的 zsh 主题叫做 powerlevel10k:它比较的美观,并且使用了某些方法解决了在 Windows Terminal 这种半透明终端中 PL 展示效果不佳的问题,还提供了比较人性化的解决方案,所以建议使用它:
1 | git clone https://github.com/romkatv/powerlevel10k.git $ZSH_CUSTOM/themes/powerlevel10k |
当然也可以手动克隆之后复制到 ~/.oh-my-zsh/theme
中;安装完成后修改 ~/.zshrc
文件来使用这个主题:
1 | ZSH_THEME="powerlevel10k/powerlevel10k" |
之所以要加上路径,是因为 oh my zsh 通过找到 .zsh
文件来找到安装的主题和插件;第一次使用该主题,会自动跳转到对于这个主题的配置页面:会有一个向导根据你终端对于 PowerLine 和图标的支持帮助你选择合理的不会出现乱码的主题,并且配置向导可以快速的通过 p10k configure
唤起,非常方便。
字体问题(补充
上面说到了只有安装 PowerLine 字体才可以显示一些美妙的图标;但是如果你跑了一遍 p10k 的配置之后就会发现,上面提到的好一部分 PL 字体并不支持显示 fontawesome 上的图标,比如那个锁就会显示成一个方块,这不太行;前几天再网上瞎jb翻的时候看到了一种字体叫做 Nerd Fonts,有一种 Hack Nerd Font 似乎可以很棒的兼容这些图标,所以在这里推荐一手(
实际上,除了 oh my posh,其他的终端美化都是使用打包了 Fontawesome 的 Hack 字体作为更丰富的图标支持的;如果你需要使用包含多个图标的字体,比起一般的 PowerLine 字体,还是建议来一个 Hack 字体==
配置文件
安装完成之后,我们就要将调教好的 zsh 终端增加到工作场景中集成了:
首先不建议将任何 Powerline 终端集成到 Jetbrains 的任何 IDE 中;因为 Windows 上的 Jetbrains IDE 的终端渲染比较的奇特:主要就是行间距太大,导致显示的图标会非常不好看。
集成到 Windows Terminal
默认的继承方式是通过 MSYS2 终端的启动脚本来运行 zsh:这个脚本在启动 shell 前会做许多事情,比如创建临时的系统变量空间,加载 rc 文件等,所以即使你没有将 MSYS2 的二进制文件目录加入到系统变量,shell 也能找到它们:
1 | { |
这样没什么坏处,但是在博主的电脑上可能是因为系统环境变量错乱,在该脚本初始化过程中会因为大量系统变量地址映射失败而报错,并且产生巨量输出(包括使用 MinTTY 也会产生这些输出),非常的不美观;而且这些初始化工作还包括了在桌面上创建不需要的快捷方式,非常的不好;所以我们也可以将 usr/bin
增加到系统变量,然后配置文件设置命令行直接启动 usr/bin/zsh.exe
,可以产生相同的效果:
1 | { |
第一次启动依然会初始化最基本的环境,但是不会再产生大量输出了,非常完美;也避免了从 msys2_shell.cmd
启动可能出现的退格闪屏问题;
集成到 VS Code
和上面一样,可以通过 msys2_shell.cmd
启动,也可以直接运行 zsh.exe
启动:
从工具栏中选择 文件 -> 首选项 -> 设置,打开设置页;在 功能 / 终端 中找到任何一个 在 settings.json 中编辑 按钮来打开 vscode 的配置文件;并且加上下面内容:
1 | { |
上面的配置指定了命令行、参数以及终端字体(可以和文本编辑器使用不同的字体);命令参数中的 cd $PWD
是切换到当前目录,如果报错也可以不加(似乎还是会跳转到当前目录);在 VS Code 中也有相当数量的 PL 字体存在行间距过大的问题,似乎也可以通过调整解决;但是 DejaVu Sans Mono for Powerline
这款字体不存在上述问题,所以为了方便我就直接使用这款字体了;
当然,你也可以将 MSYS2 工具链增加到系统变量后直接运行 zsh.exe
,配置文件就像下面这样:
1 | { |
启动后也会直接跳转到你的项目目录下,但是如果没有事先将 C:\git-sdk-64-main\usr\bin\
增加到系统变量中,输入部分 Linux 命令可能会提示命令未找到错误;
WSL 终端美化
依然是安装 zsh & oh my zsh,网上教程也挺多的,和在 Linux 系统中的操作一样(甚至和上述在 MSYS2 中安装的过程高度相似)所以这里就不再多说了;但是需要注意的是更改了 raw.githubusercontent.com 的 host 之后下载 oh my zsh 脚本时可能会因为证书不匹配而报错,这时可以使用 wget
的 --no-check-certificate
选项来忽略检查;curl
则没有找到解决方案;
另:在 Ubuntu WSL 中安装 powerlevel10k 主题时出现了无法加载 gitstatusd 的问题,在 Debian WSL 中却没有出现,原因不明,有些神秘(
一些补充
WSL 上使用 ls
命令查看文件目录似乎会出现绿色背景的问题,这个 WSL 文件映射机制有关:这里有一篇文章讲的很好,有兴趣可以去看看,了解一波;然后这里还有一篇博文是说 WSL 和 Fluent Terminal 配置的,感觉有点意思,有兴趣的朋友可以去看看。
我的配置文件
这里也没啥特别的内容,主要是博主个人的配置文件的备份:
Windows Terminal Preview
Upd. 2020-7-22
1 | { |
常用终端:PowerShell Core、zsh、Debian WSL;
wt 右键菜单
将下方内容复制到文本文件中,修改后缀为 .reg
并且双击打开安装即可:
1 | Windows Registry Editor Version 5.00 |
如果你希望提示文字是中文,请特别注意文件的编码方式,以避免乱码。
文章更新记录
日期 | 更新内容 |
---|---|
2020-07-12 | 补全文章主体内容(草 |
2020-07-21 | 更新了一些字体和外链 |
2020-07-22 | 更新了配置文件和脚本 |
2021-06-22 | 更新了关闭自动更新的方法 |