VSCode 介绍

VSCode 是一款强大的编辑器,至少在对于 OIer 来说 VSCode 是最好的选择,VSCode 是轻量级编辑器,不像 VS 或者 Clion 一样是重量级编辑器,不方便 OIer 使用(并且还疯狂占用 CPU);也不像 Dev-cpp 一样尽管可以直接使用,但是功能却一言难尽……这个时候就要看 VSCode 了!
VSCode 支持打开文件夹,代码补全,代码片段插入,强大的调试功能,Markdown 的编辑和浏览,括号匹配,本地历史记录保存,修改代码缩进风格,内部控制台,连体字符,内置 git,内置编码查看修改,代码查看,宏展开等等……绝对是 OIer 的不二之选。

VSCode 下载和安装

直接在官网下载即可,但是由于某些不知道的原因下载比较慢,建议配合多线程下载器使用,比如说 Minecraft 启动器 多线程下载器 pcl2,可以在 1min 内下载完毕,下载完毕后不用多想一路下一个就行了,不像某 P2P 一样会附带捆绑。
我相信大多数人先看见 VSCode 打开时那堆英文就劝退了,实际上等待一会儿 VSCode 就会让你下载中文插件,或者 Ctrl+Shift+X 打开拓展界面输入 Chinese 安装第一个插件就行了,最后重启再打开显示的就是中文了。再实际上重启不用按叉叉再打开 VSCode (这个叫大退),只要 Ctrl+Shift+P 输入 reload 就可以重启了(这个叫小退)。
VSCode 的默认字体不是连体等宽字体,我们不妨在这里下载 Fira Code,一款连体等宽字体,然后在设置里输入:

"editor.fontFamily": "Fira Code",

字体就变成漂亮的连体等宽字体 Fira Code 了。 众所周知 VSCode 在配置时比较麻烦,这点可以通过登录 Github 账号解决,也可以通过下载 VSCode 绿色版解决。这里就介绍一下怎么下载 VSCode 绿色版。
首先还是在这里下载,不过这次下载的是 .zip 压缩包,解压完之后在 Code.exe 同级目录下新建文件夹 data,里面存放的就是各种配置,包括拓展、设置等等。在里面新建一个 tmp 的文件夹表示临时文件会在这里面生成。这个时候打开 Code.exe 就可以了,绿色版就是这么简单……

VSCode 配置 c++ 环境

注意支持 win7 的最后一个版本 1.70.3

都2022年了总是 c++ 了
首先安装 C/C++ 插件,实际上有这个插件就行了,下载时可能 VSCode 会热情赠送一些没用的插件,会拖慢启动速度而且没什么用处,可以直接不下载那些插件。
然后需要一个 c++ 在 Path 里的环境,所以需要一个 MinGW,考虑到 Dev-cpp 的 MinGW 过于古老,建议到 winlibs 里面下载一个 MinGW,下载下来是个压缩包,解压后放在自己喜欢的位置(也可以直接删掉 Dev-cpp 里的 MinGW,把这个替换进去),然后 右键此电脑-属性-高级系统设置-环境变量,选择变量 Path ,如果没有 MinGW 就新建一个,输入 MinGW 的解压地址,再来个 \bin 。比如说我把 MinGW 直接解压到 C 盘下面,添加的路径就是 C:\MinGW64\bin 。打开 cmd 输入 g++ -v 就可以知道环境变量是否安装成功,如果成功是会显示 gcc 的版本的。
再次回到 VSCode ,先选择一个自己喜欢的文件夹,以后的文件都放这里了。Ctrl+Shift+P 输入 C/C++编辑配置(JSON) 就会自动生成一个 .json 文件,一般来说是没什么问题的,直接关掉就行了。
这个时候打开工作文件夹里的 .cpp 文件,就可以看到代码补全和代码高亮发挥了作用,如果没有就小退/大退一下。如果还是没有代码补全试试 Ctrl+Shift+P 打开首选项:打开设置(JSON),输入以下文字:

"[cpp]": {
	"editor.quickSuggestions": true
},

如果还是没有效果可能是因为没有 .net4.5 以上的环境,可以在这里下载,建议下载脱机版。
但是这样并不好,因为只能编译却不能运行,VSCode 就只发挥了一般的高级编辑器的作用,然而 VSCode 却不是一般的高级编辑器,而是高级的高级编辑器(胡言乱语++)。有的同学可能已经在 F11 试图运行了,结果却全屏了,因为我们需要修改 VSCode 的配置让其能生成 .exe 文件并且打开 .exe文件。

指令

这个非常简单,直接使用 cmd 自己输指令编译运行就行了。但是略微有些麻烦,不如 Code Runner。可能用 Linux 的比较顺手?

Code Runner

不得不说 Code Runner 挺好用的。Ctrl+Shift+X 输入 Code Runner 就可以下载 Code Runner 插件,然后直接就可以 Ctrl+Alt+N 运行了~ 但是输入和输出都在小小的面板里,不得不说有点难受,可以选择移动面板的位置来修改,另外可以 Ctrl+Shift+P 输入首选项:打开设置(JSON),在 settings.json 输入这些内容就可以在终端里运行(不是面板里的终端)。

"code-runner.clearPreviousOutput": true,//运行前清屏
"code-runner.runInTerminal": true,//在终端里运行
"terminal.integrated.cursorStyle": "line",//终端光标是线的形状
"terminal.integrated.defaultLocation": "editor",//终端在页面里
"terminal.integrated.cursorBlinking": true,//终端光标闪烁
"terminal.integrated.fontSize": 15,//终端字体大小为 15
"terminal.integrated.enableMultiLinePasteWarning": false,//在终端邮件粘贴时不警告
"code-runner.saveFileBeforeRun": true,//运行前保存文件

这样修改过之后就是作者喜欢的形状了(还是建议按照自己喜好修改)。
不过这样弄完之后有些比较麻烦的事情,比如不能处理带空格的文件? 这是因为 Code Runner 默认配置的问题,可以在设置里输入

"code-runner.executorMap": {
	"cpp": "cd $dir && g++ \"$fileName\" -o Runner -O2 -std=c++20 -Wall -Wextra -Wshadow -Wconversion \"-Wl,--stack=2147483647\" && ./Runner",
},

注意到 VSCode 的默认终端是 powershell,如果不喜欢可以把终端改成 cmd。

"terminal.integrated.defaultProfile.windows": "Command Prompt",//将默认终端改成cmd
"code-runner.executorMap": {
	"cpp": "cd $dir && g++ \"$fileName\" -o Runner -O2 -std=c++20 -Wall -Wextra -Wshadow -Wconversion \"-Wl,--stack=2147483647\" && Runner",// cmd 的语法就不用 ./ 
},

Code Runner 原理是在终端里输入指令运行,所以你也可以试试自己 diy 哦!$dir 表示当前文件所在的文件夹名称,$fileName 表示当前文件的名称。
多说无益,给个表:

  • $workspaceRoot 当前工程目录路径
  • $dir 要运行的代码文件所在的目录
  • $dirWithoutTrailingSlash 要运行的代码文件所在的目录(不带尾后斜杆)
  • $fullFileName 要运行的代码文件全路径
  • $fileName 要运行的代码文件名称
  • $fileNameWithoutExt 要运行的代码文件名称(不带后缀名)
  • $driveLetter 要运行的代码文件所在盘符(只用于Windows系统)
  • $pythonPath Python解释器路径

如果不想清一色 Runner 就这样把所有 Runner 改成 \"$fileNameWithoutExt\",这样产生的 exe 文件名就和 cpp 文件名一样。

如果是 Ubuntu 系统可以按照 bash 的语法修改一下,其实就是上面 powershell 的语法:

"code-runner.executorMap": {
	"cpp": "cd $dir && g++ \"$fileName\" -o Runner -O2 -std=c++20 -Wall -Wextra -Wshadow -Wconversion \"-Wl,--stack=2147483647\" && ./Runner",
},

launch.json 和 tasks.json

注意:此方法从来没有在 win7 及以下版本成功过,似乎 win7 不能运行 tasks.json,而且支持 win7 的最后一个 VSCode 版本是 1.70.3。

这个做法看似麻烦实际不难,而且是考场上没有 Code Runner 时的做法。
一般的配置方式都是写个 tasks.json,使用 launch.json 调用一个 task,然后就可以跑程序了。
首先在刚刚的 .VSCode 里建 launch.json,输入以下代码:

{
	"version": "0.2.0",
	"configurations": [
		{
			"name": "编译并调试(VSCode)",
			"type": "cppdbg",
			"request": "launch",
			"program": "${fileDirname}\\Runner.exe",
			"cwd": "${fileDirname}",
			"preLaunchTask": "g++ compile"
		},
		{
			"name": "编译并运行(ConsolePauser)",
			"type": "cppvsdbg",
			"request": "launch",
			"program": "${workspaceFolder}\\ConsolePauser.exe",
			"args": ["Runner.exe"],
			"cwd": "${fileDirname}",
			"console": "newExternalWindow",
			"preLaunchTask": "g++ compile (no debug)"
		},
		{
			"name": "编译并运行(pause)",
			"type": "cppvsdbg",
			"request": "launch",
			"program": "Runner.exe",
			"cwd": "${fileDirname}",
			"console": "externalTerminal",
			"preLaunchTask": "g++ compile (no debug)"
		},
		{
			"name": "(Windows) 快速启动",
			"type": "cppvsdbg",
			"request": "launch",
			"program": "C:\\Windows\\System32\\cmd.exe",
			"args": [
				"/c",
				"g++",
				"${file}",
				"-o",
				"${fileBasenameNoExtension}",
				"-Wl,--stack=104857600",
				"-O2",
				"-Wall",
				"-Wextra",
				"-Wshadow",
				"-std=c++20",
				"&&",
				"${fileBasenameNoExtension}.exe"
			],
			"cwd": "${fileDirname}",
			"console": "externalTerminal"
		}
	]
}

这里的 name 就是名字,给自己看的而已,request 就写 launchprogram 就是你要运行的程序,cwd 表示你写的指令的相对位置,preLaunchTask 就是你要调用的 task 了。
仔细研究上述代码,发现他们的 type 不同,cppdbg 表示调试的意思,而 cppvsdbg 表示运行,这个调试就是字面意思,没什么可以研究的。运行中还带个 console 表示类型,newExternalWindow 表示新跳出一个窗口,externalTerminal 表示新跳出一个窗口,运行结束后自动暂停。
注意中间那个写法,ConsolePauser 就是 Dev-c++ 里面的 ConsolePauser,我在这里调用就可以仿照 Dev-c++ 的操作界面了。ConsolePauser 的好处就是可以计时以及获得返回值,args 就是参数表,也就是说你可以在 cmd 里面输入 ConsolePauser Runner.exe 来以 Dev-c++ 的形式运行个 exe。
这里附上 tasks.json 的写法:

{
	"version": "2.0.0",
	"tasks": [
		{
			"type": "shell",
			"label": "g++ compile",
			"command": "g++",
			"args": [
				"${file}",
				"-g",
				"-o",
				"${fileDirname}\\Runner",
				"-O2",
				"-Wall",
				"-Wextra",
				"-Wshadow",
				"-Wconversion",
				"-std=c++20"
			],
			"problemMatcher": [
				"$gcc"
			],
			"group": {
				"kind": "build",
				"isDefault": true
			}
		},
		{
			"type": "shell",
			"label": "g++ compile (no debug)",
			"command": "g++",
			"args": [
				"${file}",
				"-o",
				"${fileDirname}\\Runner",
				"-O2",
				"-Wall",
				"-Wextra",
				"-Wshadow",
				"-Wconversion",
				"-std=c++20"
			],
			"problemMatcher": [
				"$gcc"
			]
		}
	]
}

如果是 Ubuntu 把相应的语法改成 bash 的语法就行了。

如果在 CSP 的时候机子不太行,不能跑 tasks.json,那我推荐一个赛场上很适合写的方法,把所有指令压缩到 cmd 的参数列表里面,win7 和远古版本 VSCode 也肯定支持哦:

{
	"version": "0.2.0",
	"configurations": [
		{
			"name": "(Windows) 快速启动",
			"type": "cppvsdbg",
			"request": "launch",
			"program": "C:\\Windows\\System32\\cmd.exe",
			"args": [
				"/c g++ ${file} -o ${fileBasenameNoExtension} -Wl,--stack=104857600 -O2 -Wall -Wextra -Wshadow -std=c++14 && ${fileBasenameNoExtension}.exe"
			],
			"cwd": "${fileDirname}",
			"console": "externalTerminal"
		}
	]
}

但是不知道为啥,这个方法在 CSP-S2022 是可行的,NOIP2022 又不行了???都是考场害得!据说有的考场甚至没有 VSCode!

VSCode 其他配置

VSCode git

git 安装

git 是一个重要的源代码管理工具,VSCode 也带了 git ,Ctrl+Shift+G 可以召唤 git,然而在这之前,你应该先安装 git。

绑定 GitHub

安装完 git 之后建议先把本地电脑和 GitHub 绑定起来,

ssh-keygen -t rsa -C "your email"

在 cmd 或者 git bush 输入这句话,your email 是你注册 GitHub 的邮箱,跳出一段话后直接回车,然后再直接回车,然后再再直接回车,就会产生一个奇怪的正方形,这个时候打开用户文件夹,发现里面多了个 .ssh 文件夹,用 VSCode 打开 id_rsa.pub,发现里面是一串以 ssh-rsa 开头的字符串,将所有字符复制,打开 GitHub 的这个页面,选择 New SSH Key,Title随意 ,Key 里就是刚刚那串字符串(要 ssh-rsa 这个前缀),然后 Add SSH Key 后输入密码就行了。
可以通过在 cmd 或者 git bush 输入

ssh -T git@github.com

检测是否成功,如出现

Are you sure you want to continue connecting (yes/no/[fingerprint])?

字样就输入 yes 然后回车,如果出现

Hi "Your Name"! You've successfully authenticated, but GitHub does not provide shell access.

就代表成功连接了 Github

上传仓库

直接 Ctrl+Shift+G 选择上传到Github,选择是公有仓库还是私有仓库就行了。

更新

之后你的更改都会在 Ctrl+Shift+G 页面显示出来,可以暂存更改,在消息中输入文字后 Ctrl+Enter 就可以提交更改,但是这只是在本机的更改,并不会影响 Github ,这个时候选择右上角 3 个点选择推送就行了,如果你想把 Github 上仓库的内容替换本地,就选择拉取。

Python

对于 OIer 来说光是 C/C++ 显然是不够的,比如说 Python 也是一种在高精度上重要的语言,Python 是解释性语言,不需要这么复杂的配置,我在上面 Code Runner 章节也贴出了 Python 和 Ruby 的 Code Runner 参数,然后下载 Python 的插件就有了高亮和代码补全,直接 Ctrl+Shift+N 运行即可。

Markdown

对于 OIer 来说 Markdown 也是很重要的,用来写题解,笔记或者感想等都是非常有用的。VSCode 内部自带了 Markdown,只要建一个 xxx.md 文件就好了,Ctrl+K V 就可以一边编辑 Markdown 一边浏览了,非常方便!!

用户代码片段

别人随便按几下就是一个板子,随便按几下就是一个函数,羡慕吗?这就是用户代码片段。只要文件-首选项-用户片段-新建”xx”文件夹的代码片段文件,选择一个喜欢的名字就可以弄用户代码片段了,是一个 .code-snippets 文件。
这里给出一个板子:

{
	"快速幂": {//补全提示
		"scope": "cpp",//出现的文件
		"prefix": "add_qp",//补全关键词
		"body": [//插入部分主体
			"inline int qp(int a,int b,int t=1){for(;b;b>>=1,a=a*a%MOD)if(b&1)t=t*a%MOD;return t;}"
		]
	}
	"模板": {
		"scope": "cpp",
		"prefix": "add_mod",
		"body": [
			"#include<iostream>",//以逗号隔开
			"#include<cstdio>",
			"#include<algorithm>",
			"using std::cin;using std::cout;",
			"signed main(){",
			"//\tfreopen(\".in\",\"r\",stdin);",//注意这种情况需要转义符
			"//\tfreopen(\".out\",\"w\",stdout);",
			"//\tstd::ios::sync_with_stdio(false);",
			"//\tcin.tie(nullptr);cout.tie(nullptr);",
			"\treturn 0;",
			"}"//json文件语法,最后一个没有逗号
		]
	}//json文件语法,最后一个没有逗号
}

有人说:我这一个一个修改转义符一个一个加上引号也太麻烦了吧!确实有点,但是作为一名成熟的 OIer,写个程序为自己所用还是没什么问题的:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string>
using std::cin;using std::cout;
signed main(){
//	freopen(".in","r",stdin);
//	freopen(".out","w",stdout);
	std::ios::sync_with_stdio(false);
	cin.tie(nullptr);cout.tie(nullptr);
	std::string a,b="";
	while(std::getline(cin,a)){
		cout<<b<<"\"";b=",\n";
		for(char it:a){
			switch(it){
				case '\t':cout<<"\\t";continue;
				case '\"':cout<<"\\\"";continue;
				case '\\':cout<<"\\\\";continue;
				default:cout<<it;
			}
		}
		cout<<"\"";
	}
	return 0;
}

VSCode 插件

Chinese

下载链接 不认识英语的蒟蒻表示很赞。

Code Runner

下载链接 一件运行代码,简单到不解释。

C/C++

下载链接 提供了 C/C++ 的代码补全和代码高亮。

Python

下载链接 提供了 Python 的代码补全和代码高亮

Drawio

下载链接 提供了 VSCode 对 .drawio 文件的支持

MindMap

下载链接 提供了 VSCode 对 .km 文件的支持

One Dark Pro

下载链接 添加了 3 个暗色主题,主题色调为紫红黄橙蓝绿,非常优雅。

Horizon Theme

下载链接 粉粉的,真好看。

Mariana

下载链接 即 Sublime 的默认主题。

background-cover

下载链接 给你的 VSCode 加个背景!
总不可能天天对着黑屏幕写代码,当然是对着自己喜欢的背景写代码啊。
注意的是有标题为 background 图标是魔理沙的插件,那个插件下载完后字体会很奇怪QAQ。

Fix VSCode Checksums

下载链接 当你装完背景之后 VSCode 会贴心提示你 Code 已损坏,安装此插件后 Ctrl+Shift+P 输入 Apply 然后大退就可以去掉 VSCode 的贴心提示。

Colorful Comments

下载链接 在注释里加上一些特殊字符可以让注释变成彩色的,比如说 //* 是绿色,//! 是红色,特殊的,注释再注释是删除线,//TODO 是橙色。

Hex Editor

下载链接 提供了 16 进制文本编辑器。

Error Lens

下载链接 将代码报错信息移动到行内。

VSCode-pdf

下载链接 VSCode 竟然不能看 .pdf 文件,大怒!还好有插件!

Svg Preview

下载链接 为 VSCode 提供了 .svg 文件的浏览方法。

Rainbow CSV

下载链接 .csv 文件虽然可以直接浏览,但是容易糊成一团分不出列,使用本插件可以把相同列渲染为相同颜色,方便阅读 .csv。

Markdown PDF

下载链接 可以把 .md 文件导出成为 .pdf .html 文件,操作简单,右键即可。

LeetCode

下载链接 有的时候想做 LeetCode 的题,装了这个插件直接在 LeetCode 里切。

VSCode-luogu

下载链接 有的时候想做洛谷的题,装了这个插件直接在洛谷里切。

Codeforces Bot

下载链接 有的时候想做 Codeforces 的题,装了这个插件直接在 Codeforces 里切。

Bracket Pair Colorizer 2

下载链接 有的恶心题不免出现括号套括号套括号套括号套括号……的情况,这个插件可以给每一层括号匹配不同的颜色,将不匹配的括号渲染成红色。
然而现在 VSCode 已经自带此功能了,可以做到和插件一样的效果并且加载速度飞快,常常高亮还没加载出来括号匹配就渲染完了。这里给个板子:

"editor.bracketPairColorization.enabled": true,
"editor.guides.bracketPairs": "active",
"workbench.colorCustomizations": {
	"editorBracketHighlight.foreground1": "#ffd700",
	"editorBracketHighlight.foreground2": "#da70d6",
	"editorBracketHighlight.foreground3": "#87cefa"
},

实际上不写也可以有默认的括号匹配,这里给出只是为了 diy 爱好者自己 diy。

VSCode-icons

下载链接 我只想说这个插件修改后的图标真好看。

Marp for VS Code

下载链接 用 marp 写课件真的很方便,没有 ppt 一样的头痛,也没有 $\LaTeX$ 一样的复杂。

Code Time

下载链接 可以统计你每天或者每周写代码的时间,登录 Github 或者 Google 帐号还可以看历史写代码时间。

CodeSnap

下载链接 为代码截图提供了更好的办法,再也不用手动截图了,选中代码即可导出截图。

Local History

下载链接 顾名思义,每次保存代码时可以在本地产生一份备份,有的时候,Ctrl+Z 是解决不了问题的。然而现在 VSCode 自带这个功能了。只要在 Ctrl+Shift+E 里选择时间线……

Settings Sync

下载链接 不同机子上 VSCode 配置不同步怎么办?用这个插件就可以同步,然而现在 VSCode 只要登录 GitHub 账号就可以同步了……

小霸王

下载链接 这真的是小霸王,我只能……啊这了……

thief-book

下载链接 可以在面板的下面偷偷放出小说的字样,神不知鬼不觉,其他人第一眼没反应过来,第二眼字已经不见了!小说的格式是 .txt,编码必须是 UTF-8。

Cloudmusic

下载链接 一边写代码一边听歌有时候还是不错的。

daily anime

下载链接 可以快速看见这周什么番会更新,也可以随机获取一条 ACGN 的句子……

Zhihu On VSCode

下载链接 来知乎,分享你新编的故事。

VSCode 常用配置

settings.json

每个配置的效果可以使用鼠标悬停的方式查看。
还有个更生猛的全部禁用斜体:

