Sublime Text批量给每行加花括号:多光标与正则替换实战
2026/9/16 4:40:30 网站建设 项目流程

处理文本数据时,给每行加上{}是那种看起来不起眼、真到手上一行行弄能烦死人的操作。比如我从后台导出一列商品名,要拼成 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 方案一:多光标插入,零基础三秒搞定

这是最推荐新手先试的方法,因为操作过程完全可见,不容易出错。

步骤:

  1. 用鼠标选中所有需要处理的文本行。如果整个文件都要处理,直接Ctrl+A全选;只处理某段,就拖选那段。
  2. Ctrl+Shift+L(macOS 上是Cmd+Shift+L),Sublime Text 会给选中内容里的每一行分配一个光标。这时光标默认在每行末尾。
  3. Home键,光标跳到每行行首。输入{,每一行前面都会多一个{
  4. End键,光标跳回每行行尾。再输入}

如果数据是:

苹果 香蕉 橙子

做完以上四步,就变成了:

{苹果} {香蕉} {橙子}

要是还想在每行后面加逗号,再多按一次End输入,就行。这套动作我实测下来,几百行的文件从打开到改完,十几秒,胜在零思考、零依赖,不用记正则,也不怕改错。

有一个要注意的坑:如果选中的区域里有空行,Ctrl+Shift+L会把空行也生成一个光标。输入{}后空行会变成{},这可能不是你想要的。处理办法要么是先把空行删干净,要么改用正则方案,正则可以直接跳过空行。

方法核心操作适合场景新手友好度
多光标Ctrl+Shift+L + 输入全部行统一加前后缀
正则替换(?m)^(.+)$/{$1}条件性包裹、字段重组
宏录制录制一次 + 快捷键高频重复流程中高

3.2 方案二:正则替换,灵活控制要加的行

当你想“只处理某些行”,或者“每一行要根据自身内容加工”,多光标就没那么方便了,这时正则替换上场。

默认给每行整体加花括号,操作如下:

  1. 打开替换面板:Windows/Linux 按Ctrl+H,macOS 按Cmd+Option+F
  2. 点击左侧的.*图标打开正则模式,或者按Alt+R切换。
  3. 查找内容填:(?m)^(.+)$
  4. 替换内容填:{$1}
  5. 点击“全部替换”(Replace All)。

解释一下这个正则。(?m)表示多行模式,让^$按“行首”“行尾”来匹配,而不是按“整个文件开头”和“整个文件结尾”;(.+)会捕获一行中至少一个字符的内容,$1在替换内容里就是这一整行;外层加{}就是给它包上花括号。

如果你担心行尾有看不见的回车符(尤其是 Windows 下从 Excel 复制出来的数据),可以把查找内容改成:

(?m)^\s*(.+?)\s*$

这样会把每行前后的空白字符吃掉,只把可见内容放进{}里。\s*表示零个或多个空白,包括空格和制表符;.+?是“最小匹配”,配合结尾的\s*$,能保证捕获组里不含多余空格。

正则方案另一个好处是能跳过空行。上面的模式要求“至少一个字符”,所以空行不会匹配,替换后空行保持不变。这个对日志处理特别实用。

提示:替换内容里,如果$1后面紧跟英文字母或数字,可能会被解析成组名的一部分。这时可以写成${1},比如{"id":${1}}这种,避免匹配混乱。

3.3 方案三:录制宏,把套路存成快捷键

如果你经常需要做同样的处理,比如每周都要把一批导出数据加上{}生成测试文件,那就别每次重复按键了,直接录一个宏。

步骤:

  1. 菜单栏点“工具”(Tools)→“宏”(Macros)→“开始录制”(Start Recording)。
  2. 手动执行一遍需要的操作,比如用上面的正则替换流程。
  3. 操作完成后,点“工具”→“宏”→“停止录制”(Stop Recording)。
  4. 保存宏,起个名字,比如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”搜到的也多是这个问题的讨论。

解决办法按照优先级从低到高:

  1. 更新 Sublime Text 到最新版本。老版本内置组件太旧,访问不了新版仓库接口,升级后大概率能好。
  2. 检查网络。如果你在公司内网,可能需要配置代理才能访问外网;断网重连或换一个网络环境多试几次。
  3. 手动安装 Package Control。去它的官网下载Package Control.sublime-package,放进 Sublime Text 的Installed Packages目录,重启。这样可以绕过自动安装时的一些网络步骤。
  4. 如果网络确实长期不稳定,也可以把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)”之类的选项切换编码,找到正确编码后再处理。有了乱码基础,任何正则都会难以判断,所以做批量操作前先确认编码和换行符,这能避免后期一大半莫名其妙的问题。

这些细节都很小,但它们决定了一次批量处理是“干净利落”还是“隐藏一堆脏数据”。我每次处理从业务系统导出的文件,开头三件事就是:看编码,看换行,看有没有空行。这三样确认完了,剩下的批量替换就只是顺手的事。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询