vscode启动时自动打开项目需配置window.restorewindows为all、files.hotexit为onexit、workbench.startupeditor为lastactiveeditor,并配合code -r参数或.code-workspace文件使用,三者缺一不可。

code命令不带参数启动,根本不受GUI设置控制
VSCode的GUI设置(比如“窗口→启动时恢复窗口”)只是个摆设,真正起效的是你敲的code命令里带的参数。双击图标、从Dock或开始菜单启动,背后其实也是调用code命令——只不过系统帮你加了默认参数,你没看见而已。
这意味着:你在设置界面里把window.restoreWindows设成all,但如果终端里只敲code不带任何参数,它可能还是空白启动;反过来,哪怕GUI设的是none,只要加了--no-reopen-last,就一定不恢复。
- 所有GUI设置都可被命令行参数覆盖,且后者优先级更高
- 第三方启动器(如Alfred、PowerToys Run)可能悄悄加了
--reuse-window,导致行为和你预期不符 - 想验证当前启动用了哪些参数?打开VSCode →
Ctrl+Shift+P→ 输入Developer: Toggle Developer Tools→ 控制台里执行process.argv,看输出数组
--folder-uri必须用file://绝对路径,~和./都不认
--folder-uri不是普通路径参数,它严格要求URI格式。写成code --folder-uri ~/project或code --folder-uri ./my-app会直接失败,VSCode会报错“Unable to open ‘…’: File not found.”
- 正确写法是
code --folder-uri file:///Users/xxx/project(macOS/Linux)或code --folder-uri file:///C:/Users/xxx/project(Windows) - Windows下推荐用正斜杠
/,反斜杠\容易被shell转义,尤其在CMD中 - 路径含空格或中文?必须整个URI用双引号包住:
code --folder-uri "file:///C:/My Project" - 最稳做法:先
cd进目标目录,再code --folder-uri $(pwd -P | sed 's|^|file://|')(macOS/Linux),或PowerShell里用code --folder-uri "file://$(Get-Location).Path.Replace('\','/')"
--user-data-dir和--extensions-dir不是可选,而是多实例隔离刚需
默认情况下,所有VSCode窗口共享同一套用户数据(设置、扩展状态、历史记录)。当你想测试一个新扩展是否引发崩溃,或给Python 3.9项目配一套独立插件,而另一个项目用3.12——不加隔离,配置会互相污染,甚至导致扩展静默失效。
- 必须同时指定两个参数:
code --user-data-dir /tmp/vscode-test --extensions-dir /tmp/vscode-test-ext - 目录不能是已存在的VSCode用户数据目录(例如
~/Library/Application Support/Code),否则VSCode会直接复用旧状态,完全失去隔离意义 - macOS上/tmp下目录重启后会被清空,适合临时调试;长期用建议建在
~/vscode-isolated这类固定路径 - Windows下路径用正斜杠更可靠:
code --user-data-dir C:/vscode-dev --extensions-dir C:/vscode-dev-ext
launch.json里的args只对F5生效,“Debug Python File”按钮默认忽略
这是Python调试最常踩的坑:你在.vscode/launch.json里写了"args": ["--debug", "--port", "8000"],但点右上角虫子图标或按F5都没问题,唯独右键“Debug Python File”按钮传不了参——因为它走的是另一套默认逻辑。
- 要让右键按钮也带参,必须在对应配置里加
"purpose": ["debug-in-terminal"],且配置名必须是Python: Current File (Integrated Terminal) -
args字段值必须是字符串数组,每个参数单独一项:["--verbose", "--input", "data.txt"],不能写成["--verbose --input data.txt"] - Spring Boot等Java项目同理:
args只在F5启动时注入,图形化“Run Spring Boot App”按钮不读该字段,得靠launchSettings.json或改用Maven插件集成
真正麻烦的从来不是参数记不住,而是你以为加了参数就生效了,结果它被GUI设置覆盖、被启动器劫持、或压根没走对那条代码路径。每次不确定时,先process.argv看一眼实际传了什么,比翻文档快十倍。











