Tab无反应是因为未点击Define设置适用语言范围;$END$和$SELECTION$语义不同不可混用;应新建分组管理模板;Live Templates与File Templates功能分离,不可混淆。

缩写输完按Tab没反应,八成是没点Define
Live Templates 不是写完缩写和模板文本就自动生效的。最常见的情况:你填了 ue 作为缩写、写了 useEffect(() => { $SELECTION$ }, [$DEPENDENCIES$]),但输入 ue 后按 Tab 没反应——根本原因是没进 Define 设置适用语言范围。
必须手动点击 Define 按钮,勾选具体上下文,比如:
• 只在 React 组件里用?勾 JavaScript 和 React JSX
• 写的是 TypeScript?得额外勾 TypeScript
• 在 .vue 文件的 <script> 块里?只勾 JavaScript 或 TypeScript,别勾 Vue.js(它只管 <template> 里的表达式)
• 勾错或漏勾,模板就完全不触发
Template text 里 $END$ 和 $SELECTION$ 别混用
$END$ 是光标最终停留位置,$SELECTION$ 是你事先选中的代码块。两者语义不同,强行替换会破坏预期行为。
比如写一个包裹选中代码的 try/catch 模板:
• 正确:try { $SELECTION$ } catch (e) { $END$ } → 先选中代码,再输缩写+Tab,选中部分被包裹,光标停在 catch 体里
• 错误:try { $END$ } catch (e) { } → 光标直接落在 try 大括号内,你得手动补内容、再移动光标去 catch,反而更慢
• $DEPENDENCIES$ 这类变量只在特定模板(如 React Hooks)里有效,不是通用占位符,乱用会留空或报错
新建分组比堆在 “user” 下更可控
所有自定义模板默认塞进 user 分组,时间一长就变成“模板坟场”:找一个 log 要翻三页,改个参数得挨个点开确认。
建议按技术栈或用途建分组:
• 点 + → Template Group,起名如 React Hooks、TS Utils、Vue SFC
• 新模板建在对应分组下,逻辑清晰,导出/同步也方便(右键分组 → Export)
• 分组名不参与触发,纯管理用途;缩写仍需全局唯一,比如不能同时存在 ue(React)和 ue(Vue Composition API)
• 别试图在 surround 或 iteration 这类系统分组里加自定义项——它们受 IDE 内部逻辑约束,改了可能被重置
Live Templates ≠ File Templates,别设错地方
想让输入 vue + Tab 插入一段 const app = new Vue({ ... })?这是 Live Templates 的活。
想让右键 → New → 出现 Vue File 选项并生成完整 .vue 文件?那是 File and Code Templates 的事,路径在 Settings → Editor → File and Code Templates → Files。
两个功能完全隔离:
• Live Templates 只影响编辑器内任意光标位置的代码插入,不生成新文件
• File and Code Templates 只响应右键 New 或 Ctrl+N,且扩展名必须精确匹配(填 vue,不是 .vue)
• 把组件骨架代码粘进 File and Code Templates?它不会识别 $SELECTION$,所有变量只能是 ${NAME}、${DATE} 这类新建时计算的
Define,整个模板就静默失效;选错一个上下文,它可能在 HTML 里错误展开 JS 代码。配好之后几乎零维护,但第一次配错,排查起来比重写三行代码还费时间。


















