Cookies Used! Some utilities (google analitics, adsense) on this site used cookies
为 VSCode 和 Windows Terminal 配置 MSYS2 命令行
不晓得各位的 VSCode 默认是用哪个终端,我是比较常用 MSYS2,所以一般也是用 MSYS2
作为默认终端,今天我们说下如何把 MSYS2 配置成 VSCode 的默认终端,
顺带也给 Windows Terminal 也添加 MSYS2 的终端
不晓得各位的 VSCode 默认是用哪个终端,我是比较常用 MSYS2,所以一般也是用 MSYS2
作为默认终端,今天我们说下如何把 MSYS2 配置成 VSCode 的默认终端,
顺带也给 Windows Terminal 也添加 MSYS2 的终端
## 问题
其实是我今天把 MSYS2 迁移到了 scoop,然后就发现 VSCode 和 Terminal 找不到 MSYS2
了,这是正常的,因为安装路径变了么,一般 scoop 的程序都会安装在用户目录下,
而不是 c:\msys64。那我们就记录一下要改些什么,我们这次的主要变动,
其实就是修改了 MSYS2 的安装目录。
## VSCode
主要会有两个配置与我们本次的改动有关:
### 1. `"terminal.integrated.defaultProfile.windows"`
这个定义了 windows 系统下,VSCode 的默认终端,注意正常的情况下,
我们是不用修改的,但如果我们的 MSYS2 路径配置有问题,
而我们又配置了 MSYS2 为默认终端,VSCode 会提示我们这个配置有误。
### 2. `"terminal.integrated.profiles.windows"`
这个配置下面包含了集成在 VSCode 中所有的命令行,我简单列一下:
```json
"Command Prompt": {
"path": [
"${env:windir}\\Sysnative\\cmd.exe",
"${env:windir}\\System32\\cmd.exe"
],
"args": [],
"icon": "terminal-cmd"
},
"MSYS2": {
"path": "c:\\users\\tricks1\\scoop\\apps\\msys2\\current\\msys2_shell.cmd",
"label": "MSYS2",
"icon": "terminal-bash",
"args": [
"-full-path",
"-defterm",
"-here",
"-no-start",
"-msys"
],
"env": {
"MSYSTEM": "MINGW64",
"CHERE_INVOKING": "1"
}
```
最关键的配置是路径(path),如果配置错误,或是对应路径下找不到文件,
VSCode 会认为这个命令行配置有误而丢弃,最直观的一个影响就是,
我们在设置第一个配置默认命令行时,设置为 MSYS2 后会提示没有这个配置。
一般 scoop 会在用户目录下建一个目录,用来保存通过 scoop 安装的应用,
所以我们按照上面的配置应该就可以正常启动,但是如果这段配置换了台不同用户的机器,
可能就又有问题了,所以我们可以做得更「优雅」一点,
把**用户路径**用**环境变量**隐藏:
```json
"MSYS2": {
"path": "${env:UserProfile}\\scoop\\apps\\msys2\\current\\msys2_shell.cmd",
"label": "MSYS2",
"icon": "terminal-bash",
"args": [
...
],
...
}
```
这样即使用户发生变化,我们也不用怕了。
## Windows Terminal
终端这边也可以入法炮制,只是要换个写法:
```json
"commandline": "%UserProfile%\\scoop\\apps\\msys2\\current\\msys2_shell.cmd -defterm -here -no-start -msys",
"guid": "{00000000-0000-0000-0000-000000000000}",
"icon": "%UserProfile%\\scoop\\apps\\msys2\\current\\msys2.ico",
"name": "MSYS / MSYS2",
"startingDirectory": "%UserProfile%\\scoop\\apps\\msys2\\current\\home\\%USERNAME%"
```
配置上直接配也可以:

`${var}` 应该是 PowerShell 的格式,而 `%VAR%`的格式应该是 DOS/CMD 时代的产物,
两者都是微软的产品,说明这两个产品的开发团队还没有形成共识。😊
## 总结
我们回顾了下 MSYS2 从默认安装目录切换到 scoop 目录后,VSCode 和 Terminal 要更改
的配置,其实最关键只有一点要牢记,如果我们在 VSCode 中找不到我们配置的 MSYS2
命令行,那多半是我们配置有误,导致配置被 VSCode 丢掉了。