Sublime Text需配置"auto_find_in_selection": true才能让Ctrl+F/H自动限定在选区;未配置时须手动点击查找面板的“In Selection”按钮,且Alt+F3默认全文匹配,局部重命名应配合该模式或Ctrl+D逐个添加。

怎么限定查找只在选中文本内生效
Sublime Text 默认不自动限制查找范围,即使你选中了一段文本,按 Ctrl + F 仍会搜索整个文件。要让它只在选区里找,必须手动开启「Search in selection」模式。
最可靠的方式是提前配置:"auto_find_in_selection": true 加入用户设置(Preferences → Settings),保存后,只要存在选区,所有 Ctrl + F、Ctrl + H 操作都会自动限制在该范围内。
- 没配这个选项时,只能靠快捷键临时启用:先选中文本,再按
Ctrl + F,然后点击查找面板右下角的「In Selection」按钮(图标是虚线框) - 注意:该按钮是状态切换,不是常驻;每次新打开查找面板都要手动点一次
- 如果选区跨行且含换行符,正则模式下需用
\n显式匹配,普通文本搜索会忽略换行边界
用 Alt + F3 做局部重命名为什么有时会误选
Alt + F3 是全文档多光标选中,不是局部的——它不管有没有选区,直接扫完整个文件。真要做局部重命名,得配合「Search in selection」或手动缩小范围。
常见误操作:先选中一段函数体,再按 Alt + F3,结果光标跳到文件其他地方的同名变量上,导致改串逻辑。
- 正确做法:选中目标区域 → 开启「In Selection」→ 输入关键词 → 按
Ctrl + D逐个添加匹配项(更可控) - 或者:用
Ctrl + H替换,开启「In Selection」后点「Replace All」,只影响选区内匹配项 - 整词匹配(
Alt + W)建议始终开启,避免把user_id里的id单独替换成uid
Where 栏路径写法决定全局替换是否真正“全局”
很多人以为 Ctrl + Shift + F 就是项目级搜索,其实默认只搜当前已添加到侧边栏的文件夹,且不递归子目录,除非你显式写对路径语法。
例如想改 src/ 下所有 .js 文件但排除 node_modules:
- 写
./src/**/*.js:双星号**才表示递归子目录,单星号*只匹配一级 - 排除路径必须加减号前缀:
-./node_modules -./dist,中间空格分隔,不能写成逗号或换行 - 路径区分大小写,Linux/macOS 下
Src和src是不同目录 - 如果项目没加到侧边栏,
Where留空将无任何结果,必须填绝对路径或相对路径(如../my-project/src)
正则替换里 $1 和 $0 容易混淆的点
捕获组引用写错会导致替换结果为空或乱码,尤其是从其他编辑器迁移过来的用户,习惯用 \1,但在 Sublime 中必须用 $1。
比如要把 "name": "Alice" 改成 'name': 'Alice':
- 查找:
"(\w+)": "([^"]*)"(两个捕获组) - 替换:
'$1': '$2'—— 这是对的;写成'\1': '\2'会被当字面量处理,不解析 -
$0表示整个匹配内容,可用于加前缀:id_$0把123变成id_123 - 如果正则没写括号(即没定义捕获组),却用了
$1,Sublime 不报错,但对应位置直接留空
真正麻烦的是嵌套结构和转义组合,比如匹配 JSON 字符串中的引号又不想碰转义符 \",这时光靠 .* 很容易跨行或吞掉不该吞的内容。这种场景建议先关正则、用「Whole Word」+「Case Sensitive」手工过一遍,比调正则更快更稳。


















