Git
版本控制 · Git · 协作开发
记录改动、分支和协作的基础工具,写代码几乎都会用到。
正在打开工具详情…
写脚本、网页和多数语言都能先用它,扩展多、启动快。
需要一个编辑器覆盖多种语言,并且愿意装扩展。
只改几行配置,或不想维护扩展;已经在用完整 IDE 工作流也可以不换。
Visual Studio Code 是一个跨平台的代码编辑器,Windows、macOS、Linux 都有,内核是 Electron。它的定位很明确:不追求开箱即用的完整 IDE,而是把「装扩展」当成主要的扩展手段。写脚本、改配置、前端页面,多数语言的工作流都能靠官方或社区扩展补齐到够用,启动比重型 IDE 快,这是它被广泛采用的原因。
调试与终端的整合是它区别于纯文本编辑器的地方。装对应语言扩展后可以直接在编辑器里设断点、单步、看变量,不必切回命令行;内置终端省掉一个窗口;Git 面板把 diff、暂存、提交做成了可视化操作,但底层仍是 Git 命令,概念没变。设置分成用户、工作区、语言三层 JSON,后者优先级高,这个覆盖顺序是配置不生效时第一个要查的地方。
有两个常见误解要拆开。第一,MIT 许可证只覆盖源码,微软官方的发行版在源码之外还带商标条款、一份专有的遥测实现和连接到自家扩展市场的默认配置;介意这些的话可以用 VSCodium,它是去掉商标与遥测的同源构建,扩展市场换成 Open VSX。第二,它基于 Electron,同样功能下内存占用高于原生编辑器,开很大的文件或大量项目时会感觉到,这与它快启动的优点是同一枚硬币的两面。
许可证为 MIT,源码在 GitHub 的 microsoft/vscode,星数近二十万,是目前最活跃的编辑器项目之一。安装包只从 code.visualstudio.com 下载,第三方「绿色修改版」既不是官方构建,也可能夹带别的东西。
上手步骤之外的具体做法:常见场景怎么配、命令怎么写、报错怎么处理。
以「配置优先级」为主线,说明 VS Code 的用户设置、工作区设置与语言特定设置如何互相覆盖,并给出排查设置不生效的方法。
VS Code 的配置是一个 JSON 文件。命令行面板(Ctrl+Shift+P)里输入 Preferences: Open User Settings (JSON) 直接打开用户设置。
| 范围 | 位置 |
|---|---|
| 用户设置 | Windows %APPDATA%\Code\User\settings.json |
| 用户设置 | macOS $HOME/Library/Application Support/Code/User/settings.json |
| 用户设置 | Linux $HOME/.config/Code/User/settings.json |
| 工作区设置 | 项目根目录下的 .vscode/settings.json |
工作区设置会跟着 Git 一起提交,所以它天然是团队共享的——改之前先确认这个键该不该让全项目都吃到。
这是最容易搞错的部分。后面的范围覆盖前面的:
最关键的一条:语言特定设置永远覆盖非语言特定设置,哪怕非语言特定设置的范围更窄。 也就是说,用户设置里的 "[python]" 块会压过工作区设置里的普通 "editor.tabSize"。写 "[python]": { "editor.formatOnSave": true } 时要意识到这一层。
语言块可以合并:"[javascript][typescript]" 同时对两种语言生效。但合并时按完整语言串比较,"[typescript][javascript]" 的工作区设置盖不住 "[javascript]" 的用户设置——顺序不同就是不同的键。
这一点很少有人注意,但它解释了「我明明改了却只生效一半」:
workbench.colorCustomizations 的行为:用户设置改了背景色,工作区设置改了前景色,最后两个都在,同名键才由工作区赢。所以「换了主题颜色只变了一半」通常不是 bug,是合并语义本该如此。
设置没生效时按这个顺序查:
@modified 过滤。它只列出值与默认值不同、或在对应 JSON 里被显式写过的设置项——你改过什么一目了然。settings.json 里带注释和尾逗号是合法的(JSONC),但多一个逗号或少一个括号会导致整个文件写不进去,VS Code 只报一句 Unable to write settings. 加上几个红波浪线。实在乱了就把 {} 里清空,立刻回到默认值。
设置项的取值是强类型的,写错类型不会生效:
json{
"files.autoSave": "afterDelay",
"editor.minimap.enabled": true,
"files.autoSaveDelay": 1000,
"editor.rulers": [80, 120],
"search.exclude": { "**/node_modules": true }
}"files.autoSave": "afterDelay" 是字符串,"editor.minimap.enabled": true 是布尔值。把布尔值写成字符串 "true" 是常见错误。settings.json 里有 IntelliSense,输入时会列出合法取值。
同一需求下可以先试这些,尤其是不想买商业许可的时候。
版本控制 · Git · 协作开发
记录改动、分支和协作的基础工具,写代码几乎都会用到。