最稳的批量加行首/行尾字符方法是ctrl+shift+l+←或→:选中行后按ctrl+shift+l生成多光标,再用←移至行首或→/end移至行尾输入内容;注意空行处理、vintage模式冲突及正则替换的细节。

用 Ctrl+Shift+L + ← 或 → 批量加行首/行尾字符最稳
这不是“技巧”,是 Sublime 原生多光标最可靠的触发路径。选中目标行(可以是 Ctrl+A 全选,也可以鼠标拖选),按 Ctrl+Shift+L,所有行末尾立刻出现独立光标;再按 ←,所有光标跳到各自行首;输入内容即生效。加行尾则按 → 或 End,光标自动停在行尾。
常见错误包括:
- 先
Ctrl+A再直接输——只在第一行开头加,其余无反应 - 按
Home一次没到真·行首:有缩进时,Home默认停在缩进起点,需按两次或改用← - 空行也会被赋予光标,输入后变成“前缀+换行”,若不想要,操作前先删空行或过滤
这个流程不依赖正则、不看语法高亮、不卡顿,几十到几百行响应即时。但注意:如果开了 Vintage(Vim)模式,Ctrl+Shift+L 被重映射为「从光标到行尾选中」,此时必须关掉 Vintage 或改用正则路径。
用正则替换加 ^ 和 $ 更适合千行级或带条件的场景
打开 Ctrl+H,点右下角 .* 按钮启用正则模式,这是硬性前提。漏点它,^ 就当普通字符处理,结果所有行都变成 ^prefix。
加行首:Find What 填 ^,Replace With 填你要的内容,比如 // 或 log.;加行尾:Find What 填 $,Replace With 填 ; 或 ),。
真正容易被忽略的细节:
-
$默认匹配“非换行符之后”,若某行末尾有空格或 Tab,它会停在空白前,导致后缀加在空格后。解决方法是把Find What改成\s*$(\s匹配空白,*表示零或多个) - 只给非空行加前缀?搜
^(?=\S);跳过已有//的行?搜^(?!// ) - 状态栏显示“替换 0 处”?检查是否误勾了“在所选内容中”,而你根本没选任何文本
列选择(Alt+拖拽)只适合缩进严格对齐的文本
按住 Alt(Windows/Linux)或 Option(macOS),鼠标从第一行开头垂直向下拖到最后一行开头,松手后光标严格落在同一列。这适合 CSV 字段、日志时间戳块、或已统一缩进的配置项。
但它不是“行首操作”——只要某行缩进不一致(比如混用 Tab 和空格、嵌套层级不同),光标就会错位。例如一行缩进 2 空格,另一行是 1 个 Tab,列选择会让字符加在“视觉列”而非“逻辑行首”,结果参差不齐。
如果非要用列选加前缀:
- 先执行
Ctrl+Shift+P→ 输入Indentation: Convert to Spaces统一缩进 - 禁用可能干扰的插件(如某些主题或编辑增强类),因为
ignored_packages设置会影响列选行为 - 别指望它处理 Markdown 列表或代码注释——这些必须靠
Ctrl+Shift+L或正则
删前缀比加更需要正则精度,^[ \t]*// 这类写法不能省
加是插入,删是擦除,容错率低得多。用 ^// 删除注释,会把 // TODO 和 // 都干掉,但漏掉带空格的 // ;用 ^prefix_ 删除前缀,遇到 prefix_xxx 和 prefix_yyy 没问题,但若某行是 prefix_zzz(前面多一个空格),就删不掉。
稳妥写法:
- 删可能带空格的
//:Find What填^[ \t]*//([ \t]*匹配零或多个空格或 Tab) - 删行首若干空白:
^[ \t]+,注意+表示“至少一个”,避免误删纯空行 - 删行尾逗号并清理空格:
,[ \t]*$
真正复杂的地方在于:正则本身不难,难的是你得提前判断文本里到底有多少种“前缀变体”。现场看几行、试一两个 case、再批量跑,比凭经验瞎写强得多。











