处理文本数据时,给每行加上{}是那种看起来不起眼、真到手上一行行弄能烦死人的操作。比如我从后台导出一列商品名,要拼成 JSON 数组放进接口测试;或者拿到一列 Excel 订单号,要转成需要包括号的数据;再或者只是想把几行字符串包装成代码块里的对象。用 Sublime Text 来做,批量操作三秒钟完成,而且不会漏不会错。这篇文章就把我平时最常用的几种做法列出来,包括多光标、正则替换和宏录制,都是可以直接踩着我步骤试的。
再啰嗦一句适用对象:不管你是前端、后端、测试,还是经常跟 CSV、日志、Excel 导出的数据打交道的数据分析,这几种操作都很值得学。下面的内容不需要你会写插件,只要用着 Sublime Text 就行。
1. 先说清楚:什么场景下要给每行加{}
1.1 从表格变 JSON:最常见的需求
想象一下,你面前是 Excel 里一列数据:
苹果 香蕉 橙子需要变成:
{"name":"苹果"}, {"name":"香蕉"}, {"name":"橙子"},这还只是最基础的。更常见的是,你手里有一张商品表,里面有名称、价格、库存好几列,接口测试要的就是这种对象数组。手工一行行加引号、加大括号,20 行以内还行,200 行就非常痛苦,还容易漏行错行。Sublime Text 的多光标和正则替换,就是在帮你做“批量贴膜”。
这种操作的底层逻辑,是把“行”当成了最小的编辑单元。数据本身已经是一行一条,你缺的不是内容,而是格式。格式化的过程一旦交给肉眼和手指去重复,注意力很快就会下降,漏一个逗号、少一个花括号的隐患就在这时候钻出来。批量处理不只是省时间,更是为了稳定。
1.2 除了 JSON,这些场景同样需要批量包
我给每行加{}这件事,实际工作中出现过很多变形:
- SQL 批处理:一列 ID 要转成
INSERT INTO t (id) VALUES (1), (2), (3);,每个值外面都要包()。 - 接口 Mock 数据:给接口文档备数据,一行一个对象,还要带不同字段。
- 日志加工:日志文件里每行是一条记录,想给它外层套个结构,方便后续脚本解析。
- 配置文件:批量生成 nginx upstream 节点、批量生成测试用例参数。
- Markdown 展示:在博客或文档里贴原始数据时,需要快速把每行包成代码块内容。
你会发现,这些任务的共同点都是“一行一条”的数据结构。你缺的不是数据,是格式。而人肉格式化,越是有规律,越容易出错。把这些交给编辑器的批量能力,才是最稳妥的做法。
2. 为什么我推荐用 Sublime Text 干这件事
2.1 多光标与列选:其他编辑器学不来的手感
我试过在 Excel 里做类似的事,公式能搞定一些,但只要涉及到“条件满足才包一层”这种逻辑,会非常绕。我也试过用 Vim 的宏,威力确实大,但对平时不用 Vim 的人来说,学习成本太高。Sublime Text 最友好的地方,在于它把一个复杂问题拆成了你肉眼能看懂、手指能跟上的动作。
多光标(Multiple Cursors)是 Sublime Text 最著名的特性之一。你可以同时在屏幕上落下几十个甚至上百个光标,然后所有按键操作会同步作用在这批光标上。配合Ctrl+Shift+L把每行变成一个光标,你可以非常直观地完成“给所有行首加一个字符”“给所有行尾加一个字符”这类任务。对新手来说,它不像正则那样像天书,而是所见即所得:光标在哪儿,改动就在哪儿。
列选同样是被低估的功能。按住鼠标中键向下拖动,你会得到一个纵向选区,在纵向选区里输入字符,就等于在同一列上批量插入。比如你有一堆数据想统一往右移动两格,列选就是最直接的方案。这些操作组合起来,处理“每行加括号”这种需求,就是小菜一碟。
2.2 查找替换加正则:批量处理的万能钥匙
如果多光标是冲锋枪,正则替换就是狙击枪。多光标适合不挑数据的“统一给前后加东西”,正则则能加上条件:我只给数字行加括号;我只要超过三位数的行;我要把苹果 5这种两列数据直接变成 JSON 对象。这些逻辑写在正则里,一次替换,干净利落。
Sublime Text 内置的正则引擎对文本处理很够用,查找替换面板支持实时高亮预览,正则写对了没有,你能立刻看到哪些行被标出来。这点对调试正则太重要了。很多人一提正则就害怕,其实做“每行包括号”这种任务,只需要掌握几个元字符:^表示行首,$表示行尾,.+匹配整行内容,\d匹配数字,\s匹配空白。掌握这几个,已经能解决八成批处理需求。
另外,Sublime Text 打开几十万行的日志文件不卡,启动也是秒开。对比一些重量级编辑器,在处理批量文本时,这份轻量的优势是实打实的效率。
3. 三种实测好用的操作方案
3.1 方案一:多光标插入,零基础三秒搞定
这是最推荐新手先试的方法,因为操作过程完全可见,不容易出错。
步骤:
- 用鼠标选中所有需要处理的文本行。如果整个文件都要处理,直接
Ctrl+A全选;只处理某段,就拖选那段。 - 按
Ctrl+Shift+L(macOS 上是Cmd+Shift+L),Sublime Text 会给选中内容里的每一行分配一个光标。这时光标默认在每行末尾。 - 按
Home键,光标跳到每行行首。输入{,每一行前面都会多一个{。 - 按
End键,光标跳回每行行尾。再输入}。
如果数据是:
苹果 香蕉 橙子做完以上四步,就变成了:
{苹果} {香蕉} {橙子}要是还想在每行后面加逗号,再多按一次End输入,就行。这套动作我实测下来,几百行的文件从打开到改完,十几秒,胜在零思考、零依赖,不用记正则,也不怕改错。
有一个要注意的坑:如果选中的区域里有空行,Ctrl+Shift+L会把空行也生成一个光标。输入{}后空行会变成{},这可能不是你想要的。处理办法要么是先把空行删干净,要么改用正则方案,正则可以直接跳过空行。
| 方法 | 核心操作 | 适合场景 | 新手友好度 |
|---|---|---|---|
| 多光标 | Ctrl+Shift+L + 输入 | 全部行统一加前后缀 | 高 |
| 正则替换 | (?m)^(.+)$/{$1} | 条件性包裹、字段重组 | 中 |
| 宏录制 | 录制一次 + 快捷键 | 高频重复流程 | 中高 |
3.2 方案二:正则替换,灵活控制要加的行
当你想“只处理某些行”,或者“每一行要根据自身内容加工”,多光标就没那么方便了,这时正则替换上场。
默认给每行整体加花括号,操作如下:
- 打开替换面板:Windows/Linux 按
Ctrl+H,macOS 按Cmd+Option+F。 - 点击左侧的
.*图标打开正则模式,或者按Alt+R切换。 - 查找内容填:
(?m)^(.+)$ - 替换内容填:
{$1} - 点击“全部替换”(Replace All)。
解释一下这个正则。(?m)表示多行模式,让^和$按“行首”“行尾”来匹配,而不是按“整个文件开头”和“整个文件结尾”;(.+)会捕获一行中至少一个字符的内容,$1在替换内容里就是这一整行;外层加{}就是给它包上花括号。
如果你担心行尾有看不见的回车符(尤其是 Windows 下从 Excel 复制出来的数据),可以把查找内容改成:
(?m)^\s*(.+?)\s*$这样会把每行前后的空白字符吃掉,只把可见内容放进{}里。\s*表示零个或多个空白,包括空格和制表符;.+?是“最小匹配”,配合结尾的\s*$,能保证捕获组里不含多余空格。
正则方案另一个好处是能跳过空行。上面的模式要求“至少一个字符”,所以空行不会匹配,替换后空行保持不变。这个对日志处理特别实用。
提示:替换内容里,如果
$1后面紧跟英文字母或数字,可能会被解析成组名的一部分。这时可以写成${1},比如{"id":${1}}这种,避免匹配混乱。
3.3 方案三:录制宏,把套路存成快捷键
如果你经常需要做同样的处理,比如每周都要把一批导出数据加上{}生成测试文件,那就别每次重复按键了,直接录一个宏。
步骤:
- 菜单栏点“工具”(Tools)→“宏”(Macros)→“开始录制”(Start Recording)。
- 手动执行一遍需要的操作,比如用上面的正则替换流程。
- 操作完成后,点“工具”→“宏”→“停止录制”(Stop Recording)。
- 保存宏,起个名字,比如
wrap_lines_with_braces.sublime-macro。
保存以后,可以通过“工具”→“宏”→“用户”(User)找到并复现。想更快的话,可以给它绑定快捷键。打开“首选项”→“键绑定-用户”(Key Bindings - User),写入类似:
[ { "keys": ["ctrl+shift+b"], "command": "run_macro_file", "args": {"file": "res://Packages/User/wrap_lines_with_braces.sublime-macro"} } ]之后按Ctrl+Shift+B,当前选区内的每一行就会被自动加上{}。别小看这个录制宏的动作,它相当于把你的人肉操作变成了一次性流程。我自己的经验是:某个文本处理动作一旦重复出现三次以上,就值得录个宏。省下的不只是操作时间,还有每次重做时的注意力成本。
4. 进阶玩法:不只是加{},还要批量加点“料”
4.1 一行两列数据转成 JSON 对象
很多时候,原始数据不止一列。比如你在 Excel 里有商品名和价格两列,导出来变成了:
苹果 5 香蕉 3.5 橙子 6你想变成:
{"name":"苹果","price":5}, {"name":"香蕉","price":3.5}, {"name":"橙子","price":6},这时候可以用正则捕获多个组。查找内容写:
(?m)^(.+?)\s+([\d.]+)$替换内容写:
{"name":"$1","price":$2},这里(.+?)捕获商品名,([\d.]+)捕获价格。替换串里的引号不用转义,$1和$2会被实际内容替换掉。执行完,整列数据就变成了可直接粘贴到接口测试里的对象数组。
这套思路可以扩展到更多字段。比如数据是A|B|C,把分隔符拆成正则里的组,逻辑完全一样。关键点是:先看清数据的结构,再把结构拆成正则的捕获组。替换前多看看高亮预览,哪组对应哪个字段,一目了然。
4.2 只给特定行加花括号:正则条件匹配
有时候需求不是“所有行都加”,而是“只有数字行要加”或“只有包含某关键词的行要加”。这时候多光标做不到,正则却很简单。
只给数字行加{}:
- 查找:
(?m)^(\d+)$ - 替换:
{$1}
只给以“ERR”开头的行加:
- 查找:
(?m)^(ERR.+)$ - 替换:
{$1}
如果你记不清表达式的细节,也不一定要完全背下来。配合 Sublime Text 的“查找全部”功能可以先预览,确认高亮出来的都是你要的行,再点全部替换。正则最怕的就是条件没写对还硬替换下去,预览一步能省掉大量返工。
4.3 结合 md 插件:Markdown 里的大段代码块更快插入
提到 Sublime Text 的 Markdown 插件(md 插件),很多人的第一反应是“它不就是高亮嘛”。其实不止。装上 MarkdownEditing 之后,写 Markdown 的体验会明显提升:标题自动补全、代码块快速插入、列表缩进跟随,处理大段引用数据时都不容易乱。
比如你正在写一篇技术文章,要把一段用{}包裹好的数据放进代码块里。没有插件时,你得手动输入三个反引号,换行,粘贴数据,再补三个反引号。有插件后,因为语法高亮的存在,你能立刻发现花括号配没配平、少没少逗号。配合 MarkdownPreview 插件,还能在浏览器里实时看排版效果。
安装方式很简单:先确保 Package Control 已装好,然后按Ctrl+Shift+P打开命令面板,输入Package Control: Install Package,搜索 MarkdownEditing 安装。装完重启,打开.md文件就有更好的高亮和补全。所有这些对于“给数据包{}后展示”这个场景,都是顺手的加分项。
5. 我踩过的坑:许可证提示、包管理、换行和缩进
5.1 build 3211 提示“许可证不再有效”怎么办
如果你用的是较新版本的 Sublime Text,比如 build 3211 及以上,有段时间很多人会遇到一条提示:
your license key is no longer valid, and has been removed翻译过来就是:你的许可证密钥已失效,并被自动移除。这通常不是软件坏了,而是密钥不受新版认可。常见原因有两个:一是当初激活用的密钥来源不正规,后来被官方标记失效;二是以前用的是老版本密钥,升级到新版本后格式不兼容。
遇到这种情况,如果手头确实是正版,去官网重新登录账号,在账户页面重新获取一个适用于当前版本的许可证即可。如果只是网上找来的随意注册码,那就不要再折腾了,直接把注册码清掉,用 Sublime Text 的免费评估模式继续用。也可以先去官网重新下载对应平台的最新安装包(Windows 用户就下 x64 setup),装完再重新输入许可证,很多状态异常会随之清除。
这里多说一句:Sublime Text 的免费评估模式其实没有功能限制,只是偶尔会弹一个“请购买”的提示,不影响代码编辑,也不丢数据。如果只是个人用途、偶尔处理点文本,评估模式完全够用。真到了团队采购或长期高强度使用,直接支持一下正版,省心也稳当。
5.2 “There are no packages available for installation”是怎么回事
不少人在 Sublime Text 3 里用 Package Control 装插件时,遇到过命令面板里弹出一个提示:
There are no packages available for installation第一次见这个错误很容易懵,总以为是自己操作不对。实际情况绝大多数是 Package Control 拿不到插件仓库列表。它默认要从一个远程地址下载channel_v3.json,如果网络不通、DNS 有问题,或者 Sublime Text 本身版本太老、内置的 SSL 库过时,就会导致获取失败。大家在网上搜“sublime text 3 安装包时出现 there are no packages available”搜到的也多是这个问题的讨论。
解决办法按照优先级从低到高:
- 更新 Sublime Text 到最新版本。老版本内置组件太旧,访问不了新版仓库接口,升级后大概率能好。
- 检查网络。如果你在公司内网,可能需要配置代理才能访问外网;断网重连或换一个网络环境多试几次。
- 手动安装 Package Control。去它的官网下载
Package Control.sublime-package,放进 Sublime Text 的Installed Packages目录,重启。这样可以绕过自动安装时的一些网络步骤。 - 如果网络确实长期不稳定,也可以把
channel_v3.json下载到本地,然后在 Package Control 的 User 设置里指定"channels": ["/本地路径/channel_v3.json"]。这是个偏方,但对离线环境很有效。
注意,装上 Package Control 不等于立即能搜索安装,首次使用它往往会先拉取一次频道文件,这个动作需要网络正常。耐心等待几秒或重新打开一次命令面板,往往就正常了。
5.3 CRLF、缩进和中文乱码:小细节别大意
最后一个坑,是很多新人处理数据时最容易忽略的:换行符和编码。
在 Windows 上导出的 txt 或从 Excel 复制出来的数据,默认很可能是 CRLF(\r\n)换行。你用正则$匹配行尾时,\r有时候会残留在捕获结果里,导致替换后得到类似{苹果\r}的效果,看着没问题,一运行就报错。处理办法是:打开 Sublime Text 后,先看右下角显示的“行尾”是 Windows(CRLF)还是 Unix(LF),如果是前者,菜单“视图”→“行尾”→“Unix”一键切过来,再执行替换。保险起见,写完数据后再切换回去也行。
缩进问题同样常见。你从别处复制了带缩进的文本,正则替换会保留原有缩进,有时候缩进格式却不统一。遇到这种情况,可以先全选,然后菜单“编辑”→“行”→“重新缩进”(Reindent)让它统一,再继续做包裹操作。
中文乱码则要看源文件编码。如果不是 UTF-8,Sublime Text 默认打开可能显示成乱码。此时用“文件”→“用编码重新打开”→“中文(GBK)”之类的选项切换编码,找到正确编码后再处理。有了乱码基础,任何正则都会难以判断,所以做批量操作前先确认编码和换行符,这能避免后期一大半莫名其妙的问题。
这些细节都很小,但它们决定了一次批量处理是“干净利落”还是“隐藏一堆脏数据”。我每次处理从业务系统导出的文件,开头三件事就是:看编码,看换行,看有没有空行。这三样确认完了,剩下的批量替换就只是顺手的事。