最稳的批量加前缀方法是正则替换^,需启用.*模式,填^为查找、prefix为替换;多光标+Home易受缩进和编码干扰;列选仅适用于严格对齐文本。

Ctrl+Shift+L后光标默认在行尾,不是行首
直接选中多行按Ctrl+Shift+L(Windows/Linux)或Cmd+Shift+L(macOS),所有光标会落在每行换行符前——也就是行尾。此时输入任何字符,都会加在末尾,比如想加//,结果变成console.log(); //。
必须立刻补按Home(Win/Linux)或Cmd+←(macOS),才能让所有光标跳到行首。如果某行有缩进,Home第一次只停在缩进起点(如 4 个空格后),再按一次才到真正行首;更稳的做法是连按两次←,或直接用Ctrl+Home(Win)/ Cmd+Home(Mac)一步到位。
- 别先
Ctrl+A全选再按Ctrl+Shift+L:全选后Ctrl+Shift+L仍把光标放在每行末尾,且Home只移动第一行光标,其余不动 - 缩进不一致(混用 Tab 和空格)时,
Home行为可能错乱;建议操作前执行Ctrl+Shift+P→ 输入Indentation: Convert to Spaces统一格式 - UTF-8-BOM 编码下
Home可能被干扰,跳不到真正行首;可改用File → Save with Encoding → UTF-8去除 BOM
正则替换 ^ 是最稳的批量加法,但必须点开 .* 按钮
打开Ctrl+H(Win/Linux)或Cmd+H(macOS),勾选右下角的.*(启用正则模式)——这是硬性前提。漏点它,^就被当普通字符处理,替换结果全是字面量^prefix,而不是加在行首。
^匹配的是“行首位置”,不消耗字符,所以安全;但常见误填是^.+或^.*,这会导致整行被替换成前缀,原内容丢失。
- 加
//:查找栏填^,替换栏填//,点“全部替换” - 只给非空行加:
^(?=\S)(?=是正向先行断言,确保行首后紧跟非空白字符) - 跳过已有
//的行:^(?!// )(?!是否定先行断言) - 混合换行符(
\r\n和\n共存)会导致部分行漏匹配;操作前先Ctrl+Shift+P→Set Line Endings: Unix统一为 LF
列选择(Alt+拖拽)只适合缩进严格对齐的文本
按住Alt(Win/Linux)或Option(macOS),从第一行真正行首垂直拖到最后一行行首,松手后光标落在同一列。它不依赖逻辑行首,而是纯视觉列定位。
一旦缩进不一致(比如一行用 Tab、另一行用 4 个空格),列选择就会错位——你看到的“行首”可能是缩进中间,加出来的符号参差不齐。
- 若必须用列选,先打开
View → Draw White Space显式显示空白符,再拖拽 - 列选无法跨软换行(
soft_wrap开启时),操作前建议临时关闭 - 它不适合 Markdown 列表、代码注释等需逻辑对齐的场景;这些必须用
Ctrl+Shift+L+Home或正则^
Vintage 模式下 Ctrl+Shift+L 失效,得换路径
如果开了 Vintage(Vim)模式,Ctrl+Shift+L被重映射为「选中到行尾」,不再生成多光标。此时多光标路径直接失效,强行操作只会高亮块状文本,输入只作用于第一行。
有两个选择:关掉 Vintage(Preferences → Package Settings → Vintage → Settings – User里设"enabled": false),或者绕过它,直接用正则替换。
- 大文件(>10k 行)下
Ctrl+Shift+L响应有半秒延迟,别急着输,等所有光标点稳定出现再操作 - 空行也会被赋予光标,加完变成
prefix+ 换行;若不需处理,操作前先删空行,或用正则^(?=\S)过滤 - 某些代码格式化插件(如 JsPrettier)可能在保存时自动删掉你刚加的行首空格或符号,注意检查保存后效果
实际用哪条路,取决于你当前文本结构和需求复杂度:简单、小文件、缩进干净 → 多光标;千行以上、要跳过空行或已有前缀 → 正则;已对齐的配置项或日志字段 → 列选。三者本质不同,别混用。


















