MSYS2是Windows下的一个工具,可以通过模拟Linux接口运行一部分Linux软件,是MinGW的增强版、Cygwin的轻量版。这篇文章介绍在VS Code中集成MSYS2的方法。
配置Shell集成
如果想把默认Shell直接换成MSYS2,只需进行如下设置:
{
"terminal.integrated.shell.windows": "`pathtomsys64`usrbinbash.exe",
"terminal.integrated.env.windows": {
"MSYSTEM": "MINGW64",
"CHERE_INVOKING": "1",
"MSYS2_PATH_TYPE": "inherit"
},
"terminal.integrated.shellArgs.windows": [
"--login",
"-i"
]
}
解释一下参数含义:
pathtomsys64
自行换成msys64的文件夹绝对路径,分隔符用""。虽然可以通过msys.exe、mingw64.exe等工具启动msys2,但它们是不能集成到VS Code中的。包括msys2_shell.cmd,这些工具的本质只是提供一个快捷方式,因此这里应该填真正的shell提供程序也就是bash。
环境变量第一行指定用MinGW64,这样可以直接调用通过pacman -S mingw-w64-x86_64-xxx安装的包,直接输xxx就可以了。多说一句,推荐安装应用时都安装mingw-w64-x86_64-xxx的版本,这个版本通常比不带前缀的要新一些,而mingw-w64-i386-xxx是32位的,不用装(都2020了,没几台机器是32位的了吧)。第二行是为了防止bash自动执行cd ~
。第三行是说把路径定向到当前工作区。这两行结合使用可以提供类似原生powershell的启动即定位到工作区的功能。最后一个"--login"参数是启动登录式shell,不加这个参数bash不会自动读取~/.bash_profile等文件。"-i"参数是启动交互式shell。
然而这种方式不推荐设置成全局(可以放在工作区设置里),其一是bash启动比powershell慢,其二是别的使用场景,比如写python(conda环境),用bash会和自带的python混淆。
多Shell集成
还有一种方法就是装插件支持启动不同的Shell,比如这个
Shell launcher需要一些设置,在Settings.json中输入
"shellLauncher.shells.windows": [
{
"shell": "C:WindowsSystem32cmd.exe",
"label": "cmd"
},
{
"shell": "C:WindowsSystem32WindowsPowerShellv1.0powershell.exe",
"label": "PowerShell"
},
{
"shell": "pathtomsys64usrbinbash.exe",
"label": "MSYS2 MinGW64",
"args": [
"--login",
"-i"
],
"env": {
"MSYSTEM": "MINGW64",
"CHERE_INVOKING": "1",
"MSYS2_PATH_TYPE": "inherit"
}
},
{
"shell": "C:WindowsSystem32bash.exe",
"label": "WSL Bash"
}
],
自行替换其中pathtomsys64
。这样就可以通过快捷键启动不同的Shell了。(我把快捷键设成了Ctrl+K Ctrl+`以与默认终端保持相似性。通过Ctrl+K Ctrl+S设置)
C/C++设置
用MSYS2的一个重要用途是写C/C++。Windows下写C++要么装庞大的VS+vcpkg管理包,要么就是仿linux,最好用的就是MSYS2。VS Code弄msys2当然也是支持的,在C/C++ Configuration中输入
c_cpp_properties.json
{
"configurations": [
{
"name": "Win32",
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"compilerPath": "pathtomsys64mingw64bing++.exe",
"includePath": [
"${default}",
"pathtomsys64mingw64include",
"pathtomsys64mingw64x86_64-w64-mingw32include"
],
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "gcc-x64"
}
],
"version": 4
}
pathtomsys2自行替换。注意这里"compilerPath"一定要设置好,否则VS Code的智能提示有可能会误报。而"includePath"是告诉VS Code头文件应该到哪去找。
如果想调试C++文件,打好断点直接按F5,一路选择Windows(GDB/LLDB)、g++就自动把launch.json、task.json全配好了,非常智能。依稀记得很久很久以前VSCode还要手动调task.json和launch.json,如今VS Code实在是在易用性上大大提高了。当然,如果想骚操作(比如task.json直接把当前目录下cpp全编译了,或者链接项目、第三方库)那还是需要修改一下的~