news 2026/8/21 15:38:33

修改三处代码却要来回滚动?TextMate 多光标编辑把重复劳动变成一次操作

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
修改三处代码却要来回滚动?TextMate 多光标编辑把重复劳动变成一次操作

修改三处代码却要来回滚动?TextMate 多光标编辑把重复劳动变成一次操作

【免费下载链接】textmateTextMate is a graphical text editor for macOS 10.12 or later项目地址: https://gitcode.com/gh_mirrors/te/textmate

如果你的日常工作离不开文本编辑,多半经历过这样的场景:一份配置里散落着五六个相同的字段名要统一改名,一张数据表里十余行内容需要在同一列位置补上相同前缀,一段日志里十来个时间戳要批量转成另一种格式。逐行修改既慢又容易漏,改到一半还常常忘了哪一行处理过。TextMate 作为一款面向 macOS 的图形化文本编辑器,内置的多光标编辑能力正是为这类问题设计的:它允许你在一个文档里同时持有多个光标,一次输入、同时落到所有位置,把"重复劳动"压缩成"一次操作"。本文不讨论实现原理,只讲怎么把它用起来,帮助你解决日常批量修改的麻烦。

从"找一处改一处"到"一次改所有":多光标编辑解决的问题

先看一个典型痛点。假设你要把一段 JavaScript 里所有user前缀的变量改名为customer

let userName = "John"; let userAge = 30; let userEmail = "john@example.com";

传统做法是光标移到userName,删掉user输入customer,再滚动到下一行重复同样动作。字段少还好,一旦同一前缀出现二十次,这套"定位—删除—输入—定位"的循环就会消耗大量时间,而且很容易看漏。

多光标编辑的思路完全不同:先把所有需要修改的位置一次性标记出来,形成多个并行的光标,然后只输入一次,每个光标处会同时出现你键入的内容。上面的改动就变成:选中user三次,键入customer三次,最终得到:

let customerName = "John"; let customerAge = 30; let customerEmail = "john@example.com";

这套能力由 TextMate 的编辑器核心和选择系统共同支撑,相关代码位于Frameworks/editor/src/Frameworks/selection/src/,菜单项则定义在 Applications/TextMate/src/AppController.mm 中。你不需要关心这些细节,只需要记住三个入口:列选择、查找所有、命令过滤

从入门到熟练:三种建立多光标的方式

建立多光标没有唯一正确路径,三种方式分别对应"按形状选""按内容选""按规则生成"三类场景,可以从最简单的开始逐个掌握。

按形状选择:用列选择模式处理对齐的文本块

当你要修改的内容恰好排成一个矩形——比如多行代码末尾的分号、每行开头固定位置的缩进、或者一组对齐的表格数据——列选择模式是最直观的入口。

操作步骤:

  1. 在菜单栏打开Edit → Select → Toggle Column Selection(也可以直接按住Option键再开始拖选)。
  2. 用鼠标从矩形的左上角拖到右下角,选中这个"纵向"的区域。
  3. 选中后按一下左方向键右方向键,TextMate 会把列选择自动拆分成多个独立光标,此时直接输入,内容会同时出现在每一行上。

一个常见用途是给多行代码统一补上相同的class

<div>Item 1</div> <div>Item 2</div> <div>Item 3</div>

用列选择框住每行<div后面的位置,输入class="item",三行会同时更新为<div class="item">

要点:列选择依赖各行在对应位置上的字符对齐,如果某一行长度明显短于其他行,该处不会产生光标,需要先用其他方式补齐。

按内容选择:用"查找所有"统一修改相同文本

列选择要求文本形状规整,而现实中更多的情况是"内容相同、位置分散"。例如同一个变量名散落在函数的参数、赋值、返回值中,位置各不相同,这时应该使用查找功能。

操作步骤:

  1. Edit → Find → Find All(快捷键Command + Option + F)打开查找面板。
  2. 输入要定位的文本,比如变量名前缀。
  3. 点击Find All按钮,TextMate 会在文档中找出所有匹配项,并为每个匹配项建立独立光标(每处光标会自动选中该段文本)。
  4. 直接输入新内容,所有匹配项会被同时替换。

这正是文章开头那个变量改名场景的推荐做法:查找user、点击 Find All、输入customer,一处不漏。相关查找逻辑集中在 Frameworks/Find/src/Find.mm 中,支持区分大小写、正则表达式等选项,如果只想精确匹配单词,记得在查找面板勾选相应选项。

