Sublime中行尾匹配用$而非\n,它锚定在换行符前;需启用正则模式,注意In Selection、. matches newline和只读状态;删行尾空白应使用\s+$,多行操作可结合Ctrl+Shift+L与End。

用 $ 正则匹配行尾,不是搜“换行符”本身
很多人一上来就搜
或
想改行尾,结果要么没反应,要么把内容中间的换行也干掉了。Sublime 里真正代表“行尾位置”的是 $,它不匹配字符,只锚定在换行符之前(或文件末尾)。你替的是“位置”,不是“符号”。
必须先点右下角的 .* 图标启用正则模式,否则 $ 就当普通美元符号处理。
- 想每行末尾加
;:查找$,替换为; - 想删掉每行末尾的逗号:查找
,s*$(s*吸收可能存在的空格/Tab),替换为空 - 如果某行末尾有空格,
$会停在空格后,导致新加内容插在空格后面——这时得用s*$替换,一并清理
为什么 $ 有时不生效?检查这三处
$ 看似简单,但失效往往是因为环境没对齐:
- 状态栏显示 “In Selection”:说明你开了“在所选内容中”搜索,但根本没选任何文本 → 替换数永远是 0
- 误勾了
.(即 “. matches newline”):这时$会匹配到字符串内部的换行前,行为失控;批量操作时务必保持未勾选 - 文件是只读(RO 标志在右下角):所有替换都会静默失败,连提示都没有 → 先解除只读或用管理员权限重开
批量删行尾空白,别用 $ 单独匹配
单独搜 $ 只能匹配一个空格,漏掉 Tab、多个空格、甚至 Unicode 空格。正确写法是 s+$:
-
s在 Sublime 中跨平台兼容,包含空格、、、、等所有空白字符 -
+表示“一个及以上”,避免*导致整行被清空(s*会匹配零长度,造成意外全删) - 若要保留纯空行(比如配置文件中的段落分隔),不能直接
s+,得加负向断言:(?(但需确认当前 Sublime 版本支持)
多行同时操作行尾,优先用 Ctrl+Shift+L + End
正则适合千行以上或带条件的场景;几十行以内,光标法更快更可控:
- 先用
Ctrl+L(Windows/Linux)或Cmd+L(macOS)逐行选中目标行,确保选区含换行符 - 按
Ctrl+Shift+L,所有行末尾立刻生成独立光标 - 按
End(或Ctrl+→),光标统一跳到各自行尾(不是换行符上,是最后一个可见字符后) - 此时输入内容,只作用于行尾,不会干扰缩进或中间字符
- 注意:空行也会被赋予光标,且落在行首;如不需要,操作前先过滤空行
真正容易被忽略的是:行尾和换行符是两个东西。你加的 ; 是加在换行符前面,不是“替换掉换行符”。如果后续 Git 报 “no newline at end of file”,说明最后一行确实缺换行符——那得另起一轮用 $ 替换为
补上,不能指望一次操作解决所有边界情况。

















