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** 的变化。
- 打开 Cursor 设置 (
Cmd + ,)。 - 搜索
files.watcherExclude。 - 点击 Add Pattern,添加
**/node_modules/**(如果还没有的话)。 - 更好的做法:在你的工作区设置文件(
.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 扩展:不要尝试去构建或导入这些文件夹。
- 在设置中搜索
java.import.exclusions。 - 添加你的前端项目文件夹名称,或者通用的
**/node_modules/**。
1"java.import.exclusions": [
2 "**/node_modules/**",
3 "**/dist/**",
4 "**/前端项目文件夹名/**" // 如果你的前端代码不需要任何Java支持,可以直接排除整个前端文件夹
5]
第三步:清理已损坏的缓存 (必须执行)
因为之前的扫描可能已经把错误的缓存写入了磁盘,即使你改了设置,Java 进程可能读取旧缓存继续卡死。
- 按
Cmd + Shift + P打开命令面板。 - 输入并执行:
Java: Clean Java Language Server Workspace - 重启 Cursor。
进阶建议:多根工作区的最佳实践
既然你是“后端 Java + 前端 Vue”的混合开发,建议你创建一个 **.code-workspace** 文件来保存这个工作区配置,而不是仅仅依赖全局设置。
- 在 Cursor 中,点击菜单栏 File -> Save Workspace As…。
- 保存为一个文件,例如
full-stack.code-workspace。 - 编辑这个文件,专门针对这个混合项目优化 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)。当你 单击资源管理器中的文件时,它会以斜体打开在一个临时标签(预览标签)中;而之后再单击另一个文件,该临时标签就会被 覆盖,切换到新的文件内容。这就是你点击一个文件再点另一个文件时,前一个被“替换”的表现。
直接操作:左边双击文件打开即为编辑模式,单击为预览模式
方法一:关闭预览模式,单击即打开新标签
- 打开设置:文件 → 首选项 → 设置(Windows/Linux),或 Code → Preferences → Settings(Mac)。
- 在搜索框输入 enablePreview。
- 找到 Workbench → Editor: Enable Preview,取消勾选。
- (可选)若也希望关闭从 “快速打开(Ctrl+P)” 中的预览,可将 Workbench → Editor: Enable Preview From Quick Open 同样取消勾选。
- 设置生效后,单击文件会直接打开为新标签,不再复用预览标签
方法二:继续使用预览模式,改为双击打开“常驻标签”
如果你希望保持默认行为,但是有时想让某些文件保留标签,可以:
- 双击文件(在资源管理器或标签栏)将它变为常驻标签。
- 或者在打开的预览标签上右键选择 “保持打开(Keep Open)”。
- 也可以通过编辑文件内容(然后撤销)来自动将其转为常驻标签
VSCode 打开多个项目
方法一:使用“多根工作区”(Multi-root Workspaces)
这是官方推荐的方法,能在一个窗口中管理多个独立项目:
- 打开一个项目文件夹。
- 点击菜单栏 File → Add Folder to Workspace…,选择要添加的第二个项目文件夹。
- 重复以上步骤,可添加多个项目,文件资源管理器会显示每个项目为独立根目录。
- 保存当前配置为 .code‑workspace 文件:点击 File → Save Workspace As…,下次直接打开该工作区即恢复项目组合。
方法二:打开多个 VS Code 窗口
如果你希望每个项目都在独立窗口下运行,也可这样操作:
- 点 File → New Window 打开新的 VS Code 实例。
- 在新窗口中打开你想要管理的其他项目。
- 支持独立窗口的快捷切换,如 macOS 可使用触控板滑动切换。
VSCode 有时快捷键无法打开终端
因为在中文输入法下,英文 ``` 映射 code 为中文 ·
- 打开 VS Code 设置(Ctrl+,)。
- 搜索 keyboard.dispatch。
- 将其设置为 “keyCode”(默认是 “code” 或者 undefined)。
1. code
- 指的是 硬件扫描码,即键盘的物理位置对应的标识(如 Backquote, KeyA, Slash 等),不会随着键盘布局或语言改变而变化。
- VS Code 默认使用这类信息来识别快捷键,适用于统一全球键盘布局。
2. keyCode
- 对应的是 操作系统或浏览器标准定的虚拟键码(通常是数字),通常代表按键的功能或输出字符。
- 当启用 keyboard.dispatch: “keyCode” 时,VS Code 直接使用 OS 提供的 keyCode,忽略硬件扫描码或布局变化。特别适用于中文输入法、远程桌面或虚拟环境中按键被重新映射的情况
VSCode gradle 项目无法刷新依赖
方法一:使用命令行刷新依赖
- 打开 VS Code 的 终端 (快捷键 Ctrl+`) 并执行:
1./gradlew build --refresh-dependencies
方法二:使用 Gradle Wrapper 执行 IDEA 类似的 Sync
如果你安装了 Gradle for Java 扩展:
- 在左侧的 Gradle Tasks 面板中找到你的项目。
- 展开 Tasks → build,执行 build 或者 clean → build。
- 这会触发依赖下载和刷新。
方法三:重新导入项目
有时候 VS Code 的语言服务(比如 Java Extension Pack)不会立即刷新:
- 打开命令面板(Ctrl+Shift+P 或 Cmd+Shift+P)并输入执行:
1Java: Clean Java Language Server Workspace
- 重新加载项目,依赖会重新解析。