Sublime列选择遇空行中断是正常行为,因其按可视行逐行延伸且空行无有效列偏移;可通过Ctrl+Shift+L配合正则^\S定位非空行首再横向扩展实现跨空行列编辑。

列选择时空白行会中断选区,这不是 bug 是 Sublime 的行为逻辑
Sublime 的列选择(Ctrl+Shift+↑/↓ 或鼠标中键拖拽)默认按「可视行」逐行向下延伸,遇到空行(含全空或仅含空白字符的行)就停住,不会跨过去。它不判断内容是否“有意义”,只看当前光标所在列位置在下一行是否存在可定位的字符 —— 空行没有有效列偏移,选区自然断开。
真正能跳过空白行的只有 Ctrl+Shift+L + 列编辑组合
纯列选无法跳过,但可以绕开:先用多行光标定位到目标行,再统一开启列编辑。关键步骤是:
-
Ctrl+F打开查找,输入^\S(匹配行首非空白字符),勾选.*和Wrap Around - 点
Find All(或Alt+Enter),所有非空行首自动打上光标 - 按
Ctrl+Shift+→(Windows/Linux)或Cmd+Shift+→(macOS)向右扩展选区,此时所有光标同步横向移动,完全无视中间空行 - 输入、删除或粘贴,全部生效于各非空行对应列位置
空行里藏了全角空格或零宽字符?^\S 也会失效
如果某些“看起来空”的行没被 ^\S 匹配到,大概率含 \u3000(全角空格)、\u200B(零宽空格)或 \uFEFF(BOM)。这时得改用更宽泛的匹配:
- 查找内容换成:
^[^\S\n\r]*\S—— 先吃掉所有非换行类空白(含全角、零宽),再找第一个非空白字符 - 或直接打开
View → Show White Space(Ctrl+Shift+P输入toggle_whitespace),肉眼确认哪些符号实际占位 - 若发现大量
·或→,说明存在不可见字符,需先用^[ \t\u3000\u200b\uFEFF]*$清理空行,再执行列操作
为什么不用正则替换预处理?因为列编辑依赖原始行结构
有人想先删空行再列选,这反而更危险:
- 删空行会重排行号,你原计划操作第 5、10、15 行,删完可能变成第 3、7、10 行,手动数容易错
- 某些配置文件(如 YAML、INI)靠空行分隔区块,删了会导致语法解析失败
- 列编辑常用于对齐注释、补全字段,这些场景恰恰需要保留原有行间距,只动目标行
真正容易被忽略的是:列选择本身不修改结构,但一旦你敲了回车或粘贴多行内容,Sublime 会按当前光标位置插入,空行仍在原位 —— 所以别试图“让列选跳过去”,而是让光标“精准落在该落的地方”。

















