ctrl+shift+l(或cmd+shift+l)默认将光标置于每行换行符前即行尾,输入为后缀;非行首,常见误操作包括全选后使用、未清理尾部空白、忽略正则模式启用及混合换行符影响。

Ctrl+Shift+L 后光标默认在行尾,不是行首
选中多行后按 Ctrl+Shift+L(Windows/Linux)或 Cmd+Shift+L(macOS),所有光标会落在每行**换行符前**——也就是行尾位置。此时直接输入字符,加的是后缀,不是前缀。但很多人误以为它会自动跳到行首,结果输完发现全加在末尾,还觉得是功能异常。
常见翻车点:
- 先
Ctrl+A全选再按Ctrl+Shift+L:光标确实分开了,但全卡在行尾;按一次Home只移动第一行光标,其余不动 - 某行末尾有空格或
\t,→或End会停在空白处,不是真正行尾;得连按两次或改用Ctrl+→(Win)/Cmd+→(macOS) - 状态栏没显示 “x cursors”,说明光标没成功拆开;可能选区没跨换行符(比如拖选时没盖住换行位置)
正则替换用 $ 加后缀,但 $ 不等于 “可见内容之后”
$ 匹配的是“行尾位置”,即换行符之前的位置。它不关心前面有没有空格、制表符或注释,只要在换行符前就匹配。所以直接 Find What: $ → Replace With: ;,结果可能是 foo() ;,而不是你想要的 foo();。
稳妥做法:
- 先清理尾部空白:
Find What: \s*$→Replace With:(空) - 再执行后缀插入:
Find What: $→Replace With: ; - 若要跳过空行,用
^(.+)$替换为$1;;想包含空行,就用^.*$→$0; - 务必勾选右下角
.*按钮启用正则模式;漏点它,$就当普通字符处理,替换 0 处
列选择(Alt+拖拽)不适合加后缀,只适合固定列插入
列选择本质是“竖直矩形框选”,靠视觉列对齐。每行长度不同,你无法用同一列定位所有行的“末尾”。比如一行长 20 字符、另一行长 45,从第 45 列往下拖,第一行根本没被框中。
它只适用于:
- CSV 字段对齐(如所有 ID 都在第 10 列)
- 日志时间戳块(统一左对齐在第 2 字符)
- 已转为空格且缩进严格一致的配置项
混用 Tab 和空格、嵌套层级不同、或含中文字符时,列选择会明显错位——这不是 bug,是设计限制。
文件末尾无换行符时,$ 仍能匹配,但行为易被误判
Sublime 的 $ 默认匹配最后一行的结尾(无论是否有换行符)。如果文件最后一行是 return true 且没换行,$ 仍会匹配其后位置,; 会被加在末尾,变成 return true; —— 这是正确行为。
但人眼容易误判,因为:
- 开启
View → Draw White Space才能看清哪行真有换行符 - 若文件末尾有多余
\n,视觉上像多了一空行,$却不会匹配那个“假行尾” - 混合换行符(
\r\n和\n共存)会导致部分行漏匹配;操作前先Ctrl+Shift+P→Set Line Endings: Unix统一为LF
真正容易被忽略的,是空行、缩进混乱、BOM 和 Vintage 模式这些真实编辑场景里的常态——它们不会报错,但会让多光标失效或正则漏匹配,得提前干预,不能硬上。











