WebStorm 搜索替换排除 .git 等指定文件夹
场景
webstorm 在执行搜索与替换时,经常会出现 .git 文件夹中的内容
解决方法
对所需要忽略的文件夹右键后按如图操作即可

也就是右键目录 → Mark Directory as → Excluded。标记之后目录变成橙色,WebStorm 不再对它建索引,全局搜索(Cmd + Shift + F)也就不会命中它里面的内容。
.git 为什么会出现在搜索结果里
.git 默认是在 Settings → Editor → File Types → Ignored Files and Folders 列表里的,正常情况下搜不到。会搜到通常是两种情况:
一是你之前为了看 .git 目录,把它从那个 Ignored 列表里删掉了。删掉之后它就变成一个普通目录,跟着一起被索引和搜索。
二是搜索时的 Scope 选错了。搜索面板右侧有个作用域下拉,选项的含义差别很大:
In Project— 默认值,只搜项目里的源码,跳过 Excluded 目录和 Library。Module— 只搜当前模块。Directory— 只搜指定目录,可以配合下面的Recursively勾选。Scope— 用自定义作用域,下面单独说。All Places— 搜一切,包括node_modules、Excluded 目录、外部库的源码。这个选项就是「明明标记了 Excluded 还是搜得到」的原因。
发现搜索结果里混进了不该有的东西,第一件事是看这个下拉是不是被切成了 All Places。它会被记住,一次切换之后后面所有搜索都受影响。
自定义 Scope:比 Excluded 更精细
Excluded 是一刀切的——标记之后 IDE 完全不索引,代价是那个目录里的代码彻底失去补全和跳转。但有些目录并不适合这么处理,比如:
public/下的静态资源,偶尔要搜里面的配置- 老代码目录,平时不想搜到但需要跳转
- 测试目录,做重构时需要搜、日常开发不想被干扰
这时候用自定义 Scope 更合适:定义一个「只搜业务代码」的作用域,日常用它,需要全搜的时候切回 In Project。
配置路径:Settings → Appearance & Behavior → Scopes,点 + 新建一个 Local(只自己用)或 Shared(存进 .idea/scopes/,可以提交给团队)。
界面上可以在目录树里逐个点 Include / Exclude,但更快的方式是直接写 Pattern 表达式:
file[项目名]:src/*//*
排除某些目录的写法是用 &&!:
file:*//*&&!file:node_modules//*&&!file:dist//*&&!file:*.min.js
语法要点:
//*表示递归包含所有子目录,只写/*只匹配当前一层&&是与,||是或,!是非- 可以直接写文件名通配,比如
!file:*.map排掉 sourcemap
Shared 的 Scope 存成 .idea/scopes/<名字>.xml,把这个文件提交进 git,团队里所有人都能在搜索面板的 Scope 下拉里看到它。这比让每个人自己配一遍靠谱。
搜索面板里的其它过滤手段
除了 Scope,Find in Files 面板上还有几个常被忽略的按钮,实际比换 Scope 更快:
File mask — 右侧那个输入框,填文件名通配就只搜匹配的文件。支持多个模式用逗号分隔,也支持取反:
*.ts,*.tsx 只搜 TS 文件
!*.spec.ts 排掉测试文件
*.vue 只搜 Vue 组件
这个是我用得最多的,比配 Scope 轻量得多。搜一个组件名的时候填 *.vue,噪音立刻少一半。
Cc(Match case) — 区分大小写。搜 Id 不想匹配到 id 时必开。
W(Words) — 全词匹配。搜 get 不想匹配 getUser、target 时用它。
.*(Regex) — 正则模式。开了之后可以用捕获组,而且替换时能用 $1、$2 引用捕获组,这是批量重构最有用的功能。比如把所有 console.log('xxx') 改成带前缀的:
查找:console\.log\((['"])(.+?)\1\)
替换:console.log($1[debug] $2$1)
正则模式下还支持 \n 匹配换行,可以做跨行的查找替换。
相关快捷键
搜索这一块的快捷键值得全记住,因为用得太频繁(macOS / Windows):
Cmd + F/Ctrl + F— 当前文件内查找Cmd + R/Ctrl + R— 当前文件内替换Cmd + Shift + F/Ctrl + Shift + F— 全局查找Cmd + Shift + R/Ctrl + Shift + R— 全局替换Shift + Shift— Search Everywhere,搜文件名/符号/设置项,什么都能搜Cmd + Shift + O/Ctrl + Shift + N— 按文件名找文件Cmd + Option + O/Ctrl + Alt + Shift + N— 按符号名(函数、变量、类)找Option + F7/Alt + F7— 查找当前符号的所有用法(Find Usages)
最后这个 Find Usages 特别值得强调:它是基于索引和语义的,不是文本匹配。搜一个函数名,它只会列出真正调用这个函数的地方,不会把注释里、字符串里、以及同名但不同作用域的变量算进去。想改一个函数的签名、想确认某个变量还有没有人用,永远优先用 Find Usages 而不是文本搜索。这也是 Excluded 目录的一个隐性代价——被排除的目录不建索引,Find Usages 就查不到它里面的引用,重命名重构时会漏改。所以标记 Excluded 之前,先想清楚那个目录里会不会有活代码引用你的符号。
全局替换前的自保动作
全局替换是少数几个能一次性搞坏整个项目的操作,做之前建议固定两步:
1. 确保工作区干净。git status 看一眼没有未提交的改动,出问题直接 git checkout . 全部回滚。
2. 先 Find 再 Replace。WebStorm 的替换面板有个 Preview 区域会列出所有匹配项,逐条看一遍再点 Replace All。数量对不上就说明模式写得太宽了。
替换完之后如果发现错了,除了 git,还有一条退路:Edit → Undo(Cmd + Z)在全局替换后按一次能整体撤销,IDE 把它当成单个原子操作。但这只在你还没做其它编辑操作时有效,所以发现问题要立刻撤,别先去改别的文件。
另外 Local History 也能救:右键项目根目录 → Local History → Show History,WebStorm 自己维护了一份独立于 git 的本地变更历史,能按时间点回滚。这个功能在还没 git init 的项目里尤其有用。

还没有留言,来发表第一条吧~