‹ 返回笔记 Esc·

Visual Studio Code 问题与修复

VSCode 配置 java 版本和 gradle 或者 control shift p 搜索 java 和 gradle --- 多根工作区保存 假设你有一个前端项目和一个后端项目,它们分别在不同的…

VSCode 配置 java 版本和 gradle

1{
2    "java.compile.nullAnalysis.mode": "automatic",
3    "java.configuration.updateBuildConfiguration": "interactive",
4    "java.jdt.ls.java.home": "/Users/zailiang/Library/Java/JavaVirtualMachines/corretto-17.0.16/Contents/Home",
5    "java.import.gradle.java.home": "/Users/zailiang/Library/Java/JavaVirtualMachines/corretto-17.0.16/Contents/Home",
6    "gradle.nestedProjects": true,
7    "gradle.autoDetect": "on",
8}

或者 control shift p 搜索 java 和 gradle


多根工作区保存

假设你有一个前端项目和一个后端项目,它们分别在不同的目录:

1~/projects/frontend
2~/projects/backend
  • 在 VSCode 里先打开 frontend;
  • 再通过 Add Folder to Workspace 加上 backend;
  • 然后执行 Save Workspace As…,保存为 projects.code-workspace;

这样以后打开这个文件,就能一次性载入这两个文件夹。

Recent projects 中 项目名称后带有 (Workspace) 就是打开工作区

也可以通过 File - Open Workspace from File

此工作区重命名只要修改 .code-workspace 的名称就行了


Java LSP 索引到多根工作区 node

  • 全量扫描机制:Java 语言服务(JLS)启动时,默认会尝试扫描工作区内的文件以确定项目结构。
  • 文件监控(File Watcher)过载:Java 扩展需要监控文件变更(以便热重载或重新编译)。Vue3 项目的 node_modules 里通常包含成千上万个小文件。即使你没有打开 Java 文件,只要这些文件在工作区里,Cursor 的文件监控服务就会把这些文件的状态报告给 Java 进程。
  • 资源耗尽:Java 进程收到成千上万个文件路径,试图分析它们是否包含 Java 代码或类文件。这瞬间耗尽了分配给 Java 进程的 CPU 和内存,导致它陷入死循环(Not Responding),进而引发风扇狂转。

解决方案

要解决这个问题,你需要“屏蔽”前端文件夹,让 Java 扩展对它“视而不见”。请按以下步骤操作:

第一步:配置 **files.watcherExclude** (最关键)

