ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Sublime Text批量给每行加花括号:多光标与正则替换实战

Sublime Text批量给每行加花括号:多光标与正则替换实战 处理文本数据时给每行加上{}是那种看起来不起眼、真到手上一行行弄能烦死人的操作。比如我从后台导出一列商品名要拼成 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 最著名的特性之一。你可以同时在屏幕上落下几十个甚至上百个光标然后所有按键操作会同步作用在这批光标上。配合CtrlShiftL把每行变成一个光标你可以非常直观地完成“给所有行首加一个字符”“给所有行尾加一个字符”这类任务。对新手来说它不像正则那样像天书而是所见即所得光标在哪儿改动就在哪儿。列选同样是被低估的功能。按住鼠标中键向下拖动你会得到一个纵向选区在纵向选区里输入字符就等于在同一列上批量插入。比如你有一堆数据想统一往右移动两格列选就是最直接的方案。这些操作组合起来处理“每行加括号”这种需求就是小菜一碟。2.2 查找替换加正则批量处理的万能钥匙如果多光标是冲锋枪正则替换就是狙击枪。多光标适合不挑数据的“统一给前后加东西”正则则能加上条件我只给数字行加括号我只要超过三位数的行我要把苹果 5这种两列数据直接变成 JSON 对象。这些逻辑写在正则里一次替换干净利落。Sublime Text 内置的正则引擎对文本处理很够用查找替换面板支持实时高亮预览正则写对了没有你能立刻看到哪些行被标出来。这点对调试正则太重要了。很多人一提正则就害怕其实做“每行包括号”这种任务只需要掌握几个元字符^表示行首$表示行尾.匹配整行内容\d匹配数字\s匹配空白。掌握这几个已经能解决八成批处理需求。另外Sublime Text 打开几十万行的日志文件不卡启动也是秒开。对比一些重量级编辑器在处理批量文本时这份轻量的优势是实打实的效率。3. 三种实测好用的操作方案3.1 方案一多光标插入零基础三秒搞定这是最推荐新手先试的方法因为操作过程完全可见不容易出错。步骤用鼠标选中所有需要处理的文本行。如果整个文件都要处理直接CtrlA全选只处理某段就拖选那段。按CtrlShiftLmacOS 上是CmdShiftLSublime Text 会给选中内容里的每一行分配一个光标。这时光标默认在每行末尾。按Home键光标跳到每行行首。输入{每一行前面都会多一个{。按End键光标跳回每行行尾。再输入}。如果数据是苹果 香蕉 橙子做完以上四步就变成了{苹果} {香蕉} {橙子}要是还想在每行后面加逗号再多按一次End输入,就行。这套动作我实测下来几百行的文件从打开到改完十几秒胜在零思考、零依赖不用记正则也不怕改错。有一个要注意的坑如果选中的区域里有空行CtrlShiftL会把空行也生成一个光标。输入{}后空行会变成{}这可能不是你想要的。处理办法要么是先把空行删干净要么改用正则方案正则可以直接跳过空行。方法核心操作适合场景新手友好度多光标CtrlShiftL 输入全部行统一加前后缀高正则替换(?m)^(.)$/{$1}条件性包裹、字段重组中宏录制录制一次 快捷键高频重复流程中高3.2 方案二正则替换灵活控制要加的行当你想“只处理某些行”或者“每一行要根据自身内容加工”多光标就没那么方便了这时正则替换上场。默认给每行整体加花括号操作如下打开替换面板Windows/Linux 按CtrlHmacOS 按CmdOptionF。点击左侧的.*图标打开正则模式或者按AltR切换。查找内容填(?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: [ctrlshiftb], command: run_macro_file, args: {file: res://Packages/User/wrap_lines_with_braces.sublime-macro} } ]之后按CtrlShiftB当前选区内的每一行就会被自动加上{}。别小看这个录制宏的动作它相当于把你的人肉操作变成了一次性流程。我自己的经验是某个文本处理动作一旦重复出现三次以上就值得录个宏。省下的不只是操作时间还有每次重做时的注意力成本。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 已装好然后按CtrlShiftP打开命令面板输入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 后先看右下角显示的“行尾”是 WindowsCRLF还是 UnixLF如果是前者菜单“视图”→“行尾”→“Unix”一键切过来再执行替换。保险起见写完数据后再切换回去也行。缩进问题同样常见。你从别处复制了带缩进的文本正则替换会保留原有缩进有时候缩进格式却不统一。遇到这种情况可以先全选然后菜单“编辑”→“行”→“重新缩进”Reindent让它统一再继续做包裹操作。中文乱码则要看源文件编码。如果不是 UTF-8Sublime Text 默认打开可能显示成乱码。此时用“文件”→“用编码重新打开”→“中文GBK”之类的选项切换编码找到正确编码后再处理。有了乱码基础任何正则都会难以判断所以做批量操作前先确认编码和换行符这能避免后期一大半莫名其妙的问题。这些细节都很小但它们决定了一次批量处理是“干净利落”还是“隐藏一堆脏数据”。我每次处理从业务系统导出的文件开头三件事就是看编码看换行看有没有空行。这三样确认完了剩下的批量替换就只是顺手的事。
返回列表