8

Windows 终端环境改造计划

 3 years ago
source link: http://blog.krimeshu.com/2020/12/05/enhance-your-windows-terminal-experience/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

最近有个朋友突然问起,想买一台新的个人开发用电脑,偶尔连接公司环境做做远程开发,问我有什么推荐的配置。

于是稍微梳理了一下,2020年的个人开发环境选择。

分析

那就万能的苹果吧。

我首先想到的自然是 MBP,自己平时开发环境就是一台 iMac 和一台 Win10 机器。而从屏幕效果、开发软件源和终端体验来看,苹果家都胜出一筹。

不过随后那朋友补充了自己的预算——3000,嗯,人民币。

好吧,那基本告别苹果了。

那 Linux 怎么样?

不过除了苹果和 Windows 之外,其实还可以使用 Ubuntu 之类的 Linux 桌面环境。预想中,类似 macOS 的高清字体渲染、Unix-like 的命令环境、无缝对接服务端开发……然而理想很美好,现实还是有点骨感。

在外企开发的同学估计没问题,但在国内肯定离不开 QQ、微信、企业微信等各种国内软件。而国情所限,这些国内软件往往只支持 Win 环境、偶尔支持 macOS,基本无视更通用的 Web 端等平台的开发。

如果选择了 Linux,基本只能靠 wine 来跑它们了,而经过实际体验的感觉并不怎么愉快。

看来还是得 Windows 了。

至于 Windows 的命令行环境,有点一言难尽,不过还是有人尝试着概括成了一句话: Linux 是在命令行上做了个图形界面,Windows 是在图形界面里顺便带了个命令行

嗯,差不多就是这个感觉,Windows 环境的命令行简直就是附带的,功能凑合,勉强能用。

虽然经常被用到,但 cmd 基本是无奈之选,软件生态贫瘠,可定制项目少,提示符展示 git 分支名称都没法做到。命令补全功能也只能做到路径补全,不支持参数补全、引号区分混乱……

PowerShell似乎有改进,但启动更慢了,软件生态问题也没什么变化,反而干掉 && / || 搞了一套与 Linux/Mac 都不兼容的流程控制符,让跨平台的项目配置变得颇为蛋疼。就算后期 Win10 默认推荐使用它,也还是让人没有使用的兴趣。

而且,对于日常使用 *git** 工作和做个人笔记同步的我来说,默认也不提供可用的 ssh ,就算手动安装软件支持, git bash / openssh / putty 默认使用的密钥还不太一样,就算花时间去配置整合也不一定能完全通用,费时费力也不讨好。

总之, windows 端的终端环境,不做一番改造是没法用的。

改造方案

1.git-bash/cmder

一直以来,两者都是 Windows 端命令环境的不错选择。

不过,前者基于 mintty ,官方已经声明了,它并不能完全替代命令行环境。比如不能直接用 Windows 下的 Python、MySQL 等环境,甚至不支持 tree 命令:

来源: 《git 入门教程之 git bash 竟然不支持 tree 命令》

后者基于 ConEmu ,还搭配了 clink 和 git 环境等便捷配置。如果想直接使用 ConEmu 达到类似的效果,还是需要做不少手动优化的:

来源: 《ConEmu 配置 (让 ConEmu 和 Cmder 一样好用)》

可见 cmder 已经提前做好了多少优化配置,让人省心。

cmder 官方提供了 精简版完整版 两个包,区别在于后者内置了一份 git。由于 git 肯定会手动安装最新版,顺便自动配置 PATH 以方便 VSCode 等软件的集成和调用,所以可以考虑直接使用精简版。

对于经常在多台办公电脑、个人电脑、平板之间来回切换的我来说,打包一份做好个人配置的 cmder ,就可以轻松在多端获得同样的命令行体验,简直不要太轻松。

1.1 安装

