注意:为了便于理解本文内容,您可能需要一些前置知识,例如命令行操作,编译器操作,路径操作,环境变量操作,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),建议多多参考其他较新的互联网资源,不宜偏信一家之言。

玩玩 Visual Studio Code 和 MSYS2的更多相关文章

  1. 使用Visual Studio Code 开发 ESP8266

    使用Visual Studio Code 开发 ESP8266 ESP8266+ArduinoIDE+VSCode开发ESP8266. 首先说明一下ESP8266并不是某一WiFi模块的名字(我以前是 ...

  2. Visual Studio Code 代理设置

    Visual Studio Code (简称 VS Code)是由微软研发的一款免费.开源的跨平台文本(代码)编辑器,在十多年的编程经历中,我使用过非常多的的代码编辑器(包括 IDE),例如 Fron ...

  3. 在Visual Studio Code中配置GO开发环境

    一.GO语言安装 详情查看:GO语言下载.安装.配置 二.GoLang插件介绍 对于Visual Studio Code开发工具,有一款优秀的GoLang插件,它的主页为:https://github ...

  4. Visual Studio Code——Angular2 Hello World 之 2.0

    最近看到一篇用Visual Studio Code开发Angular2的文章,也是一篇入门教程,地址为:使用Visual Studio Code開發Angular 2專案.这里按部就班的做了一遍,感觉 ...

  5. docker4dotnet #3 在macOS上使用Visual Studio Code和Docker开发asp.net core和mysql应用

    .net猿遇到了小鲸鱼,觉得越来越兴奋.本来.net猿只是在透过家里那田子窗看外面的世界,但是看着海峡对岸的苹果园越来越茂盛,实在不想再去做一只宅猿了.于是,.net猿决定搭上小鲸鱼的渡轮到苹果园去看 ...

  6. Visual Studio Code v0.9.1 发布

    微软的跨平台编辑器 Visual Studio Code v0.9.1 已经发布,官方博客上发布文章Visual Studio Code – October Update (0.9.1):http:/ ...

  7. 微软Visual Studio Code 0.8.0发布,新增多种主题

    月30日,Build 开发者大会上,正式宣布了 Visual Studio Code 项目;并将其定义为:一个运行于 Mac OS X.Windows和 Linux 之上的,针对于编写现代 Web 和 ...

  8. Visual Studio Code 配置指南

    Visual Studio Code (简称 VS Code)是由微软研发的一款免费.开源的跨平台文本(代码)编辑器.在我看来它是「一款完美的编辑器」. 本文是有关 VS Code 的特性介绍与配置指 ...

  9. Visual Studio Code,完美的编辑器

    今日凌晨,微软的文本(代码)编辑器 Visual Studio Code(简称 VS Code),发布了首个正式版,距离首个 beta 版上线时间刚好一年. 在十多年的编程经历中,我使用过非常多的的代 ...

  10. 打造TypeScript的Visual Studio Code开发环境

    打造TypeScript的Visual Studio Code开发环境 本文转自:https://zhuanlan.zhihu.com/p/21611724 作者: 2gua TypeScript是由 ...

随机推荐

  1. LeetCode-1610 可见点的最大数目

    来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/maximum-number-of-visible-points 题目描述 给你一个点数组 poi ...

  2. EF Core迁移 (provider: SSL Provider, error: 0 - 证书链是由不受信任的颁发机构颁发的。)

    A connection was successfully established with the server, but then an error occurred during the log ...

  3. flask + gunicorn + nginx

    详解见网址:https://www.jianshu.com/p/dba83a473f12,问题解决:https://blog.51cto.com/yanconggod/1983494 我的配置:htt ...

  4. File类-绝对路径 相对路径

    绝对路径:通过给定的路径能够直接在我的电脑中找到的文件 相对路径:文件相对于应用程序的路径 结论: 我们在开发中要尽量使用相对路径 File方法只能读取小文件,是一下子全读出来.如果读大文件则使用文件 ...

  5. VMware-包体选择

    3.二进制包如何选择3.1选择适合当前系统的版本号:    ●找不到适合的,才去尝试别的系统版本号   ●el6兼容el5; el5无法安装el63.2选择适合cpu的架构:   ●x86_ _64包 ...

  6. vue table刷新单行数据

    1.给el-table加上标记方法 <el-table v-loading="loading" :data="tagList1" @selection-c ...

  7. git基础代码获取

    1.新建文件夹 2.使用命令git init 初始化 3.见你与远程厂库的连接,git remote add origin 远程仓库地址 4.将远程仓库代码拉去到本地,git fetch origin ...

  8. git提交命令

    链接:https://www.waimaiguai.com/technology/article/5425017来源:外卖怪 外卖怪技术学习git更新代码命令2022-08-17 02:56:11gi ...

  9. oracle的dblink创建连接查询及使用

    https://www.cnblogs.com/muhai/p/15527463.html https://www.cnblogs.com/leipei2352/archive/2011/04/21/ ...

  10. java-javaSE-集合类

    集合类结构 集合类的基本接口是 Collection 和 Map Collection 向下派生出 Set List Queue 等接口 Map 向下派生出 HashMap LinkedHashMap ...