本文最后更新于:星期二, 六月 16日 2020, 3:21 下午

事情要从月亮 @CjM00n 的一句话说起…

5.7的早上月亮突然来问了我一句话

然后抱着好奇的心态我就去下了个 Windows Terminal,结果不出意外的真香了,不得不说这个 Terminal 是真滴好看,相比于我现在用的 cmder,不说便利性提升多少,好看是真的好看(颜值是第一生产力),我们可以整个对比图对比一下

然后我本来打算写一天课程设计的,然后就变成了折腾了一天的 Windows Terminal + PowerShell。。都怪月亮

折腾了一天之后发现,这玩意用起来也比 cmder 要便捷一些哦,那就不用多说了,「cmder 卸载.jpg」

Windows Terminal

一开始下下来的 Terminal 虽然好看了很多,但还是傻大黑粗的状态,那肯定要自定义一下。

首先 Windows Terminal 提供了一个本地配置文件 settings.json 可以点击标签栏右边的「V」 -> 「设置」就会用你设置的默认编辑器打开

配置具体可以参照官方文档:

如果还有不太清楚的可以按住 Alt 键点击「设置」,会打开 defaults.json 这个文件不能修改,但是可以参照其中的格式设置

还有几篇文章讲得也挺细致的

这里留档一下我配置的一些部分

关于字体与主题背景

这一部分的定义在 settings.jsonprofiles 部分下,该部分的结构如下:

{
    ...,
    "profiles":
    {
    	"defaults":{
    		// 这里存放通用设置
    		"fontFace": "Hack Nerd Font Mono",  // 指定终端字体
            "cursorShape": "underscore",  // 指定下标类型,具体看文档
            "useAcrylic": true,  // 亚克力透明背景
            "acrylicOpacity": 0.7,  // 透明度 0-1
            "colorScheme": "Chalk",  // 配色名称,后面会提到
            "startingDirectory": "."  // 默认开启路径,后面会解释
		},
		"list":
		[
          ...  
         ]     
	},
}

这里有两个参数要解释一下:

  • colorSchema:这个用于指定终端的配色名称,这个名称可以自定义在下面的 scheme部分中, Windows Terminal 也默认携带了几种配色,在 defaults.json 中的 scheme 部分可以找到,我这里用的 Chalk 是从这个链接里面找到的:https://github.com/mbadolato/iTerm2-Color-Schemes 这个链接里提供了许多的配色,相当好用,可以直接复制并粘贴在 scheme 部分中直接使用

    {
      "name": "Chalk",
      "black": "#7d8b8f",
      "red": "#b23a52",
      "green": "#789b6a",
      "yellow": "#b9ac4a",
      "blue": "#2a7fac",
      "purple": "#bd4f5a",
      "cyan": "#44a799",
      "white": "#d2d8d9",
      "brightBlack": "#888888",
      "brightRed": "#f24840",
      "brightGreen": "#80c470",
      "brightYellow": "#ffeb62",
      "brightBlue": "#4196ff",
      "brightPurple": "#fc5275",
      "brightCyan": "#53cdbd",
      "brightWhite": "#d2d8d9",
      "background": "#2b2d2e",
      "foreground": "#d2d8d9"
    }
  • startingDirectory:这个用于在某个目录快速打开 Windows Terminal。因为目前 Windows Terminal 还不支持右键菜单,在某个文件夹下的快速打开方法是在文件浏览器的地址栏输入 wt -d . 或者 Ctrl+L 再输入wt -d .,而配置了这一选项之后只需要直接输入 wt 即可

增加新终端(SSH)

在标签栏的下拉选项里可以看到有默认配置的几个常用终端,包括:PowerShell、Cmd、WSL等等,我们可以通过配置 settings.jsonprofiles.list 部分来添加一个新的终端,这里我以 SSH 为例。

list 部分填写如下

{
    ...,
    "profiles":
    {
    	"defaults":{
    		...
		},
		"list":
		[
          ...,  // 前面这一部分是默认的 Shell 配置
          	{
            	"guid": "{f6661c1f-4d89-48ac-849e-3d862935077c}",  // GUID标识符
            	"name": "Aliyun VPS",  // 显示在选项中的名称
            	"commandline": "ssh root@vps_ip",  // 执行的命令行命令
            	"hidden": false,  // 不知道是啥,照抄
            	"icon": "ms-appdata:///Local/{f6661c1f-4d89-48ac-849e-3d862935077c}.ico"
            	// 终端显示的图标
         	}
         ]     
	},
}

这里解释一下各个配置项的意思

  • guid:Windows下每个应用的唯一标识符,可以在 PowerShell 下用以下命令生成 [guid]::NewGuid()
  • name:这个就不用多说了,选项卡上显示的名字
  • commandline:设置要执行的命令,我们这里是SSH终端,所以填入 ssh root@vps_ip
  • icon:这里的路径可以填绝对路径,ms-appdata://Local 是官方推荐的写法,指向的就是 %localappdata%\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\,也就是跟 settings.json 在同级目录下

这样配置完之后就可以在选项里面看到新的终端了

快捷键设置

快捷键设置就在 settingskeybindings 部分设置,这一部分我还没怎么研究,参照官方文档吧

oh-my-posh

其实光是配上面的字体和背景配色还没有特别漂亮,我个人比较喜欢 Linux 上的「oh-my-zsh」,然后我就发现了 PowerShell 上有个包也可以提供跟「oh-my-zsh」很相似的主题,就是 「oh-my-posh」

在安装「oh-my-posh」之前,因为它跟「oh-my-zsh」一样需要用到一些 PowerLine 的字体,所以我们得先安装 PowerLine 字体,执行以下几个命令

