程序员的资源宝库

网站首页 > gitee 正文

玩玩 Visual Studio Code 和 MSYS2

sanyeah 2024-03-29 17:24:11 gitee 7 ℃ 0 评论

注意:为了便于理解本文内容,您可能需要一些前置知识,例如命令行操作,编译器操作,路径操作,环境变量操作,vscode操作……

众所周知 Visual Studio Code 是一个优秀的编辑器。

众所周知 MSYS2 是一个方便快捷的开发环境部署工具。

众所周知 https://mirrors.tuna.tsinghua.edu.cn/ 是一个宝藏网站。

众所周知 https://mirrors.bfsu.edu.cn/ 是另一个宝藏网站。

目测在长春和苏州地区似乎bfsu比tuna要快不少。

GCC 的安装与环境变量的配置

首先你需要安装 MinGW 或者 MSYS2 (推荐使用后者,切换镜像源后速度非常快,安装和更新非常方便,并且囊括了MinGW的内容)(如果你使用 Linux 操作系统,那么忽略这一步)(如果你在使用 CodeBlocks 或者 Dev-C++ 并不想折腾并可以容忍老旧或无法正常更新的编译器潜在的问题,也可以忽略这一步,只要在你安装软件的地方找到 MinGW 之类的文件夹即可)。

使用 MSYS2 的亿点提示

MSYS2 可以在上面所述网站右侧“获取下载链接”处获取.

  • 修改软件源

参见 tuna 的教程或 bfsu 的教程。

目测在长春和苏州地区似乎bfsu比tuna要快不少。

p.s. MSYS2 不知道什么时候更新了,以下内容大概在不久的将来会成为过时的(deprecated)。

亲身经历,以前有时候自动更新会把改过的源地址覆盖掉,又得重新配置(现在可能不会了?)。所以我在~/.bashrc底下加了两行,每次打开 MSYS2 就把镜像源改成 bfsu ,其他地址直接丢弃。

echo "Server = https://mirrors.bfsu.edu.cn/msys2/mingw/x86_64" > /etc/pacman.d/mirrorlist.mingw64
echo "Server = https://mirrors.bfsu.edu.cn/msys2/msys/\$arch" > /etc/pacman.d/mirrorlist.msys
echo "Server = https://mirrors.bfsu.edu.cn/msys2/mingw/ucrt64" > /etc/pacman.d/mirrorlist.ucrt64
echo "Server = https://mirrors.bfsu.edu.cn/msys2/mingw/clang64" > /etc/pacman.d/mirrorlist.clang64

好像现在没什么人用32位的电脑了?我在/etc/pacman.conf里把 mingw32 仓库相关的项目注释掉了,不知道我想得对不对。

之后执行命令pacman -Syu更新软件,提示是否继续的时候直接回车也可以。

有时候会需要更新两次,第一次把 MSYS2 自己更新了,第二次才更新其他软件。

p.s. MSYS2 不知道什么时候更新了,以上内容大概在不久的将来会成为过时的(deprecated)。

注意:本文在不久的将来随时可能成为过时的(deprecated),建议多多参考其他较新的互联网资源,不宜偏信一家之言。

我观察了一下现在新的 MSYS2 好像把几个仓库的地址列表合并到一个文件了。

但是bfsu,tuna,ustc的帮助文档都没更新。

然而在这些站上对应的新镜像地址都是可访问的。

所以我们只需要编辑.mingw.msys结尾的两个文件大概就够了。这里在bfsu之外还加入了tuna和ustc作为备份。

/etc/pacman.d/mirrorlist.mingw

Server = https://mirrors.bfsu.edu.cn/msys2/mingw/$repo/
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/$repo/
Server = https://mirrors.ustc.edu.cn/msys2/mingw/$repo/

/etc/pacman.d/mirrorlist.msys

Server = https://mirrors.bfsu.edu.cn/msys2/msys/$arch
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/msys/$arch/
Server = https://mirrors.ustc.edu.cn/msys2/msys/$arch/

