为 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%" ``` 配置上直接配也可以: ![](https://raw.githubusercontent.com/t1hq/imghst/master/2024/202403061821899.png) `${var}` 应该是 PowerShell 的格式,而 `%VAR%`的格式应该是 DOS/CMD 时代的产物, 两者都是微软的产品,说明这两个产品的开发团队还没有形成共识。😊 ## 总结 我们回顾了下 MSYS2 从默认安装目录切换到 scoop 目录后,VSCode 和 Terminal 要更改 的配置,其实最关键只有一点要牢记,如果我们在 VSCode 中找不到我们配置的 MSYS2 命令行,那多半是我们配置有误,导致配置被 VSCode 丢掉了。