sublime text 无法直接用「查找替换」生成带规则的账号数据,因其不支持递增计数、随机生成或条件逻辑;动态规则必须交由 python 等外部脚本处理,sublime 仅作格式化辅助。

为什么不能直接用 Sublime Text 的「查找替换」生成带规则的账号数据
Sublime Text 本身不支持在替换中执行递增计数、随机字符串生成或条件逻辑——Find and Replace 的 $1、$2 只能回溯捕获组,无法生成动态值。你输入 user${i} 或 uuid(),它只会原样输出字符串,不会计算。
真正可行的路径是:用 Sublime Text 作为「模板编辑+快速粘贴」的辅助工具,把动态生成逻辑交给外部脚本(Python 最轻便),再把结果拖进 Sublime 处理格式。
- 别试图写正则去“模拟”递增——
\d+匹配不了你要的user0001→user9999序列 - 不要依赖插件如
Text Pastry做大规模生成(>10k 行):它基于 UI 线程,卡顿、崩溃概率高,且不支持复杂占位符嵌套 - 真实需求里,“特定规则”往往包含:前缀+固定位数编号、邮箱域名绑定、密码强度策略、时间戳偏移等——这些必须由代码控制
用 Python 脚本生成带规则占位符的账号数据(推荐方式)
写一个 20 行以内的脚本,比折腾插件或宏更可靠、可复用、易调试。关键点在于:占位符不是让 Sublime “替换”,而是让 Python “渲染”。
例如,你需要生成 5000 个账号,格式为:username: user{04d}, email: {username}@test.com, password: Pass{04d}!——直接用 Python 的 str.format() 或 f-string 即可:
for i in range(1, 5001):
uid = f"{i:04d}"
print(f"user{uid}\tuser{uid}@test.com\tPass{uid}!")
输出制表符分隔,方便 Sublime 后续用 Ctrl+Shift+P → Convert Indentation to Spaces + 列编辑补列头。
- 避免用
random.choice()生成“看似随机”的密码——若需真随机,请用secrets模块,否则测试环境可能因重复密码失败 - 邮箱域名若需多轮切换(如
@a.com/@b.com轮替),用domains[i % len(domains)],别用random.choice()——保证可重现 - 如果占位符含日期偏移(如“过去 30 天每天 100 个注册用户”),用
datetime.timedelta(days=-i//100)计算,别硬编码字符串
在 Sublime Text 中高效导入和格式化生成的数据
Python 脚本输出直接重定向到文件(python gen.py > accounts.tsv),然后用 Sublime 打开——这时重点不是生成,而是对齐、补字段、转 JSON/CSV。
常见操作:
- 选中一整列邮箱 →
Ctrl+Shift+L分成多光标 → 输入@test.com替换原有域名(前提是原始数据没混杂) - 需要加 ID 序号列?把光标放在首行开头 →
Ctrl+Shift+L→Ctrl+Shift+P→ 输入Insert Num(需装插件InsertNums),填起始值和步长 - 转 JSON 数组?先全选 →
Ctrl+H替换\t为",",再在外围加[和],最后用Ctrl+Shift+P→JSON Reindent
注意:InsertNums 插件默认从 1 开始递增,但如果你复制了已有数据再插入序号,得手动删掉第一行干扰项,否则序号错位。
容易被忽略的边界问题
生成 10 万行时,别用 print() 逐行刷屏——I/O 瓶颈明显。改用 sys.stdout.write() 或一次性 write() 到文件;Windows 下注意换行符是 \r\n,而 Sublime 默认识别 \n,若后续处理出错,先检查 View → Line Endings 是否为 Unix (LF)。
占位符命名要避开 Sublime 自身变量(如 ${file}、${project_path}),否则粘贴进 Snippet 或 Build System 时会被意外展开。
最麻烦的其实是校验:生成完别直接用,先抽样 grep user0001、user9999、Pass0001! 看是否符合规则——尤其注意编号位数补零(:04d)和特殊字符转义(! 在 shell 里要加反斜杠)。











