Sublime Text 通过 XML 格式 snippets 实现带占位符的 Python 函数模板,支持 ${1:default} 默认值、顺序跳转及动态变量如 $UUID;需正确设置 scope、避免 Tab 冲突。

Sublime Text 本身不内置函数模板生成功能,但通过 snippets(代码片段)可以实现「一键插入 + 占位符跳转」的高效编码,效果接近 IDE 的 Live Templates。
如何创建一个带占位符的 Python 函数 snippet
Sublime 的 snippet 是 XML 格式文件,保存在 Packages/User/ 目录下,后缀为 .sublime-snippet。它支持 $1、$2 等顺序占位符,以及 ${1:default} 设置默认值。
- 打开 Sublime → Tools → Developer → New Snippet
- 替换内容为以下代码(以 Python
def为例):
def source.python Python function template
保存为 def.sublime-snippet。之后在 Python 文件中输入 def + Tab,即可插入并自动聚焦到 $1,按 Tab 可依次跳转到 $2→$3→$4→$5。
为什么用 ${1:name} 而不是 $1?
直接写 $1 没有初始值,光标停住时编辑器不提示;而 ${1:func} 会让第一个占位符默认显示 func,你可直接回车确认或删掉重写——这对命名类占位符(如函数名、参数名)更友好。
-
${1:my_func}:输入时显示灰色my_func,选中即覆盖 -
$1:纯空光标,无上下文提示 - 多个同编号(如
${1:a}和${1:b})会同步更新,适合重复字段(如函数名在定义和 docstring 中都出现)
常见踩坑:触发不了 snippet 或占位符不跳转
最常因作用域(scope)不匹配导致失效。例如你写的是 JavaScript,但 snippet 的 写成了 source.python,那它根本不会响应。
- 查当前文件 scope:按下
Ctrl+Shift+P(Windows/Linux)或Cmd+Shift+P(macOS),输入show scope,回车,状态栏会显示类似source.js meta.function.js - scope 必须精确匹配或包含在目标语言范围内;
source.js可匹配 JS 文件,source.js meta.function.js则只在函数体内生效 - 如果占位符跳转失灵,检查是否被其他插件(如 Emmet)劫持了
Tab键;可在Preferences → Key Bindings中搜索next_field确认绑定正常
进阶:用 UUID 或 TM_YEAR 插入动态值
Sublime snippet 支持少量环境变量,适合生成带时间戳或唯一 ID 的模板(比如测试用例名、日志前缀)。
-
$CURRENT_YEAR→ 当前四位年份(2024) -
$CURRENT_MONTH→ 补零月(04) -
$UUID→ 生成标准 UUID 字符串 - 注意:
$TM_FILENAME_BASE是当前文件名(不含扩展名),可用于快速生成与文件同名的函数
例如,在 snippet 中写 test_${TM_FILENAME_BASE}_${CURRENT_YEAR},就能自动生成 test_utils_2024 这样的测试函数名。
真正卡住效率的往往不是“有没有模板”,而是占位符顺序是否符合直觉、scope 是否写对、以及是否意识到 Tab 跳转可以被插件干扰——调通这三点,比堆十个 snippet 更有用。










