$1、$2等是光标跳转占位符,$1必存且同步修改同编号项;${1:default}设默认值,$0为终点;sublime不支持$tm_filename_base等动态变量,仅识别$selection等静态字段;snippet须存为xxx.sublime-snippet于packages/user/下,scope需严格匹配当前语法作用域。

Snippet 里 $1、$2 这些数字怎么用?
它们是光标跳转位置的占位符,不是变量名,也不参与计算。写完 snippet 后按 TAB,光标会依次停在 $1 → $2 → … 的位置,最后停在 $0(结束点)。
-
$1必须存在,否则 Tab 键无法触发跳转;多个$1会被同步替换(适合重复内容,比如函数名和调用) -
$2及之后只在有对应编号时才生效;如果写了$3却漏了$2,跳转顺序会乱,Sublime 可能直接卡在$1 -
$0是终点,不能带内容,写成$0就行,别加空格或换行
想让变量内容可编辑又带默认值,该用 ${1:default} 还是 $1?
必须用 ${1:default}。单写 $1 没默认值,光标跳过去就是空的;而 ${1:default} 会让 default 显示为预填内容,用户可删可改。
- 默认值支持简单文本,不支持嵌套表达式(比如
${1:${2:value}}会报错或行为异常) - 多个同编号占位符(如两个
${1:foo})会联动修改——改一个,另一个也变;这是设计特性,不是 bug - 如果默认值含引号、冒号或花括号,需用反斜杠转义,例如
${1:\"hello\"}
为什么 $TM_FILENAME_BASE 在 snippet 里不生效?
因为 Sublime 的 snippet 不支持运行时作用域变量(如文件名、时间戳),只认静态占位符和极少数内置字段:~、<p>因为 Sublime 的 snippet 不支持运行时作用域变量(如文件名、时间戳),只认静态占位符和极少数内置字段:<code>$1~$9、$0、$SELECTION、$CURRENT_WORD。像 $TM_FILENAME_BASE 是 VS Code 或 TextMate 的语法,Sublime 不识别。
$SELECTION、$CURRENT_WORD。像 $TM_FILENAME_BASE 是 VS Code 或 TextMate 的语法,Sublime 不识别。
一款AI办公效率工具,主要用于适用于兼容 Agent Skills 产品的通用(非 OpenClaw)Nutrient DWS 文档处理技能。最佳搭配:Claude Code、Codex CLI、Gemini CLI、Cursor、Wi...,适合需要提升相关任务效率的用户。
- 真正可用的环境变量只有:
$SELECTION(选中内容)、$CURRENT_WORD(光标所在词)、$CURRENT_LINE(当前行)、$LINE_NUMBER(行号) - 想动态插入文件名?得靠插件(比如 “InsertDate” 或自定义 Python 插件),纯 snippet 做不到
- 误写
$TM_FILENAME_BASE不会报错,只是原样输出字符串,容易以为“没生效”,其实是被当普通文本渲染了
保存 snippet 后不生效,常见原因有哪些?
最常卡在文件名、路径或 scope 设置上。Sublime 对 snippet 的加载非常敏感,错一个字符就静默失败。
- 文件必须存为
xxx.sublime-snippet(后缀不能是 .txt 或漏掉 -snippet) - 保存路径必须是
Packages/User/下,其他位置(比如桌面或 Packages/Python/)不会被加载 -
<scope></scope>标签里的值要和当前文件的 syntax scope 严格匹配,比如写source.python,但当前文件是Python Improved插件提供的语法,实际 scope 可能是source.python.django,就得调成对应值 - 改完 snippet 后不用重启 Sublime,但必须确保当前文件已设置正确 syntax(View → Syntax),否则 scope 不匹配,snippet 就不会触发
复杂点在于 scope 判断——很多人以为“我打开的是 .py 文件就自动是 Python scope”,其实插件可能覆盖了 syntax 定义,得用 Ctrl+Shift+P → Developer: Show Scope Name 看真实值。这个步骤漏掉,90% 的“不生效”问题都解决不了。










