直接用 Sublime Text 处理 JQL 日志容易出错,因其默认不转义含空格、括号等特殊字符的字段名,CSV 中逗号易误匹配,JSON 嵌套层级难提取,大小写与引号逃逸等细节错误导致查询为空。

为什么直接用 Sublime Text 处理 JQL 日志容易出错
因为 Jira 导出的 CSV 或 JSON 日志里,字段名常含空格、括号或特殊字符(比如 Assignee、Summary、Custom Field (Time Spent)),而 Sublime Text 默认的列编辑、正则替换不自动转义这些字符,一粘贴就断行或匹配失败。
- CSV 中逗号被当分隔符,但 Summary 里可能自带逗号 ——
find in files会跨字段误匹配 - JQL 查询结果导出为 JSON 时,
fields下嵌套深(如fields.assignee.displayName),手动删缩进或提取值极易漏层级 - Sublime Text 的
Ctrl+Shift+P→Convert Case to: upper对含括号字段(如Priority (1-5))会把括号也转大写,破坏 JQL 可读性
用正则 + 多行编辑批量生成 JQL 查询条件
真正省时间的是把日志里的一组 Issue Key(如 PROJ-123、PROJ-456)快速转成 issue in (PROJ-123, PROJ-456) 这种格式,而不是逐个复制粘贴。
- 选中所有 Issue Key(通常在 CSV 第一列或 JSON 的
key字段),按Ctrl+Shift+L拆成多光标 - 输入
,,再按Ctrl+Shift+P→Join Lines合并成一行(注意:别用Ctrl+J,它会吞空格) - 在开头补
issue in (,结尾补);如果 Key 带换行,先用正则\n→,替换,再统一加括号 - JSON 场景下,搜
"key": "(.*?)",替换为$1,勾选. matches newline和regex,就能批量抽 Key
用 Python 脚本补全缺失字段再回填到 Sublime
日志里常缺 created、updated 时间戳或 status 的英文名(只导出中文“进行中”),靠人工查表太慢。这时候需要轻量脚本,不是跑完整 Jira API。
- 把 CSV 粘贴进 Sublime 新建文件,保存为
issues.csv - 写个 10 行脚本:用
pandas.read_csv()读取,调jira.issue()查单个 issue 补字段,再用df.to_csv()输出 —— 关键是设chunksize=1避免 token 被限流 - 输出后用 Sublime 的
View → Word Wrap关掉,再Ctrl+Alt+Shift+P定位到新字段列,Ctrl+Shift+L批量复制粘贴回原 CSV - 别用
csv.DictReader解析带引号的 Summary —— 它会把"fix bug, improve perf"当成两列,改用pandas或csv.Sniffer推断 dialect
保存常用 JQL 片段为 Sublime Snippet
重复写的条件(如 project = PROJ AND status was "Done" DURING ("2024-01-01", "2024-03-31"))没必要每次手敲,存成 snippet 后 Tab 触发最稳。
- 路径:
Tools → Developer → New Snippet...,填tabTrigger为jql-done,scope设为source.jql(没这语法高亮就用text.plain) - 内容里用
$1标 project 名,$2标日期起始,$0设光标终点 —— 这样jql-done+Tab后直接输PROJ回车,再输日期回车就完事 - 别把整个长 JQL 写死在 snippet 里,字段值用占位符;否则改一个条件就得重开 snippet 文件
- Snippet 文件存到
Packages/User/下,重启 Sublime 才生效 —— 如果没反应,看状态栏右下角是否显示source.jql,没显示就手动Ctrl+Shift+P→Set Syntax: JQL
真正卡住人的从来不是 JQL 语法本身,而是字段名大小写混用、CSV 引号逃逸、JSON 层级跳转时少点一个 . —— 这些细节 Sublime 不报错,只默默让查询返回空结果。


