p.s. MSYS2 中的根目录/开始于 MSYS2 在您电脑上的安装位置。另外 MSYS2 还将您系统的C:D:等分区挂载为/c/d等以便您直接访问系统中的文件。

  • 安装 GCC

执行命令pacman -Ss gcc会列出很多结果,我们一般使用mingw64系列的这个:

另外还会看到一个msys系列的 GCC ,但是听说过好像有些接口差异/性能之类的原因,我不打算使用。

ucrt64clang64系列应该是前不久才增加的,还没有研究过。

执行命令pacman -S mingw-w64-x86_64-gcc安装 MinGW GCC 。

如果你还想要使用 vscode 的 F5 调试功能,还得安装 GDB 。

pacman -S mingw-w64-x86_64-gdb

配置环境变量

在你桌面的“此电脑”上右键,选择属性。得是一个真正的“此电脑”图标,快捷方式不行。

如果你没有“此电脑”图标,那么进入设置 > 系统 > 关于。

找到“高级系统设置”,找到“环境变量”,找到“用户变量”(为当前用户配置)或者“系统变量”(为所有用户配置)里的Path

如果你使用 MSYS2 安装 mingw64 gcc 那么新建一条:<你的MSYS2安装目录>\mingw64\bin,比如我的 MSYS2 安装在D:\msys64,我的这条就是D:\msys64\mingw64\bin。你可以去这个路径确认一下是不是有gcc.exe之类的软件。如果你安装的是其他系列比如 msys 的 gcc 那可能要按实际情况把里面的mingw64换成别的什么。如果你安装的不是 MSYS2 而是 MinGW ,那么按照你的实际情况操作。最后要点确定。

现在随便开一个 cmd 或者 powershell 什么命令行,看看执行 gcc 或者 g++ 有什么反应。

p.s. 在任何地方快速启动命令行:按住 Shift 并在桌面或资源管理器窗口(文件夹窗口)空白处点击鼠标右键,选择“在此处打开命令窗口”。

Visual Studio Code 的配置

众所周知没有人比我更懂vscode。

注意:本文在不久的将来随时可能成为过时的(deprecated),建议多多参考其他较新的互联网资源,不宜偏信一家之言。

以下是我觉得有用的插件。

formulahendry.code-runner	(一键编译运行,精心调教后刷题很方便)
ms-vscode.cpptools	(C++语言辅助/调试运行)
coenraads.bracket-pair-colorizer-2	(括号着色)
oderwat.indent-rainbow	(缩进着色)
ms-ceintl.vscode-language-pack-zh-hans	(中文语言包)
pdconsec.vscode-print	(代码打印)
adammaras.overtype	(按 Insert 键切换到“覆写”模式,处理字符画之类很方便)
llvm-vs-code-extensions.vscode-clangd	(clangd语言辅助,比上面那个强一万倍)

p.s. 以上内容是插件ID,在扩展页直接搜索就能安装

安装 clangd 插件会提示你关闭 C/C++ 默认的 IntelliSense 和下载 clangd 依赖。如果无法正常下载依赖,可以在 MSYS2 安装:pacman -S mingw-w64-x86_64-clang-tools-extra

下面是我“用户设置”的settings.json文件节选,附带注释,按需摘抄。

vscode 使用 json 作为配置文件,是一种“键-值”对的形式,应该不难理解。其中的“键”都是设置项ID,可以直接在设置页顶部搜索。

“用户设置”指全局生效的设置。要修改“用户设置”,请确保在设置页顶部“用户”被激活。要直接修改设置文件,点击设置页右上角一个箭头指向文件的图标。

