必须安装vscode-ejs-language-service插件并重载窗口,手动切换语言模式为ejs;配置"emmet.includelanguages": {"ejs": "html"}启用html补全;禁用eslint校验,配合prettier的"prettier.documentselectors": ["*/.ejs"]实现安全格式化。

VS Code 默认不识别 .ejs 文件的 HTML 结构,也不理解 和 这类语法——这不是插件没装全,是语言服务根本没接管。必须同时满足「语言模式正确」+「Emmet 显式启用」+「格式化不破坏逻辑」三个条件,缺一不可。
为什么 .ejs 文件里 <div> 不补全、<code> 不高亮<p>VS Code 打开 <code>.ejs 文件时,默认识别为 Plain Text 或强行当 JavaScript 处理,导致:<div> 标签不被解析、<code>Emmet 不生效、auto-close-tag 失效、双击选中标签对失败。这不是你漏装插件,是底层语言服务没启动。
- 只改
"files.associations": {".ejs": "html"} → 恢复 HTML 补全,但 块全变灰色,无语法高亮
- 只装
EJS Language Support 插件 → 有 高亮,但 <div> 仍不识别、Emmet 不触发<li>真正起作用的是 <code>vscode-ejs-language-service(作者 DigitalBrainstem),它能桥接语言服务与格式化器
如何让 <div> 补全 + <code> 高亮共存
必须两步并行:先让 VS Code 认出这是 EJS,再告诉它“这里面的 HTML 结构也要按 HTML 规则处理”。
Json Schema Toolkit
使用 JSON Schema 验证 JSON 数据,从示例 JSON 生成 schema,并将其转换为 TypeScript 接口、Python 数据类或 Markdown 文档。
下载
- 安装
vscode-ejs-language-service 插件(别选名字类似但作者不是 DigitalBrainstem 的)
- 安装后执行
Developer: Reload Window(快捷键 Ctrl+Shift+P / Cmd+Shift+P)
- 重载后点击右下角语言模式,手动选
EJS;若没出现该选项,说明插件未生效或缓存未清
- 在
settings.json 中添加:"emmet.includeLanguages": {"ejs": "html"}
- 确保
"emmet.triggerExpansionOnTab": true 已开启(默认通常已开)
Prettier 格式化 .ejs 文件时缩进错乱怎么办
VS Code 内置 HTML 格式化器会把 当成普通标签缩进,导致换行后模板逻辑错位甚至运行时报错。必须用 Prettier + vscode-ejs-language-service 协同工作。
- 确保已安装
Prettier - Code formatter(作者 esbenp)
- 在
settings.json 中添加:"prettier.documentSelectors": ["**/*.ejs"]
(注意不是 "**/.ejs")
- 开启保存时格式化:
"editor.formatOnSave": true
- 禁用 ESLint 对
.ejs 文件的校验——删掉 "eslint.validate": ["html", "ejs"] 这类配置,ESLint 解析不了混合语法
容易被忽略的关键点
很多人卡在“点了右下角语言模式却找不到 EJS 选项”,其实是因为插件没重载或缓存残留;还有人配了 emmet.includeLanguages 却没重启编辑器,导致设置不生效。最隐蔽的问题是:Prettier 的 documentSelectors 写错路径(比如漏了 * 或多加斜杠),结果格式化始终不触发——这种问题不会报错,只会让你以为“配置没用”。
"files.associations": {".ejs": "html"} → 恢复 HTML 补全,但 块全变灰色,无语法高亮EJS Language Support 插件 → 有 高亮,但 <div> 仍不识别、Emmet 不触发<li>真正起作用的是 <code>vscode-ejs-language-service(作者 DigitalBrainstem),它能桥接语言服务与格式化器如何让 <div> 补全 + <code> 高亮共存
必须两步并行:先让 VS Code 认出这是 EJS,再告诉它“这里面的 HTML 结构也要按 HTML 规则处理”。
使用 JSON Schema 验证 JSON 数据,从示例 JSON 生成 schema,并将其转换为 TypeScript 接口、Python 数据类或 Markdown 文档。
- 安装
vscode-ejs-language-service插件(别选名字类似但作者不是 DigitalBrainstem 的) - 安装后执行
Developer: Reload Window(快捷键Ctrl+Shift+P/Cmd+Shift+P) - 重载后点击右下角语言模式,手动选
EJS;若没出现该选项,说明插件未生效或缓存未清 - 在
settings.json中添加:"emmet.includeLanguages": {"ejs": "html"} - 确保
"emmet.triggerExpansionOnTab": true已开启(默认通常已开)
Prettier 格式化 .ejs 文件时缩进错乱怎么办
VS Code 内置 HTML 格式化器会把 当成普通标签缩进,导致换行后模板逻辑错位甚至运行时报错。必须用 Prettier + vscode-ejs-language-service 协同工作。
- 确保已安装
Prettier - Code formatter(作者 esbenp) - 在
settings.json中添加:"prettier.documentSelectors": ["**/*.ejs"]
(注意不是"**/.ejs") - 开启保存时格式化:
"editor.formatOnSave": true
- 禁用 ESLint 对
.ejs文件的校验——删掉"eslint.validate": ["html", "ejs"]这类配置,ESLint 解析不了混合语法
容易被忽略的关键点
很多人卡在“点了右下角语言模式却找不到 EJS 选项”,其实是因为插件没重载或缓存残留;还有人配了 emmet.includeLanguages 却没重启编辑器,导致设置不生效。最隐蔽的问题是:Prettier 的 documentSelectors 写错路径(比如漏了 * 或多加斜杠),结果格式化始终不触发——这种问题不会报错,只会让你以为“配置没用”。










