ctrl+shift+l 默认将光标置于行尾而非行首,需配合 home 或 cmd+← 跳转行首;大文件有延迟,vintage 模式下失效;正则替换用 ^/$ 最安全,注意统一编码、换行符和空白符。

Ctrl+Shift+L 后光标默认在行尾,不是行首
按 Ctrl+Shift+L(Windows/Linux)或 Cmd+Shift+L(macOS)后,所有光标会落在每行换行符前——也就是视觉上的“行尾”,而非你想要的行首。直接输入字符,结果是加在末尾,比如想加 // 注释,却变成 console.log(); //。
必须立刻补一步:Home(Win/Linux)或 Cmd+←(macOS)。若某行有缩进,Home 第一次只跳到缩进起点(如 4 个空格后),再按一次才到真正行首;建议先统一缩进:Ctrl+Shift+P → 输入 Indentation: Convert to Spaces。
- 大文件(>10k 行)下
Ctrl+Shift+L有半秒延迟,等光标点全部稳定再操作 - 开了 Vintage 模式时,
Ctrl+Shift+L被重映射为「选中到行尾」,多光标失效——关掉它或改用正则 - 别先
Ctrl+A全选再按Ctrl+Shift+L:全选后光标仍落行尾,且无法靠一次Home统一跳转
正则替换用 ^ 和 $ 最稳,但填错就丢内容
打开 Ctrl+H(Win/Linux)或 Cmd+H(macOS),务必勾选右下角 .* 按钮启用正则模式。漏点它,^ 就当普通字符处理,结果所有行都变成 ^prefix。
加行首:查找栏填 ^,替换栏填你要的内容,比如 // 或 ';加行尾:查找栏填 $,替换栏填 ',' 或 ');。
- 误填
^.*或^.+会吞掉整行内容,只留下你写的前缀——^和$是位置锚点,不消耗字符,才是安全做法 -
$默认匹配“非换行符之前”,若某行末尾有空格或 Tab,它会停在空白前;想让后缀紧贴非空白内容?查找填\s*$,替换为你的后缀$0($0表示原匹配的空白) - 空行也会被
^和$匹配,这是预期行为;若不想处理空行,查^(?=\S)(只匹配非空行开头)
混合换行符或 BOM 会导致 ^/$ 失效
^ 和 $ 默认按“逻辑行”理解边界,但遇到 \r\n 和 \n 混用、UTF-8-BOM 或不可见控制字符时,部分行可能漏匹配。
操作前务必统一环境:
- 执行
File → Save with Encoding → UTF-8去除 BOM -
Ctrl+Shift+P→ 输入Set Line Endings: Unix,统一为LF - 开启
View → Draw White Space查看隐藏空白,确认无异常字符干扰 - 状态栏显示“替换 0 处”?检查是否误勾了“在所选内容中”,而你根本没选任何文本
批量加前后缀时,列选择只适合缩进严格对齐的文本
列选择(Alt+拖拽 / Option+拖拽)本质是竖向矩形框选,不是逻辑上的“每行开头”。它只在缩进完全一致时才准——一旦混用 Tab 和空格、或嵌套层级不同,光标就会偏移。
想用列选加行首字符,得先让结构可控:
- 按住
Alt(Win/Linux)或Option(macOS),从第一行**真正行首**垂直拖到最后一行行首——不是靠目测,而是打开View → Draw White Space显式看到空白符后再拖 - 软换行开启(
word_wrap: true)时,列选无法跨软换行;操作前临时关闭 - 处理日志、CSV、Markdown 列表这类严格左对齐文本可用;写代码时优先用
Ctrl+Shift+L+Home或正则
真正容易被忽略的是文件结尾状态:$ 能匹配最后一行末尾(即使它没换行符),但如果文件末尾有多余 \n,视觉上会误判插入位置。务必先看清换行符分布再动手。











