vue 3 代码片段不触发的主因是 volar 未启用 take over mode 或文件语言模式非 vue;需检查状态栏并手动切换为 vue,禁用冲突的 vetur,并确保光标位于 内。

Vue 3 的代码片段不会自动弹出来,不是插件没装对,而是 Volar 没切到 Take Over Mode,或者文件语言模式没识别成 Vue。
为什么输入 vue3-ref 没反应
常见现象是敲完 vue3-ref 按 Tab 或回车,什么都没插入——这基本不是插件失效,而是 VSCode 根本没把当前文件当 Vue 处理。
- 右下角状态栏检查语言模式:如果显示
Plain Text、HTML或JavaScript React,点击它,手动选Vue - Volar 必须启用
Take Over Mode:按Ctrl+Shift+P(macOS 是Cmd+Shift+P),运行Volar: Switch to Take Over Mode;Extension Mode 下 snippet 不工作 - 确认禁用了
Vetur:它和 Volar 冲突,会劫持 .vue 文件的语言服务,导致所有 snippet 失效 - 片段只在
<script setup></script>区域内触发:光标必须落在<script></script>标签里(哪怕标签还没写),不能在<template></template>或空白处
Vue VSCode Snippets 和自定义 vue.json 怎么共存
官方插件 Vue VSCode Snippets 提供了 vue3-ref、vue3-onMounted 等前缀,但它的默认 import 是 import { ref } from 'vue',不带类型泛型;而你日常写 TS 时更常需要 ref<string>('')</string> 这种写法。
- 插件自带的 snippet 适合快速启动,但类型细节靠手补——比如
vue3-ref插入后还得手动加<string></string> - 自定义
vue.json更灵活:可直接定义ref-t前缀,body 为const $1 = ref($3);,Tab 切换占位符,一次填完类型和初始值 - 路径优先级:工作区级
.vscode/snippets/vue.json> 用户级snippets/vue.json> 插件内置 snippet,同名 prefix 以后者覆盖前者 - 注意 JSON 语法:不能有尾逗号、字符串必须双引号、
body是字符串数组——写错一行,整个文件静默失效
defineProps / defineEmits 的 snippet 容易出错在哪
这两个 API 在 JS 和 TS 下行为差异极大,snippet 如果没区分清楚,会直接生成无法运行的代码。
- TS 版本必须用泛型接口:比如
defineProps();JS 版本只能传对象字面量:defineProps({ msg: String }),传变量或函数调用会报错 -
defineEmits在 JS 中只接受字符串数组:defineEmits(['update:modelValue']);TS 才支持事件签名对象写法:defineEmits() - 别用插件生成的“万能” snippet 直接粘贴进 JS 文件——Volar 对 JS 的类型推导极弱,
props.msg可能被当成any,IDE 不报错但运行时 undefined - 建议:TS 项目统一用 TS 片段;JS 项目干脆手写,或另建一套
vue-js.json专门管理 JS 片段,避免混用
真正卡住人的从来不是“有没有片段”,而是光标位置、语言模式、Volar 模式三者没对齐。哪怕配好了 vue.json,只要状态栏显示的是 HTML,再全的 snippet 也等于没装。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











