玩玩 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是由 ...
随机推荐
- gmgo国密算法库
gmgo国密算法库 一.背景介绍 基于go1.17.5实现的国密算法库,包括: sm2 : 基于emmansun/gmsm的sm2部分实现部分扩展. sm3 : 基于emmansun/gmsm的sm3 ...
- AtCoder随做
突然发现只有我没写过 AT. 没写题解不意味着没做,有的忘了写或者太草率了就算了. 部分前言删了. 目录 ABC020D ABC241G ABC268 AGC003D AGC004D AGC004E ...
- MySql创建高性能的索引
创建高性能的索引1.树 减少数据的查询次数二叉树 平衡树 b树 节点存储key和datab+树 节点只存储key 叶子节点存储data innodb使用b+树 当页最大16kb可以存储1000个key ...
- virtualenvwrapper使用命令
virtualenvwrapper使用命令 创建虚拟环境:mkvirtualenv + test1 查看虚拟环境:lsvirtuslenv 删除虚拟环境:rmvirtualenv + test1 退出 ...
- 小白学python必选一本书籍《Python学习手册》(第4版)
<Python学习手册>(第4版)pdf高清版免费下载地址: 提取码:ihpl 内容简介 · · · · · · Google和YouTube由于Python的高可适应性.易于维护以及适 ...
- VUE学习-优化组件
组件(优化) 动态组件 keep-alive 当在这些组件之间切换的时候,你有时会想保持这些组件的状态,以避免反复重渲染导致的性能问题. 有时我们更希望那些标签的组件实例能够被在它们第一次被创建的时候 ...
- 关于JMeter WebSocket插件:JMeter WebSocket插件-关闭SignalR连接--webSocket Close报错
在浦发银行的项目中,主机运维连接成功不做任何操作的场景中,用到了webSocket协议,但是脚本运行中出现webSocke Close报错--解决方案:在webSocket Open Connecti ...
- k8s升级导致hostPath type check failed
一.问题背景 当前Cluster K8s Version: v1.17.4 需要升级到K8s Version:v1.19.3 在升级过程中,有个Pod卡在ContainerCreating状态 api ...
- jinkens设置工作主目录
linux下,默认jenkins的主目录,位于当前用户下的.jenkins目录,需要自定义该目录位置的时候,可以通过设定环境变量 JENKINS_HOME 然后重启jenkins nohup java ...
- git基础代码获取
1.新建文件夹 2.使用命令git init 初始化 3.见你与远程厂库的连接,git remote add origin 远程仓库地址 4.将远程仓库代码拉去到本地,git fetch origin ...