玩玩 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是由 ...
随机推荐
- LeetCode-1610 可见点的最大数目
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/maximum-number-of-visible-points 题目描述 给你一个点数组 poi ...
- EF Core迁移 (provider: SSL Provider, error: 0 - 证书链是由不受信任的颁发机构颁发的。)
A connection was successfully established with the server, but then an error occurred during the log ...
- flask + gunicorn + nginx
详解见网址:https://www.jianshu.com/p/dba83a473f12,问题解决:https://blog.51cto.com/yanconggod/1983494 我的配置:htt ...
- File类-绝对路径 相对路径
绝对路径:通过给定的路径能够直接在我的电脑中找到的文件 相对路径:文件相对于应用程序的路径 结论: 我们在开发中要尽量使用相对路径 File方法只能读取小文件,是一下子全读出来.如果读大文件则使用文件 ...
- VMware-包体选择
3.二进制包如何选择3.1选择适合当前系统的版本号: ●找不到适合的,才去尝试别的系统版本号 ●el6兼容el5; el5无法安装el63.2选择适合cpu的架构: ●x86_ _64包 ...
- vue table刷新单行数据
1.给el-table加上标记方法 <el-table v-loading="loading" :data="tagList1" @selection-c ...
- git基础代码获取
1.新建文件夹 2.使用命令git init 初始化 3.见你与远程厂库的连接,git remote add origin 远程仓库地址 4.将远程仓库代码拉去到本地,git fetch origin ...
- git提交命令
链接:https://www.waimaiguai.com/technology/article/5425017来源:外卖怪 外卖怪技术学习git更新代码命令2022-08-17 02:56:11gi ...
- oracle的dblink创建连接查询及使用
https://www.cnblogs.com/muhai/p/15527463.html https://www.cnblogs.com/leipei2352/archive/2011/04/21/ ...
- java-javaSE-集合类
集合类结构 集合类的基本接口是 Collection 和 Map Collection 向下派生出 Set List Queue 等接口 Map 向下派生出 HashMap LinkedHashMap ...