这告诉 Cursor 的核心文件监控器:完全不要向任何扩展(包括 Java)报告 **node_modules** 的变化

  1. 打开 Cursor 设置 (Cmd + ,)。
  2. 搜索 files.watcherExclude
  3. 点击 Add Pattern,添加 **/node_modules/** (如果还没有的话)。
  4. 更好的做法:在你的工作区设置文件(.code-workspace 文件)或者用户设置中,直接添加如下
1"files.watcherExclude": {
2    "**/node_modules/**": true,
3    "**/dist/**": true,
4    "**/.git/objects/**": true,
5    "**/build/**": true,
6    "**/.gradle/**": true
7}

第二步:配置 **java.import.exclusions** (Java 专用)

这告诉 Red Hat Java 扩展:不要尝试去构建或导入这些文件夹

  1. 在设置中搜索 java.import.exclusions
  2. 添加你的前端项目文件夹名称,或者通用的 **/node_modules/**
1"java.import.exclusions": [
2    "**/node_modules/**",
3    "**/dist/**",
4    "**/前端项目文件夹名/**"  // 如果你的前端代码不需要任何Java支持,可以直接排除整个前端文件夹
5]

第三步:清理已损坏的缓存 (必须执行)

因为之前的扫描可能已经把错误的缓存写入了磁盘,即使你改了设置,Java 进程可能读取旧缓存继续卡死。

  1. Cmd + Shift + P 打开命令面板。
  2. 输入并执行:Java: Clean Java Language Server Workspace
  3. 重启 Cursor。

进阶建议:多根工作区的最佳实践

既然你是“后端 Java + 前端 Vue”的混合开发,建议你创建一个 **.code-workspace** 文件来保存这个工作区配置,而不是仅仅依赖全局设置。

  1. 在 Cursor 中,点击菜单栏 File -> Save Workspace As…
  2. 保存为一个文件,例如 full-stack.code-workspace
  3. 编辑这个文件,专门针对这个混合项目优化 Java 设置:
1{
2    "folders": [
3        { "path": "nt-rest" },
4        { "path": "ai-vue3" }
5    ],
6    "settings": {
7        // 1. 禁用极其耗费 CPU 的自动空指针分析 (建议改为 manual 或 disabled)
8        "java.compile.nullAnalysis.mode": "disabled",
9
10        // 2. 核心:优化 JVM 参数
11        // - 换掉 ParallelGC,改用对 IDE 更友好的 G1GC
12        // - 增加初始内存,减少内存频繁扩容带来的震荡
13        // - 保留了你添加的禁用了内存映射的参数(对 macOS 很有用)
14        "java.jdt.ls.vmargs": "-Xmx4G -Xms1G -XX:+UseG1GC -XX:+UseStringDeduplication -Dsun.zip.disableMemoryMapping=true -XX:MaxGCPauseMillis=200",
15
16        // 3. 极其重要:必须手动排除前端项目的 node_modules,否则 Java 会尝试扫描它们
17        "files.watcherExclude": {
18            "**/node_modules/**": true,
19            "**/dist/**": true,
20            "**/ai-vue3/**": true
21        },
22        "java.import.exclusions": [
23            "**/node_modules/**",
24            "**/ai-vue3/**"
25        ]
26    }
27}

总结: 只要配置了 **files.watcherExclude** 并屏蔽了 node_modules,你的风扇就会安静下来,Java 进程也不会再因为扫描前端依赖而“未响应”了。


VSCode 的插件 “按需加载”

VS Code 默认只有在你打开对应后缀名的文件时,才会激活该语言的 LSP 插件。例如:

  • 如果你只打开 .py 文件,Java 和 Vue 的 LSP 进程通常不会启动。
  • 只有当你点击了一个 .java.vue 文件,相关的语言服务器才会常驻内存。

在插件中点击 Disable (Workspace) 即可在工作区中禁用不需要的语言 LSP


VSCode 打开文件是覆盖前一个文件

原因是 VS Code 默认启用了所谓的“预览模式”(Preview Mode)。当你 单击资源管理器中的文件时,它会以斜体打开在一个临时标签(预览标签)中;而之后再单击另一个文件,该临时标签就会被 覆盖,切换到新的文件内容。这就是你点击一个文件再点另一个文件时,前一个被“替换”的表现。

直接操作:左边双击文件打开即为编辑模式,单击为预览模式

方法一:关闭预览模式,单击即打开新标签

  1. 打开设置:文件 → 首选项 → 设置(Windows/Linux),或 Code → Preferences → Settings(Mac)。
  2. 在搜索框输入 enablePreview。
  3. 找到 Workbench → Editor: Enable Preview,取消勾选。
  4. (可选)若也希望关闭从 “快速打开(Ctrl+P)” 中的预览,可将 Workbench → Editor: Enable Preview From Quick Open 同样取消勾选。
  5. 设置生效后,单击文件会直接打开为新标签,不再复用预览标签

方法二:继续使用预览模式,改为双击打开“常驻标签”

如果你希望保持默认行为,但是有时想让某些文件保留标签,可以:

  • 双击文件(在资源管理器或标签栏)将它变为常驻标签。
  • 或者在打开的预览标签上右键选择 “保持打开(Keep Open)”。
  • 也可以通过编辑文件内容(然后撤销)来自动将其转为常驻标签

VSCode 打开多个项目

方法一:使用“多根工作区”(Multi-root Workspaces)

这是官方推荐的方法,能在一个窗口中管理多个独立项目:

  1. 打开一个项目文件夹。
  2. 点击菜单栏 File → Add Folder to Workspace…,选择要添加的第二个项目文件夹。
  3. 重复以上步骤,可添加多个项目,文件资源管理器会显示每个项目为独立根目录。
  4. 保存当前配置为 .code‑workspace 文件:点击 File → Save Workspace As…,下次直接打开该工作区即恢复项目组合。

方法二:打开多个 VS Code 窗口

如果你希望每个项目都在独立窗口下运行,也可这样操作:

  1. File → New Window 打开新的 VS Code 实例。
  2. 在新窗口中打开你想要管理的其他项目。
  3. 支持独立窗口的快捷切换,如 macOS 可使用触控板滑动切换。

VSCode 有时快捷键无法打开终端

因为在中文输入法下,英文 ``` 映射 code 为中文 ·

  1. 打开 VS Code 设置(Ctrl+,)。
  2. 搜索 keyboard.dispatch。
  3. 将其设置为 “keyCode”(默认是 “code” 或者 undefined)。

1. code

  • 指的是 硬件扫描码,即键盘的物理位置对应的标识(如 Backquote, KeyA, Slash 等),不会随着键盘布局或语言改变而变化。
  • VS Code 默认使用这类信息来识别快捷键,适用于统一全球键盘布局。

2. keyCode

  • 对应的是 操作系统或浏览器标准定的虚拟键码(通常是数字),通常代表按键的功能或输出字符。
  • 当启用 keyboard.dispatch: “keyCode” 时,VS Code 直接使用 OS 提供的 keyCode,忽略硬件扫描码或布局变化。特别适用于中文输入法、远程桌面或虚拟环境中按键被重新映射的情况

VSCode gradle 项目无法刷新依赖

方法一:使用命令行刷新依赖

  1. 打开 VS Code 的 终端 (快捷键 Ctrl+`) 并执行:
1./gradlew build --refresh-dependencies

方法二:使用 Gradle Wrapper 执行 IDEA 类似的 Sync

如果你安装了 Gradle for Java 扩展:

  1. 在左侧的 Gradle Tasks 面板中找到你的项目。
  2. 展开 Tasks → build,执行 build 或者 clean → build
  3. 这会触发依赖下载和刷新。

方法三:重新导入项目

有时候 VS Code 的语言服务(比如 Java Extension Pack)不会立即刷新:

  1. 打开命令面板(Ctrl+Shift+P 或 Cmd+Shift+P)并输入执行:
1Java: Clean Java Language Server Workspace
  1. 重新加载项目,依赖会重新解析。