玩玩 Visual Studio Code 和 MSYS2
注意:为了便于理解本文内容,您可能需要一些前置知识,例如命令行操作,编译器操作,路径操作,环境变量操作,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 可以在上面所述网站右侧“获取下载链接”处获取.
- 修改软件源
目测在长春和苏州地区似乎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 ,但是听说过好像有些接口差异/性能之类的原因,我不打算使用。
ucrt64
和clang64
系列应该是前不久才增加的,还没有研究过。
执行命令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.txt
和out.txt
两个文件,把它们打开然后拖到边上,就OK。
Code Runner 运行代码的快捷键是 Ctrl + Alt + N,试一波。
PowerShell 处理输出似乎不泰河里,如果你的输出文件出现乱码,那就在右下角显示GBK或者UTF-8之类的地方点一下,选择“用编码打开”和“自动检测”试试。
PowerShell 处理输出似乎不泰河里,会自说自话往最后追加一个空行。如果你确认你的程序没问题,忽略就行。
PowerShell 处理输出似乎不泰河里,为什么我们不用 cmd 呢,但是 cmd 好像太简陋了,&&
和cat
都没有。或者也许你可以研究一下自己写批处理或者脚本呢。或者也许你可以研究一下把 bash 搞上去呢。
注意:本文在不久的将来随时可能成为过时的(deprecated),建议多多参考其他较新的互联网资源,不宜偏信一家之言。
玩玩 Visual Studio Code 和 MSYS2的更多相关文章
- 使用Visual Studio Code 开发 ESP8266
使用Visual Studio Code 开发 ESP8266 ESP8266+ArduinoIDE+VSCode开发ESP8266. 首先说明一下ESP8266并不是某一WiFi模块的名字(我以前是 ...
- Visual Studio Code 代理设置
Visual Studio Code (简称 VS Code)是由微软研发的一款免费.开源的跨平台文本(代码)编辑器,在十多年的编程经历中,我使用过非常多的的代码编辑器(包括 IDE),例如 Fron ...
- 在Visual Studio Code中配置GO开发环境
一.GO语言安装 详情查看:GO语言下载.安装.配置 二.GoLang插件介绍 对于Visual Studio Code开发工具,有一款优秀的GoLang插件,它的主页为:https://github ...
- Visual Studio Code——Angular2 Hello World 之 2.0
最近看到一篇用Visual Studio Code开发Angular2的文章,也是一篇入门教程,地址为:使用Visual Studio Code開發Angular 2專案.这里按部就班的做了一遍,感觉 ...
- docker4dotnet #3 在macOS上使用Visual Studio Code和Docker开发asp.net core和mysql应用
.net猿遇到了小鲸鱼,觉得越来越兴奋.本来.net猿只是在透过家里那田子窗看外面的世界,但是看着海峡对岸的苹果园越来越茂盛,实在不想再去做一只宅猿了.于是,.net猿决定搭上小鲸鱼的渡轮到苹果园去看 ...
- Visual Studio Code v0.9.1 发布
微软的跨平台编辑器 Visual Studio Code v0.9.1 已经发布,官方博客上发布文章Visual Studio Code – October Update (0.9.1):http:/ ...
- 微软Visual Studio Code 0.8.0发布,新增多种主题
月30日,Build 开发者大会上,正式宣布了 Visual Studio Code 项目;并将其定义为:一个运行于 Mac OS X.Windows和 Linux 之上的,针对于编写现代 Web 和 ...
- Visual Studio Code 配置指南
Visual Studio Code (简称 VS Code)是由微软研发的一款免费.开源的跨平台文本(代码)编辑器.在我看来它是「一款完美的编辑器」. 本文是有关 VS Code 的特性介绍与配置指 ...
- Visual Studio Code,完美的编辑器
今日凌晨,微软的文本(代码)编辑器 Visual Studio Code(简称 VS Code),发布了首个正式版,距离首个 beta 版上线时间刚好一年. 在十多年的编程经历中,我使用过非常多的的代 ...
- 打造TypeScript的Visual Studio Code开发环境
打造TypeScript的Visual Studio Code开发环境 本文转自:https://zhuanlan.zhihu.com/p/21611724 作者: 2gua TypeScript是由 ...
随机推荐
- 制造业常用KPI
1. 质量KPI CA (Capability of Accuracy): 平均值距离期望中心值的距离,值越大,说明平均值越接近期望中心值. Ca=(X-U)/(T/2) CP (Capabilit ...
- .NET core api返回烦人的null
默认的时候 把这个为null的去掉 只需要加入这一行代码 即可搞定 builder.Services.AddMvc().AddJsonOptions(o => { o.JsonSeriali ...
- [JavaScript]对象数组 - 不完全整理
对象数组中查询属性为某个值的对象,使用Array.find() const array1 = [5, 12, 8, 130, 44]; const found = array1.find(elemen ...
- 新发现的几个不错的c++库
1.coost 包含了各种常用的库,比boost轻量级的基于c++11的库 https://github.com/idealvin/coost 2.ImGui 一个较少依赖的gui界面库 https: ...
- LeetCode(Java版)
两数之和 题目描述 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 示例: 给定 nums = [2, 7, 11, 15 ...
- 【个人笔记】CentOS 安装 Docker CE
要在 CentOS 上开始使用 Docker CE,请确保 满足先决条件,然后 安装Docker. 1. 卸载旧版本 sudo yum remove docker docker-client dock ...
- 【个人笔记】从本地源部署 Office 2016 专业增强版
## 0. 大大的说明 本文使用的 Office 2016 为 Office 2016 专业增强版零售版. 零售版需要使用 Office 部署工具才可以自定义安装组件,而 VOL 版本无需部署工具即可 ...
- vue2和vue3配置全局自定义参数及vue3动态绑定ref
在 Vue2.x 中我们可以通过 Vue.prototype 添加全局属性 property.但是在 Vue3.x 中需要将 Vue.prototype 替换为 config.globalProper ...
- Oracle UNDO表空间的管理
Oracle UNDO表空间的管理 UNDO表空间的管理是Oracle DBA最重要的日常工作之一,UNDO表空间用来暂时存储DML操作的数据,其主要作用有: 1.事务回滚 2.实例恢复 3.读一致性 ...
- JQUERY动态的修改<div>样式
首先需要引入JQUERY <script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"> & ...