git clone https://github.com/powerline/fonts.git
cd fonts
.\install.ps1

等它安装完就可以安装「oh-my-posh」了,在 PowerShell 下执行以下命令

Install-Module posh-git -Scope CurrentUser
Install-Module oh-my-posh -Scope CurrentUser

然后新建/修改一下 PowerShell 的配置文件

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

在打开的配置文件里加上以下几行命令

Import-Module posh-git
Import-Module oh-my-posh
Set-Theme Paradox

最后一行的Set-Theme Paradox就是指定主题了,然后重启一下就可以看到效果。

「oh-my-posh」自带了10个主题,都是「oh-my-zsh」上比较经典的。我现在用的是 Powerlevel10k-Classic。

可以在终端里使用 Set-Theme [ThemeName]来预览主题,可以用「Tab」键自动补全主题名

z

既然都用上「oh-my-zsh」了,那哪里少得了「z」这个 zsh 下常用的跳转工具,当频繁需要进入一个比较深的目录的时候,「z」这个插件会帮我们自动记录这个目录,之后我们只需要执行z [Directory]就可以快速跳转了,比如像这样

PowerShell 下也有移植过来的版本,执行以下命令安装就可以愉快使用了

Install-Module z -Scope CurrentUser -AllowClobber

Scoop

Scoop 是一个 Windows 下的包管理器,类似于 Python 的 pip / Anaconda,这里我就是翻着翻着发现好像看起来不错,好像很便于管理 Windows 下的各类软件包,可以让环境变量什么的不至于过于混乱,特别是像我们这种程序员,要装一大堆依赖就很容易把环境变量整的乱七八糟。

不过执行命令好像是直接安装在 C 盘下的 User\<username>\scoop「C盘:不要啊!已经要溢出来了!」,于是看了看文档找到了怎么把它安装在其他位置的方式,执行以下步骤

$env:SCOOP='E:\Scoop'  # 你要安装Scoop的位置
[Environment]::SetEnvironmentVariable('SCOOP',$env:SCOOP,'User')  # 添加到用户变量
Invoke-Expression (New-Object System.Net.WebClient).DownloadString('https://get.scoop.sh')

执行之后就可以在安装目录下看到 Scoop 了

如果要改变安装全局应用时的路径,可以执行以下命令

$env:SCOOP_GLOBAL='E:\GlobalScoopApps'
[Environment]::SetEnvironmentVariable('SCOOP_GLOBAL', $env:SCOOP_GLOBAL, 'Machine')

这样以后使用 scoop install -g 命令时就会安装在 E:\GlobalScoopApps 下了

基础语法

Scoop 常用的几个基础语法如下所示

命令 动作
scoop search 搜索软件
scoop install 安装软件
scoop update 升级软件
scoop status 查看软件运行状态
scoop uninstall 写在软件
scoop info 查看软件信息
scoop home 打开软件官方网站

aria2

首先官方文档推荐的是 aria2 这一程序,可以使用多线程的方式加快 Scoop 下载各类软件的加载速度

scoop install aria2

不过要注意的是在安装 aria2 之前如果电脑上没有 git 的话,要先使用 scoop install git 安装 git,否则 scoop install 时会报错

sudo

Windows Terminal 有一个问题就是没办法使用管理员权限打开 PowerShell ,这就导致我有时候要执行某些需要管理员权限的命令时比较难受,还得切出去用管理员权限单独打开一下 PowerShell,虽然官方文档里有提到是因为安全原因所以不会有这个功能,但这确实让便利性大打折扣,这时候 sudo 就挺好用的

scoop install sudo

安装完成之后在需要管理员权限的命令前加上 sudo 就可以用管理员权限执行了

为scoop下载设置代理

在我用 scoop 安装一些软件时,我发现有时候会有连接不上的情况,特别是 GitHub 在我这边访问的速度和质量都及其不稳定…(具体原因懂的都懂),所以我一般都是通过代理上的。包括许多的包管理程序 git 、pip 等等我都配置了代理,所以我去官方文档看了看怎么设置 proxy.

Once Scoop is installed, you can use scoop config to configure your proxy. Here’s an excerpt from scoop help config:


scoop config proxy [username:password@]host:port

By default, Scoop will use the proxy settings from Internet Options, but with anonymous authentication.

  • To use the credentials for the current logged-in user, use currentuser in place of username:password
  • To use the system proxy settings configured in Internet Options, use default in place of host:port
  • An empty or unset value for proxy is equivalent to default (with no username or password)
  • To bypass the system proxy and connect directly, use none (with no username or password)

对于我这种没有认证的 proxy ,直接用下面一行命令就搞定了

scoop config proxy localhost:10809

要删除这个设置的话就直接

scoop config rm proxy

然后再次尝试下载,就没啥问题了

关于bucket

bucket 是 scoop 的软件仓库的总称,就像 repository 相对于 apt,一个成熟的包管理工具会有官方仓库,也会有第三方提供的仓库。scoop 自带的 bucket 只有一个 main,可以在命令行使用 scoop bucket list 查看。main bucket 的收录条件比较苛刻,其中最重要的一点就是「不能有GUI」

所以许多有 GUI 的程序在 main bucket 中是找不到的,但是 scoop 还提供了其他仓库,甚至你还可以自建仓库。这里提一个 scoop 官方提供的仓库 extras,其中包含了许多拥有 GUI 的常用软件。使用以下命令添加 extras 仓库

scoop bucket add extras

然后我们搜索一个截屏制作 gif 的软件 ScreenToGif 尝试一下

scoop search screentogif

可以看到在 extras 仓库中找到了该软件,直接下载之后就可以使用了