打开 cmder 官方网站 (https://cmder.net/) 下载即可。

1.2 提示符配置

修改 %CMDER_ROOT%\vendor\clink.lua 中的 lambda$ ,以免切换历史命令时出现错乱字符。

1.3 添加右键上下文菜单

切换到 cmder 的主目录 右键以管理员权限打开 Cmder.exe,在命令栏输入 Cmder.exe /REGISTER ALL ,回车执行即可添加右键菜单。

1.4 集成到 IDE 终端

在系统环境变量中,增加一个 CMDER_ROOT ,内容为 cmder 的主目录路径。

然后,将以下内容保存为 ide_shell_entry.bat ,放在 cmder 目录下:

@echo off
SET CurrentWorkingDirectory=%CD%
SET CMDER_ROOT=D:\Tools\Cmder
CALL "%CMDER_ROOT%\vendor\init.bat"
CD /D %CurrentWorkingDirectory%

最后配置 IDE 启动的终端为 cmd.exe ,启动参数 /k %CMDER_ROOT%/ide_shell_entry.bat

这样,就能在 VSCode、IDEA 等 IDE 中进行项目开发的时候,随时在集成终端中使用与 cmder 一致的环境。

2.terminal+wsl2

在 2016 年,Win10 系统十周年之际,微软推出了 “Bash on Ubuntu on Windows”,后来又改名成了 “Windows Subsystem for Linux - WSL”。在 2019 年,又改造升级成了 WSL2。

有兴趣的同学可以继续阅读: 《WSL1 与 WSL2 简单对比》

并且还推出了新的终端模拟器 Windows Terminal ,界面美观、使用方便、CJK 字体渲染完美、启动快速,搭配 WSL 使用香到不行。

2.1 安装

打开 Win10 的应用商店,搜索 terminal 即可找到 Windows Terminal,点击安装即可。

WSL 的话,则是直接搜索自己想要安装的 Linux 发行版本,比如 Ubuntu 20 ,在搜索结果中找到它,点击安装即可。

两者都安装完毕后,打开 Terminal 修改配置文件,将默认启动配置 defaultProfile 改为下面 profiles 中 WSL 对应条目的 guid

2.2 升级 WSL2

打开 WSL 官方页面 (http://aka.ms/wsl) ,点击 INSTALL WSL 后,按照指示一步步操作。

2.3 修复代理冲突

如果在本机使用了 Proxifier 可能会遇到 WSL 启动报错无法使用的情况:

参考的对象类型不支持尝试的操作。

可以执行 netsh winsock reset 修复,但这样又会导致 Proxifier 的代理控制失效,只是拆了东墙补西墙。

Proxifier 官方提供了一个工具修复这个问题,下载 www.proxifier.com/tmp/Test20200228/NoLsp.exe 后,使用管理员权限打开 cmd/PowerShell 切换到 NoLsp.exe 所在目录,执行 NoLsp.exe c:\windows\system32\wsl.exe 即可解决问题。

参考: https://github.com/microsoft/WSL/issues/4177#issuecomment-597736482

2.4 添加右键上下文菜单

先创建个放置小图标的目录:

mkdir "%USERPROFILE%\AppData\Local\terminal"

然后,在 easyicon.net 搜索 terminal 后,找个自己顺眼的图标,下载放到刚才的目录中(不知道 AppData 目录在哪的同学,直接在资源管理器地址栏里粘贴上面的路径就可以打开了),改名为 terminal.ico

接着,创建一个 wt.reg 文件,输入以下内容:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\Background\shell\wt]
@="Open Terminal Here"
"Icon"="%USERPROFILE%\\AppData\\Local\\Terminal\\terminal.ico"

[HKEY_CLASSES_ROOT\Directory\Background\shell\wt\command]
@="C:\\Users\\{username}\\AppData\\Local\\Microsoft\\WindowsApps\\wt.exe"

记得将上面的 {username} 改成自己的用户名。

双击执行后,就可以在右键菜单中看到 Open Terminal Here 的选项了。

不过,点击选项后你会发现打开的 Terminal 是固定目录,如果要设置为当前目录,需要修改 Terminal 的配置文件。

profiles.defaults 段落中,在添加 "startingDirectory" : ".", 就可以了。

2.5 集成到 IDE 终端

相比 Cmder 还需要创建脚本配置启动参数,WSL 就比较简单了,直接将 IDE 默认的继承终端启动程序,由 cmd.exe 改为 wsl.exe 就行。

2.6 美化

Terminal 默认的效果还是挺素的,喜欢自定义的同学可以调调配色、换换背景图。

我个人则是倾向于给 Terminal 配置个亚克力背景效果。在配置文件对应的 profile 段落内,添加:

{
    "[profile]": {
        // ...
		    "background": "#013456",
		    "useAcrylic": true,
		    "acrylicOpacity": 0.7
    },
}

补充

日常项目开发,推荐使用 WSL。

毕竟微软自家做的环境,底层与系统的对接较完善,启动速度快。

在 IDE 中启动 cmder 的时候,往往需要六七秒的时间。如果碰上 VSCode 打开了多个项目。重启机器后,VSCode 会瞬间还原上次的多个窗口,并同时开始打开多个继承终端,速度极其缓慢,经常还有部分窗口的终端启动失败,需要手动重启,体验较差。

配置成 WSL 的话,不管几个都是秒开,简直和 Linux 环境的体验差不多。

但是遇到需要使用 Windows 系统真实环境的情况(比如 electron 打包),还是得使用 cmder 或者 cmd。除非是专门做 Windows 平台应用开发的同学,一般来说这类情况较少。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK