VSCode 个人使用经验
Version 1.01
by Pixel Frame
遠神恵賜
编辑器介绍
资源管理
VS Code自然是可以作为一个单纯的文本编辑器,直接打开文档进行编辑。但其实要使用Debug、Git等功能,则还是要打开一个文件夹,即将该文件夹作为工作目录。这也就和IDE的工程类似的概念。在打开文件夹后,左侧的资源管理器就能很直观的显示目录中的各种文件。在安装插件后,更是能够添加XML分析,Git历史,Commit对比等等的功能。
编码/制表符/换行符
VS Code新建/打开文件默认采用UTF-8(无BOM),并不能自动识别文档的编码,需要修改可以在右下角选择。但有一不方便的地方是即使修改过一次打开的编码,下次打开时依然会默认UTF-8打开,每次只能手动修改。
同理,VS Code默认Tab键为4个(半角)空格,有一些编辑器的默认Tab为2个空格。可以选择使用制表符作为Tab键输入以及更改Tab长度。同时也可以将文档中现有的空格和制表符相互转换,对缩进格式十分严格的在下来说这是十分实用的功能。
作为最初在Windows上的编辑器,VS Code的默认换行符自然是Windows/DOS的CRLF(回车换行)。自然,除非使用系统自带的Notepad打开文件或者是远古时期的编译器,大部分现代的文本编辑器都能正确识别CRLF和LF的文档,其实不用过于纠结使用何种换行符。
设置
VS Code使用JSON进行设置,熟悉JSON语法可以很快上手。当然,其实没有接触过JSON也能很容易地进行设置,因为VS Code已经写好了详细的中文注释,其实需要修改的设置也并没有那么多,大部分保持默认即可。其中,字体方面在下比较推荐Consolas,VS Code支持设置多个字体,当前一字体没有某一字符时会自动Fallback至下一字体,所以可以如下设置Consolas + 思源黑体。当然对「Courier New」「Lucida Console」「Source Code Pro / Source Han Code JP」有特别喜好的也可以设置。
"editor.fontFamily": "Consolas, 思源黑体 Regular"
等宽字体大多没有中文字符集,对于不支持多个字体的编辑器,比较好的选择是Windows注册表的fontlink。或者是「Microsoft Yahei Mono」和「Inziu Iosevka」字体。Consolas的优势在于意大利体,斜体下别有韵味,Microsoft Yahei Mono虽然是将Consolas和微软雅黑拼合,但是并没有Consolas的意大利体;而Inziu Iosevka则是仅有的中英文混排可以严格对齐的字体。
安装插件后,附加的设置选项会添加在默认设置的下面(当然可能就没有注释了)。按照插件页面的说明也能方便地进行设置。比如LaTeX Workshop建立XeLaTeX的输出设置如下。
"latex-workshop.latex.toolchain": [ { "command": "xelatex", "args": [ "-synctex=1", "-interaction=nonstopmode", "-file-line-error", "%DOC%" ] } ]
另外,设置一个顺眼的颜色主题和图标主题是十分重要的。在扩展中可以搜索颜色主题和图标主题,比如著名的Monokai样式。Monokai相比默认的Visual Studio样式,对各种关键词的高亮要丰富得多,同时深色主题看着要比亮色主题舒服很多。GitHub样式也是一个不错的主题。而图标主题Material样式风格统一,覆盖的文件类型也比较全面。值得一提的是Visual Basic Script(.vbs)格式几乎没有被任何一个图标主题包含,毕竟PowerShell已经能完全取代任何的Windows Shell了吧。
快捷键
众所周知,快捷键是一个文本编辑器是否高端的标识。VS Code可以通过扩展支持Vim, Sublime等编辑器的快捷键。
话虽如此,像在下这么懒的人是不会去记Vim的快捷键的。VS Code默认基本使用的快捷键和大多数微软软件相同,即
- Ctrl + C | Ctrl + C | Ctrl + V ····· 复制 | 剪切 | 粘贴
- Ctrl + Z | Ctrl + Y ············· 撤销 | 恢复
- Ctrl + F | Ctrl + H ············· 搜索 | 替换
- Ctrl + W ···················· 关闭标签页
等。而生成调试的快捷键则与Visual Studio一直,即
- F5 ········· 调试启动
- Ctrl + F5 ···· 非调试启动
- F9 ········· 设置断点
- F10 ········ 单步跳过
- F11 ········ 单步执行
等。VS Code专属的快捷键有可打印的清单,多加使用记忆并不困难。所有命令可以通过Ctrl + Shift + P唤出,包括扩展插件的命令。而设置相关则有两步快捷键,先按下Ctrl + K再按下其他Ctrl组合键完成。
Git & GitHub
首先需要安装Git程序。然后就可以在扩展中安装各种各样的Git插件了。如Git History, Git Blame, Git Lens等等。
要Push至GitHub,自然要先与远程Repository建立关联,建议还是使用Git GUI完成比较方便,自然技术过硬可以直接使用VS Code的控制台完成。之后就能在源代码管理界面完成Commit, Pull, Push, Merge等等操作了。装有插件自然还能可视化Git历史,进一步方便管理。
Debug
在打开文件夹状态下,就可以添加Debug配置。配置合理起见,为每个工程添加独立Debug配置是比较好的。但也可以在一个文件夹下放置所有的Debug配置。
点击添加配置就能建立新的launch.json,有技术的话自然可以自己来写debug配置,到网上找一下别人写好的配置也是没有问题的。下面会在C/C++插件中详细介绍如何配置GDB。
扩展
C/C++
以MinGW的GCC编译器为例。安装后需要手动在系统环境变量PATH中添加MinGW的bin路径,由于PowerShell对环境变量更新问题,最好重启一次。然后就能在VS Code中添加g++生成任务和Debug配置了。
首先在菜单中配置新任务,任务其实就是运行一个程序或在Shell执行指令,同样是JSON格式。示例g++生成任务如下,g++/gcc的参数自行参考gcc文档。当然也可以使用Clang,相比之下gcc的编译错误信息实在是麻烦。Windows平台完整的Visual Studio 2017自然是无敌的~
"version": "2.0.0", "tasks": [ { "taskName": "g++", "command": "g++", //执行的编译器文件g++.exe "args": [ //g++的编译参数 "-g", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}.exe", "-Og", "-static-libgcc", "-static-libstdc++", "-Wall" ], "type": "shell", //在Shell中执行,默认作为进程执行 "group": { //执行组为生成组,且为默认 "kind": "build", "isDefault": true }, "presentation": { //在输出面板显示 "echo": true, "reveal": "always", "focus": false, "panel": "shared" }, "problemMatcher": { //错误信息显示 "owner": "cpp", "fileLocation": ["relative", "${worksapceRoot}"], "pattern": { "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$", //正则匹配 "file": 1, "line": 2, "column": 3, "severity": 4, "message": 5 } } } ]
生成exe后,就能执行gdb来进行debug了。配置如下:
{ "name": "C++ Launch (GDB)", "type": "cppdbg", "request": "launch", "targetArchitecture": "x86", "program": "${fileDirname}/${fileBasenameNoExtension}.exe", //被debug程序 "miDebuggerPath": "C:/MinGW/bin/gdb.exe", //gdb路径 "args": [ //给gdb的参数 ], "stopAtEntry": false, "cwd": "${workspaceRoot}", //被debug程序的工作路径 "externalConsole": true, //调用外部控制台 "preLaunchTask": "g++" //先执行g++任务生成exe },
LaTeX Workshop
首先需要安装TeX发行版,推荐TeX Live,CTeX目前已经很久没有更新了。对于TeX的各种配置,如pdfLaTeX, BibLaTeX, XeLaTeX以及CJK中文字体等的问题属于TeX知识,在这里就不说了。对于基本使用,只要选择一个满足自己需求的包即可,使用XeLaTeX可以参考上文中的设置。在TeX发行版中安装了chktex还可以打开语法检查功能。
Markdown Preview Enhanced
相较于其他Markdown预览插件,Markdown Preview Enhanced(MPE)拥有对MathJax/KeTeX的支持,能够在预览中显示LaTeX公式(虽然没有真正的LaTeX那么美观)。可以自定义CSS样式,使输出的Markdown文件更加个性化。并且自带了输出为HTML, pdf等多种格式的功能。当然输出pdf等格式需要安装PhantomJS或PrinceXML等软件,装有Acrobat或者其他pdf创建软件也可以从HTML创建pdf文档。
不太建议安装markdownlint插件检查语法,因为各个Markdown插件间的语法解释都略有不同。比如对于换行,大多数Markdown插件都需要手动在段尾添加才能换行,但MPE就能自动换行。
$\mathrm{\LaTeX}$示例:
$$
\oint_c \vec{H} \cdot \mathrm{d} \vec{l} = \int_s \left( \vec{J_c} + \vec{J_v} +\frac{\partial\vec{D}} {\partial t} \right) \cdot \mathrm{d} \vec{s}
$$
$$
\displaystyle\oint_c \vec{E} \cdot \mathrm{d} \vec{l} =
-\int_s \frac{\partial\vec{B}}{\partial t} \cdot \vec{s}
$$
$$
\oint_s \vec{D} \cdot \mathrm{d} \vec{s} =
\int_V \rho \mathrm{d} V
$$
$$
\oint_s \vec{B} \cdot \mathrm{d} \vec{s} = 0
$$
$$
\nabla \times \vec{H} = \vec{J} + \frac{\partial\vec{D}}{\partial t}
$$
$$
\nabla \times \vec{E} = -\frac{\partial\vec{B}}{\partial t}
$$
$$
\nabla \cdot \vec{D} = \rho
$$
$$
\nabla \cdot \vec{B} = 0
$$
Auto-Open Markdown Preview
相比MPE更为轻便,自带的样式也比较美观,不需要自己来写CSS。自动弹出挺方便,但有的时候不想预览的时候也挺烦的。在语法上和MPE有部分区别,建议采用最为稳妥的语法规则,避免问题。