Sublime没有安全多行重构,所有批量操作本质是文本暴力匹配;需人工确认语义边界,Ctrl+D逐词选中比Alt+F3更可控,支持实时校验、跳过误匹配(Ctrl+K)和撤回(Ctrl+U),变量含$或_时须转义或调整分词设置。

Sublime 没有“安全多行重构”这回事,所有看似批量的操作本质都是文本暴力匹配——能用的前提是你已人工确认过语义边界、作用域和上下文。
Ctrl+D 逐词选中比 Alt+F3 更可控
Alt+F3 会无差别匹配所有 \buser_id\b,包括 "user_id": "123"、/* user_id is deprecated */ 和 self.user_id(如果没配插件)。而 Ctrl+D 是增量式、可中断、可撤回的交互过程:
- 双击第一个
user_id选中它,按一次Ctrl+D只高亮当前词;再按一次才找下一个——你能实时看到它是否落在const user_id =左侧,还是掉进了 JSON 字符串里 - 看到误匹配,立刻按
Ctrl+U撤回上一个;想跳过当前项,按Ctrl+K再按Ctrl+D - 变量名含
$(如$data)时,查找必须写成\$data\b,否则$被当正则行尾锚点 - 下划线
_默认是 word separator,api_v2双击只选中api;临时解决:删掉设置里的_,或直接用\bapi_v2\b正则搜
Ctrl+Shift+L 拆行光标只对“含换行符的选区”生效
Ctrl+Shift+L 不是“给当前行加光标”,而是把「已有选区」按换行符切开,每行末尾放一个光标。失败几乎都源于选区没选对:
- 没选中任何内容就按
Ctrl+Shift+L,它静默失败;正确做法:先用Ctrl+L选中当前行,再连按Ctrl+L添加下一行到选区,最后按Ctrl+Shift+L - 选区末尾带空格或制表符?光标会落在空格后,一输内容就把缩进顶乱;建议先执行
Ctrl+Shift+P→Trim Trailing White Space - 拆完光标不在行首?立刻按
Home(Windows/Linux)或Cmd+←(macOS),所有光标会统一跳到各行开头 - 空行也会被拆出光标,且落在行首;如果不想改空行,拆前先用正则
^\s*$批量删空行,或手动跳过
项目级替换(Ctrl+Shift+H)必须先预览再执行
全局重命名类名、导出函数名、配置 key 这类跨文件标识符,不能靠 Ctrl+D 或 Alt+F3。必须用 Ctrl+Shift+H 配合 Where 范围和正则锚定:
- 确保已通过
Project → Add Folder to Project…加入代码根目录,并保存项目;否则 “Replace in Files” 范围不准 -
Where框里写src/**/*.js或!node_modules,!dist,*.py,明确排除无关路径 - 查找框填
(var|let|const)\s+oldName\b,替换为$1 newName,保留原声明关键字 - 务必先点
Find All,右侧边栏列出所有匹配项(含文件路径、行号、上下文);双击任一项跳转验证,发现"oldName"或注释里的就停手 -
Replace All不可撤回——除非你刚git commit或开了自动备份
跨文件重命名必须依赖插件,且默认不跨文件
Sublime 原生不支持语义级重命名。RenameSymbol 是目前最靠谱的插件,但它不是 IDE 级工具:
- 默认只在当前文件生效;必须手动开启跨文件:
"rename_across_files": true,否则Ctrl+Shift+R白按 - 必须禁用模糊匹配:
"fuzzy_match": false,否则user会误替username中的子串 - Python 中
self.xxx默认不参与重命名;要启用需加配置:"include_self_attributes": true - Vue 文件里嵌 JS,syntax 必须设为
JavaScript (Babel),否则async函数体内的变量不被识别 - 重命名前先按
Ctrl+Shift+R看预览列表:如果出现"user_id"(字符串)、# user_id is required(注释)或函数外层同名err,就别点确认
真正危险的不是不会操作,而是以为自己在做语义重构——其实只是在批量替换字符串。每次按下 Replace All 或确认重命名前,得清楚知道那串字符在几个作用域里被怎么使用,以及改完会不会让某个 if 块突然失效、某个 import 断掉、某条正则悄悄漏掉一行。

