{
    "files.autoSave": "onFocusChange",	// 鼠标点到编辑器以外时自动保存
    "editor.insertSpaces": false,	// 输入Tab时插入Tab字符'\t'
    "editor.wordWrap": "on",	// 自动换行显示
    "editor.acceptSuggestionOnEnter": "off",	// 只在按Tab 时接受补全建议,回车只用于换行

	/* 以下是 C/C++ 插件相关设置 */
    "C_Cpp.default.compilerPath": "D:\\msys64\\mingw64\\bin\\gcc.exe",	// 编译器所在路径,按实际情况修改
    "C_Cpp.intelliSenseEngine": "Disabled",	// 禁用 C/C++ 插件的 IntelliSense, 因为我们使用了 clangd 插件

	/* 以下是 Code Runner 相关的设置 */
    "code-runner.saveFileBeforeRun": true,	// 运行前自动保存文件
    "code-runner.runInTerminal": true,	// 在终端运行,默认在输出窗运行,无法接收输入
    "code-runner.executorMap": {	// 只针对 C 和 C++ 部分做了一点patch,大概解决了路径中存在空格会出现的问题
        ...
        "c": "gcc $fileName -o $fileNameWithoutExt.exe && $dir$fileNameWithoutExt.exe",
        "cpp": "g++ $fileName -o $fileNameWithoutExt.exe && $dir$fileNameWithoutExt.exe",
        ...
    },
    "code-runner.fileDirectoryAsCwd": true,	// 运行代码前切换工作目录
    "code-runner.ignoreSelection": true,	// 如果你选中了一部分代码,code runner会只运行那一部分,这里把这个特性关闭
    "code-runner.preserveFocus": false,	// 运行时将焦点切换到终端,便于直接开始输入
}

下面是我刷题专用文件夹“工作区设置”的settings.json文件节选。

“工作区设置”指只在你打开的文件夹生效的设置。要修改“工作区设置”,请确保在设置页顶部“工作区”被激活。要直接修改设置文件,点击设置页右上角一个箭头指向文件的图标。

{
	"code-runner.executorMap": {	// 做成截图中输入输出分栏的模式
		"cpp": "g++ $fileName -o $fileNameWithoutExt.exe && cat $workspaceRoot/in.txt | $dir$fileNameWithoutExt.exe > $workspaceRoot/out.txt"
	},
	"code-runner.customCommand": "cd $workspaceRoot; ls * -include *.exe -recurse | rm",	// 自动清除生成的 exe 文件,快捷键是 Ctrl + Alt + K
	"code-runner.preserveFocus": true	// 不用切换焦点反正我们有分栏
}

解释一下g++ $fileName -o $fileNameWithoutExt.exe && cat $workspaceRoot/in.txt | $dir$fileNameWithoutExt.exe > $workspaceRoot/out.txt,其中$fileName指当前文件名,$fileNameWithoutExt指无后缀的当前文件名,$workspaceRoot指当前的工作区根目录(就是你用vscode打开的文件夹),$dir指当前文件所在目录,这些标记会由code runner插件自动替换成真实内容,并交给命令解释程序执行。g++开头的是编译命令,&&指示前面的命令执行成功才执行后面的命令(类似于C++中利用&&的短路特性),cat不是猫,是读取文件内容,|是将前面命令的输出送到后面命令的输入,$dir$fileNameWithoutExt.exe是执行我们编译得到的程序,>是将前面命令的输出送到后面那个文件。

所以还得在你的工作区根目录创建in.txtout.txt两个文件,把它们打开然后拖到边上,就OK。

Code Runner 运行代码的快捷键是 Ctrl + Alt + N,试一波。

PowerShell 处理输出似乎不泰河里,如果你的输出文件出现乱码,那就在右下角显示GBK或者UTF-8之类的地方点一下,选择“用编码打开”和“自动检测”试试。

PowerShell 处理输出似乎不泰河里,会自说自话往最后追加一个空行。如果你确认你的程序没问题,忽略就行。

PowerShell 处理输出似乎不泰河里,为什么我们不用 cmd 呢,但是 cmd 好像太简陋了,&&cat都没有。或者也许你可以研究一下自己写批处理或者脚本呢。或者也许你可以研究一下把 bash 搞上去呢。

注意:本文在不久的将来随时可能成为过时的(deprecated),建议多多参考其他较新的互联网资源,不宜偏信一家之言。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表