Header: vscode-brand

VSCode 与如何配置 VSCode

2021-02-14

这是一篇(尽量)新手向的文章,以 VSCode, Python, JavaScript (Vue) 为例,介绍编辑器的功能和配置。

 

鉴于部分同学不会配置 VSCode,也不知道一个编辑器应当怎么配置,导致代码不美观,包含大量低级错误等问题,故有必要进行一些说明。当然,也没说必须选择 VSCode,大可选择 JetBrains 那一套。但是由于笔者平日折腾跨越的语言、领域较多(且前端居多),VSCode 是更好的选择,故只对 VSCode 有少量研究。

简单而言,一个代码编辑器应当具有的功能,即区别于自带记事本等的特性包括:

为什么选择 VSCode #

可参考 https://code.visualstudio.com/Docs/editor/whyvscode

基于插件 (Extension) 的模式 #

与 JetBrains (IntelliJ IDEA, PyCharm, WebStorm, PhpStorm, CLion......) 等编辑器不同的是,VSCode 是为了支持各种语言而生的,只要安装对应的插件,但是支持程度得看相应插件的水平了。与 VSCode 相类似的还有 Sublime Text, Vim, Atom, Emacs 等。

比如,Python 就有 Python 插件(对,就叫这名),Vue 就有 Vetur,Docker 就有 Docker...

当然,一些语言 (C / C++, JavaScript, JSON, CSS...) 的插件已经随 VSCode 默认安装,就像手机出厂的时候就不是一块板砖。具体列表可以在侧边栏扩展 (Extensions) 标签页下,输入 @builtin 查看。如果自带的插件功能上没有欠缺的话,就不必另行安装插件。

大家的选择 #

语言来源第一名第二名第三名第四名第五名
PythonPython Developers Survey 2021VSCode
35%
PyCharm
31%
Vim
7%
Jupyter NoteBook
3%
Sublime Text
3%
JavaScriptState of JS 2020VSCode
86%
Vim
20%
WebStorm
18.5%
SublimeText
12.3%
Notepad++
8.2%
GoGo Developer Survey 2021VSCode
42%
GoLand / IntelliJ
37%
Vim
13%
Others
5%
Emacs
3%
C++The State of Developer Ecosystem in 2021VSCode
28%
Clion
26%
Visual Studio
24%
Vim
6%
QtCreator
3%
JavaThe State of Developer Ecosystem in 2021IntelliJ IDEA
75%
Eclipse
11%
Android Studio
6%
VSCode
4%
NetBeans
2%
RustThe State of Developer Ecosystem in 2021VSCode
40%
CLion
24%
IntelliJ IDEA
19%
Vim
8%
Sublime
2%

注:JetBrains 主导的调查是不是存在护犊子的情况就不得而知了

其实在这些调查结果中也可以看到,JetBrains 的编辑器也不止是可以支持一种语言,但相比 VSCode 而言还是更加专一门。

所以说在这些流行的语言中,尤其是新兴的语言中,VSCode 地位还是很靠前的。

上手 VSCode #

菜单 Help -> Interactive Playground

菜单 Help -> Tips and Tricks

高颜值 / 好看的主题 (Awesome Theme) #

主题 (Theme) 一般是一种配色方案。在 VSCode 下,主题可以是传统意义上的配色主题,也可指图标主题,即 VSCode 中涉及文件的视图,文件(夹)名前面的图标。

已经安装的主题可以通过快捷键 Ctrl + K Ctrl + T 查看和切换。同时,在扩展 (Extensions) 标签页下,输入 @category:"themes" 可以查找所有的主题。而 https://vscodethemes.com/ 也提供了不同主题的预览,更加便于发现好主题。

此处安利 One Dark

语法高亮 (Syntax Highlighting) #

谁也不想打开一段代码像记事本一样通篇一个颜色,不分主次、不分类别,看上去很吃力。

要启用也很简单,只要安装了对应语言 / 框架的插件即可。有的语言甚至默认就支持。语法高亮的实现原理上也很简单,直接正则表达式匹配就能有不错的结果,当然也可以通过各种分析对变量、函数、类进行不同的高亮。

当然也有一些专做语法高亮的插件,比如 Rainbow CSV, MagicPython 等等。

需要注意的是语法高亮只负责标记不同部分,这些部分显示什么颜色还是要看主题。

智能补全 (Auto Completion, IntelliSense) #

普通的变量名补全,可以让你少打几个字,让编辑器完成剩下的,不仅可以加快速度,让你从琐碎的劳动中解脱出来,还可以让你不再因为打字麻烦而不规范地命名变量和函数名称。

就像使用拼音输入法,用久了之后谁也不想每个字都拼出来才能把词语打出吧。手机上的输入法还会根据前面的输入建议接下来的词语,或者调整下一个拼音中不同候选词的位置,(不管人工智能还是人工智障,总之)提供了很大的便利。

