emmet是vscode原生html/css编码底层能力,非可选插件;输入div.container按tab无反应最常见原因是语言模式未识别为html等支持类型或tab被prettier等插件劫持。

Emmet 不是用来“辅助编码”的可选功能,它是 VSCode 里真正能改写 HTML/CSS 编码节奏的底层能力——**敲一行缩写,生成结构化代码块,不是补全,是构造**。它不依赖插件,不靠 AI,只靠语法约定和编辑器原生支持。
为什么输入 div.container 按 Tab 没反应?
最常见原因是语言模式没识别对,或者 Tab 触发被其他插件劫持。
- 右下角状态栏看当前语言:必须是
HTML、CSS、SCSS、JavaScript React或Vue,不能是Plain Text或JSON -
Emmet: Trigger Expansion on Tab必须为true(默认开启,但某些工作区配置可能关掉) - Prettier 插件若启用了
Prettier: Tab Key Move Focus,会拦截Tab行为,导致 Emmet 失效 - 在 JSX 文件中,需确认
emmet.includeLanguages包含"javascript": "javascriptreact",否则div.app在.js文件里不会展开
ul>li*5 和 ul>li{$}*5 有什么区别?
前者生成 5 个无内容的 <li>;后者生成带动态编号文本的 <li>1</li> 到 <li>5</li>。$ 是 Emmet 的序号变量,不是占位符。
-
li.item$*3→ 3 个 class 带编号:<li class="item1"><li class="item2"><li class="item3"> -
td{Cell $@3}*2→ 从 3 开始编号:<td>Cell 3</td><td>Cell 4</td> -
img[src="pic$$.jpg"]*2→ 补零格式:pic01.jpg、pic02.jpg - 注意:
$只在*重复操作中生效,单独写div$不会变div1
在 CSS 中 m10、w100、dib 这些缩写怎么查全?
Emmet 的 CSS 缩写不靠记忆,靠上下文触发 —— 输入任意前缀后按 Ctrl+E(Windows/Linux)或 Cmd+E(Mac),它会强制展开为完整属性,同时显示匹配项提示。
-
m10→margin: 10px;,m10-20→margin: 10px 20px;,m10-20-30-40→ 四值顺时针 -
w100默认是width: 100px;,但加单位更稳:w100%→width: 100%;,w10rem→width: 10rem; -
dib→display: inline-block;,db→display: block;,df→display: flex; - 大小写不敏感,
Bgc#fff和bgc#fff都可触发background-color: #fff;
自定义缩写 vue-comp 或 api-get 怎么配才真正生效?
别往 emmet.snippets 里硬塞 JSON 对象——VSCode 当前稳定版(2026 年)优先读取 emmet.variables 和用户代码片段,且后者优先级更高、调试更直观。
- 推荐路径:打开命令面板
Cmd+Shift+P→ 输入Preferences: Configure User Snippets→ 选html.json(通用)或vue.json(仅 Vue) - 写法示例(
html.json):"vue-comp": { "prefix": "vc", "body": [ "<template>", " <div class='\"${1:component-name}\"'>", " $2", " </div>", "</template>", "", "<script>", "export default {", " name: '${1:component-name}'", "}", "</script>" ], "description": "Vue 2.x 单文件组件骨架" } - 配完保存,新开一个
.vue文件,在<template></template>区域输入vc+Tab,立刻生效 - 如果用
emmet.variables,只能替换字符串,不能生成多行结构,适合简单文本如"api": "axios.get('/api/${1}')"
Emmet 就从“好像有用”变成“离不了”。