"editor.tokenColorCustomizations": { //禁用所有主题的斜体
	"textMateRules": [
		{
			"scope": [
				"comment",
				"comment.block",
				"comment.block.documentation",
				"comment.line",
				"constant",
				"constant.character",
				"constant.character.escape",
				"constant.numeric",
				"constant.numeric.integer",
				"constant.numeric.float",
				"constant.numeric.hex",
				"constant.numeric.octal",
				"constant.other",
				"constant.regexp",
				"constant.rgb-value",
				"emphasis",
				"entity",
				"entity.name",
				"entity.name.class",
				"entity.name.function",
				"entity.name.method",
				"entity.name.section",
				"entity.name.selector",
				"entity.name.tag",
				"entity.name.type",
				"entity.other",
				"entity.other.attribute-name",
				"entity.other.inherited-class",
				"invalid",
				"invalid.deprecated",
				"invalid.illegal",
				"keyword",
				"keyword.control",
				"keyword.operator",
				"keyword.operator.new",
				"keyword.operator.assignment",
				"keyword.operator.arithmetic",
				"keyword.operator.logical",
				"keyword.other",
				"markup",
				"markup.bold",
				"markup.changed",
				"markup.deleted",
				"markup.heading",
				"markup.inline.raw",
				"markup.inserted",
				"markup.italic",
				"markup.list",
				"markup.list.numbered",
				"markup.list.unnumbered",
				"markup.other",
				"markup.quote",
				"markup.raw",
				"markup.underline",
				"markup.underline.link",
				"meta",
				"meta.block",
				"meta.cast",
				"meta.class",
				"meta.function",
				"meta.function-call",
				"meta.preprocessor",
				"meta.return-type",
				"meta.selector",
				"meta.tag",
				"meta.type.annotation",
				"meta.type",
				"punctuation.definition.string.begin",
				"punctuation.definition.string.end",
				"punctuation.separator",
				"punctuation.separator.continuation",
				"punctuation.terminator",
				"storage",
				"storage.modifier",
				"storage.type",
				"string",
				"string.interpolated",
				"string.other",
				"string.quoted",
				"string.quoted.double",
				"string.quoted.other",
				"string.quoted.single",
				"string.quoted.triple",
				"string.regexp",
				"string.unquoted",
				"strong",
				"support",
				"support.class",
				"support.constant",
				"support.function",
				"support.other",
				"support.type",
				"support.type.property-name",
				"support.variable",
				"variable",
				"variable.language",
				"variable.name",
				"variable.other",
				"variable.other.readwrite",
				"variable.parameter"
			],
			"settings": {
				"fontStyle": ""
			}
		}
	]
},

这个问题本来应该在第一段回答,为了防止影响理解就放在这里了:怎么把绿色版的配置变成本地的配置呢?
这里举个例子,假如我的用户名字叫做 piper,并且之前修改过 VSCode 的配置,那么在 C:\Users\piper 目录下有一个 .VSCode 的文件夹,里面有一个 extensions 的文件夹和 argv.json 的文件,全部拷贝到 data 文件夹里。同时在 C:\Users\piper\AppData\Roaming 文件夹里有个叫 Code 的文件夹,也拷贝到 data 文件夹里,然后启动 Code.exe,如果是移动完第一次启动可能不会生效,只需要小退/大退一下就会生效。
对于绿色版和安装版,C:\Users\piper\AppData\Roaming\Code\User 和 F:\VSCode\data\user-data\User (这里假设解压到了 F 盘)是同一个东西,C:\Users\piper\AppData\Roaming\Code\User\settings.json 和 F:\VSCode\data\user-data\User\settings.json 就是设置文件。当然也可以修改工作文件夹里的 .VSCode 文件夹里的 settings.json 来覆盖全局配置。设置用户自定义快捷键的 keybindings.json 也是同理。(如果你没有修改过,没有这个文件是正常的)
另外说一句,卸载掉 VSCode 之后 C:\Users\piper\.VSCode 和 C:\Users\piper\AppData\Roaming\Code 这两个文件夹仍然存在,如果不删掉这两个文件夹,以后再下载 Code 会保持原来的配置……所以如果不小心搞坏了 VSCode,删掉这两个文件夹后又是一条好汉。

keybindings.json

当然也可以修改自己的快捷键,就像 settings.json 的位置一样修改 keybindings.json 就可以了。不过我建议还是 Ctrl+K Ctrl+S 调出 UI 界面修改比较方便,所以这里就不放出 keybindings.json 的板子了。
其实看似快捷键一堆,常用的也没多少,而且这些快捷键有许多也是编辑器的通用快捷键,所以上手很简单。