Sublime Text 里“选中相同内容”这个操作,看似简单,实际上坑不少。很多人按着 Ctrl+D(Windows/Linux)或 Cmd+D(macOS)一直点,以为能一口气扫完整个文件,结果要么漏掉几处,要么卡在注释里,甚至把 user_id 里的 user 也揪出来——这不是 bug,是它本来的逻辑。下面把几个常用方法拆开讲清楚,包括它们各自的脾气和风险点。

Ctrl+D 是增量选中,不是全选
很多人以为按着 Ctrl+D 一直点就能“扫完所有”,结果发现漏掉几处、卡在注释里、甚至把 user_id 里的 user 也误选了——这可不是 bug,而是它设计好的逻辑:Ctrl+D 只找“当前光标所在词”的下一个严格匹配项,从当前位置开始向下线性扫描,不回溯、不跳过字符串、也不管你是不是真想改那儿。
常见错误现象包括:
- 按了没反应:光标停在空格、括号、引号内,或变量名含
-(比如user-name会被切开) - 只选中两个就停了:该词在文档中实际只出现两次,或中间被折叠代码块挡住
- 误选了
username:因为没启用 "Whole Word" 模式,Ctrl+D默认按字符匹配,不识别单词边界
真正可控的做法是:
- 先双击目标变量(如
api_timeout),确保整词被选中 - 再按
Ctrl+D,第一次选中当前项,之后每按一次追加一个 - 遇到不想改的(比如字符串里的同名字段),按
Ctrl+K再按Ctrl+D跳过 - 选多了?按
Ctrl+U撤销上一次添加,比狂按Esc精准得多
Alt+F3(Win/Linux)或 Ctrl+Cmd+G(macOS)才是真·全选
Alt+F3(Windows/Linux)或 Ctrl+Cmd+G(macOS)会一次性为当前光标下单词的所有匹配位置创建光标,但它有个硬前提:光标必须落在目标词的任意一个字母上,不能悬在空格或符号后。
这个操作默认开启 "Whole Word" 和 "Match Case",所以:
api_timeout不会匹配api_timeout_v2或Api_Timeout- 如果想忽略大小写,得先按
Ctrl+Alt+U切换开关 - 如果想匹配子串(比如所有含
id的变量),得先按Alt+W关掉 Whole Word
风险点也很明确:
- 它不区分作用域——注释、字符串、JSON 值里的相同文本全会被拉进来
- 匹配数超 500 时(比如日志里满屏
i),界面可能明显卡顿甚至无响应 - 它只作用于当前文件,不会跨标签页生效
用 Ctrl+F + Alt+Enter 最稳妥
当你不确定 Alt+F3 会不会误伤,或者需要加条件(比如限定只改 JS 区域、排除注释),走查找流程最可控——看得见匹配数,也方便调参。
操作路径很固定:
- 把光标放在目标词上(如
log),按Ctrl+F,Sublime 会自动填入该词 - 点右下角图标切换模式:
Alt+W开/关 Whole Word,Alt+C控制大小写,Alt+R开正则(如\blog\b) - 左下角看到 "73 matches" 这类提示后,再按
Alt+Enter(Win/Linux)或Cmd+Ctrl+G(macOS)全选
千万注意:
Ctrl+F框为空时按Alt+Enter,Sublime 会尝试匹配空字符串,导致每行开头都插光标,极易卡死- 正则模式下,
.、*、^等元字符需转义(如\.),否则会被当字面量处理
为什么全选后改错变量名还编译不过
多光标选中后直接输入,所有位置同步响应——但 Sublime 不懂语义。它不会判断你改的是函数参数、对象属性,还是字符串里的键名。所以:
- 改
data时,"data": true和const data = {}都会被动,但前者可能破坏 JSON 结构 - 改
class时,class="btn"和class MyComponent都会被命中,但后者是语法关键字 - JSX 中
className和 HTML 的class混在一起,全选容易误伤
最容易被忽略的一点是:Sublime 的“全选相同”永远基于当前视图的纯文本,没有 AST 解析能力。重命名前,务必先用 Ctrl+Shift+F 查一遍上下文分布,确认是否真只出现在你要改的地方。