同时,在变量和函数的补全中,也省去了许多(不是全部)查阅文档的工作,也避免了变量名和函数名打错的情况。比如在码了多年 Python 和多年 JavaScript 之后,分不清 .startsWith, .starts_with, .startswith, 自动补全可以省去因记不清每次都上网查文档的烦恼。又比如有的时候 team work,由于习惯一直以为队友打的是过去式 created_blahblah, 但是实际上是 create_blahblah, 这时使用智能补全可以很好的避免变量误写。在下面的代码检查中可以看到另一种避免方式,但是它对一些 dynamic 的语言, implicit 的写法,(比如 SQLAlchemy,)也几乎束手无策。

与语法高亮类似,补全功能也基本都集成在插件当中。一般情况下在你输入的时候就会出现提示,如果不出现,可以通过 Ctrl + Space 唤出。实现上一般是通过后台开一个语言服务器 (Language Server), 通过协议 (Language Server Protocol, LSP) 与编辑器前端通讯,由服务器负责分析代码,给出建议。比如 Python 的语言服务器有 Jedi, Pylance, 而 JavaScript / TypeScript 有 TSServer, 虽然 Vue 只是一个框架,也有 VLS (Vue Language Server).

注意对于 Python,如果要对虚拟环境里的库进行补全,则必须要配置 Python 的解释器路径。Ctrl + Shift + P 显示命令菜单,输入 Python: Select Interpreter 设置正确的解释器路径。

代码格式化 (Formatting) #

在解释格式化之前,应当解释什么是代码风格 (Code Style). 代码风格就是代码看起来长什么样,拆开来说,何时使用空格,何时换行,如何缩进,左大括号是否另起一行,有多种写法时选择哪一种,等等。那么代码格式化,就是将每个人写出来的代码规范为统一的格式。这在团队合作中显得更加重要,谁也不想代码乱成一锅粥,这个函数是这个风格,那个函数又是另外一个风格。

代码格式化的任务往往不是插件本身完成的,插件只是和现有的代码格式化工具 (Formatter) 集成。每个语言都有自己的格式化工具,比如 Python 的 Black, YAPF, 和 JavaScript 的 Prettier. 使用时只需快捷键 Shift + Alt + F 或右键菜单 -> Format Document( With...)

代码检查 (Linting) #

代码检查一大功能就是在不运行你的代码的情况下,分析代码中存在的问题,或不符合最佳实践 (Best Practice) 的地方。与代码格式化类似,插件只是和现有的代码检查器 (Linter) 集成,比如根据 linter 的输出,在编辑器中有问题的地方显示红色黄色下划线。

但是有的代码检查器又兼具检查代码风格甚至代码格式化的功能,比如 Python 的 Flake8,JavaScript 的 ESLint 等。但是相比于专门的 formatter 来说,linter 的格式要求与格式化能力往往要弱一些。

编辑器的代码检查功能需要额外配置。比如 Python 需要 Ctrl + Shift + P 显示所有命令,输入 Python: Select Linter 选择 linter。对于 JavaScript 就要简单得多,在项目使用并且配置好 ESLint 的前提下,安装 ESLint 插件就可以进行检查。

以 ESLint 为例, getter-return (enforce return statements in getters) 就是发现错误,eqeqeq (require the use of === and !==) 就是最佳实践,no-mixed-spaces-and-tabs(disallow mixed spaces and tabs for indentation) 就是对格式的要求。

自动缩进 (Auto Indentation) #

代码没有缩进就没有层次。自动缩进顾名思义就是减少手动调整缩进的繁琐。自动缩进对于 Python 来说比较重要。当然 Python 是对缩进敏感的,基础的自动缩进已经由 Python 插件完成了。但是根据 PEP8 的风格规范,Python 断行、括号内换行有特殊的规范,而 Python 插件对比如括号内回车换行的自动缩进并没有很好的支持,这时需要插件 Python Indent 的帮忙。

快捷键 (Keyboard Shortcut) #

当前设置的快捷键可以通过 Ctrl + K Ctrl + S 查看。同时,VSCode 还很贴心的准备了快捷键的 Cheatsheet,一页 PDF:Ctrl + K Ctrl + R ,或菜单 Help -> Keyboard Shortcur Reference 即可打开。

同时,安装 keymap 类别的扩展可以在 VSCode 上轻松使用其他编辑器的快捷键。

代码片段 (Code Snippets) #

写代码时有很多常用的、模板式的语句,比如 JavaScript 的:

try {
  // ...
} catch (error) {
  // ...
}
js

代码片段的功能就是帮你打完这些模板式的语句(块)。仍然以 try...catch 为例。在 JavaScript 代码中,输入 try,则会自动提示 trycatch,如果不出现,可以通过 Ctrl + Space 唤出。这时在建议菜单中选中 trycatch (点击、回车或 Tab),就会补全。具体可自行尝试。


其他的以后再说吧(逃

👍
1
Leave your comments and reactions on GitHub