按规则生成:用"通过命令过滤"批量插入序列号

前两种方式的前提是"文本已经存在"。如果需要批量生成内容,比如给一组选中的行加上行号、时间戳或统一前缀,可以借助命令过滤。

操作步骤:

  1. 用列选择或查找所有创建多个光标,选中需要处理的多行区域。
  2. 在菜单栏运行Text → Filter Through Command…(快捷键Command + |)。
  3. 在弹出的输入框中键入一个 Shell 命令,例如给每行加行号的awk '{print NR, $0}',或直接运行seq 100生成一组序号。
  4. TextMate 会把所有选中的行合并后交给命令处理,再把命令输出按行拆回,对应替换到每个光标位置。

这样,哪怕要生成一百行编号,也只需要创建一次选择、执行一次命令,结果即刻按行分布回文档。

容易被忽略的细节与常见避坑

多光标用起来顺手,但几个细节如果不了解,容易在关键时刻卡住。

光标多余时如何清理。创建了过多光标后,不必重新撤销:按两下Shift键可以移除除第一个之外的所有光标;如果只想去掉某几个光标,按住Command再次点击对应位置即可取消该处光标。

统一移到行首或行尾。当多个光标分布在同一行时,按Command + 左/右方向键(或Control + A/E)可以把所有光标一起移动到行首或行尾。这个动作常被用来"收拢"选择,也是在多光标之间快速对齐的实用手段。

查找范围先确认。使用 Find All 之前,建议确认查找面板的搜索范围是"当前文档"而不是"当前选区"或"项目"。在大型项目文件里误用全项目查找,会一次创建成百上千个光标,后续操作容易失控。

列选择只覆盖有效行。列选择模式下,短于所选列宽的行不会获得光标,这是常见误解。遇到这种情况,先用Command + 方向键调整行尾,或改用查找所有方式建立光标。

命令过滤注意输出格式。通过命令过滤时,命令输出会按换行符拆分并逐行替换。如果你的命令会输出空行或多余空格,替换结果可能不如预期,建议先在小范围试运行一次。

现在可以开始的第一步

多光标编辑的实用价值在于:它把"批量修改"从一项需要细心和耐心的重复工作,变成一次有明确边界的操作,既节省时间,也降低遗漏风险。下一次当你发现自己要在同一份文件里做第三遍同样的小改动时,不妨停下来想一想——这个操作能不能用多光标一次完成。

建议从今天的一个小任务开始练习:打开一份真实在改的代码文件,找出一个出现三次以上的同名变量,用Command + Option + F查找并全部选中,然后一次性完成改名。完成这一次之后,你会自然形成"批量修改优先考虑多光标"的习惯,再遇到列对齐或批量生成行号的需求时,列选择与命令过滤也就水到渠成了。

【免费下载链接】textmateTextMate is a graphical text editor for macOS 10.12 or later项目地址: https://gitcode.com/gh_mirrors/te/textmate

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/21 15:38:10

认识 ckb-next:Linux 与 macOS 上海盗船外设 RGB 驱动的终极指南

认识 ckb-next&#xff1a;Linux 与 macOS 上海盗船外设 RGB 驱动的终极指南 【免费下载链接】ckb-next RGB Driver for Linux and OS X 项目地址: https://gitcode.com/gh_mirrors/ckb/ckb-next 如果你是一名 Linux 或 macOS 用户&#xff0c;手里恰好有一把海盗船&…

作者头像 李华
网站建设 2026/8/21 15:31:56

Agentic Scaling到自进化:大模型下一阶段演进路线图

摘要 2026奇点智能技术大会"大模型技术:从Agentic Scaling到自进化"专题将系统拆解大模型从预训练范式迈向后训练推理计算协同新阶段的关键路径。本文结合张俊林、方斌、卢志武3位已确认演讲嘉宾的过往研究主线,梳理Agentic Scaling、自进化机制、MoE架构工程权衡三…

作者头像 李华
网站建设 2026/8/21 15:31:50

AI计算平台架构演进:从单点性能到生态较量

摘要 2026奇点智能技术大会"AI计算平台:从系统到生态演进"专题直击一个行业共识:AI计算平台竞争已从单点性能(FLOPS)演变为系统架构设计、异构算力兼容、开源生态健康度的综合较量。本文基于小米张晨、阿里云杨文婷、京东段楠等已确认嘉宾的工程实践,拆解万亿参数训…

作者头像 李华