Search Like IntelliJ
一个 VS Code 插件,实现类似 IntelliJ IDEA Search Everywhere 的文件和文本搜索面板。
功能
- 命令:
Search Like IntelliJ: Open Search
- 弹窗命令:
Search Like IntelliJ: Open Popup Search
- 快捷键:Windows/Linux
Ctrl+Shift+;,macOS Cmd+Shift+;
- 同时搜索工作区文件名和文件内容
- 自动忽略工作区根目录
.gitignore 中匹配的文件和文件夹
- 面板中显示搜索结果列表
- 默认选择结果时在旁边使用单个 VS Code 原生编辑器预览窗口,焦点保留在搜索面板
- 可配置为在
Open Search 面板下方使用带行号的 webview 编辑器或 Monaco 编辑器
- Monaco 编辑器主题默认跟随 VS Code,也可以手动配置为 Light、Dark 或 High Contrast
- 文本结果会定位到命中行
- 打开的文件中会用黄色标出当前搜索字符串
- 双击搜索结果会打开对应文件编辑窗口
- 语法高亮和编辑使用 VS Code 原生编辑器能力
webviewEditor 和 monacoEditor 模式下,编辑后会自动保存到真实文件
- 关闭
Open Search 面板时,会同步关闭当前预览窗口
默认快捷键打开 Search Like IntelliJ: Open Search 面板。Search Like IntelliJ: Open Popup Search 保留为 VS Code QuickPick 弹窗版搜索,选择结果后会打开对应文件并定位到命中行。
配置
searchLikeIntellij.preview.mode 控制 Open Search 的预览方式:
nativeEditor:默认值,在旁边打开 VS Code 原生编辑器。
webviewEditor:在 Open Search 面板下方显示带行号的文本编辑器,编辑后自动保存,当前命中会以黄色选区显示。
monacoEditor:在 Open Search 面板下方显示带行号的 Monaco 编辑器,编辑后自动保存,搜索字符串会以黄色标出。
searchLikeIntellij.preview.side 控制预览位置:
right:默认值,搜索结果在左侧,预览在右侧。
left:预览在左侧,搜索结果在右侧。
top:预览在上方,搜索结果在下方。适用于 webviewEditor 和 monacoEditor。
bottom:搜索结果在上方,预览在下方。适用于 webviewEditor 和 monacoEditor。
searchLikeIntellij.preview.monacoTheme 控制 monacoEditor 模式下的 Monaco 主题:
Auto:默认值,跟随 VS Code 当前主题。
Light:使用 Monaco light theme。
Dark:使用 Monaco dark theme。
High Contrast:使用 Monaco high contrast dark theme。
searchLikeIntellij.highlight.color 控制搜索命中的高亮颜色,默认值:
"searchLikeIntellij.highlight.color": "#ffd33d"
searchLikeIntellij.openSearch.searchOptions 控制 Open Search 搜索范围,默认值 Text:
All:搜索文件名和文件内容。
File:只搜索文件名。
Text:只搜索文件内容。
searchLikeIntellij.openPopupSearch.searchOptions 控制 Open Popup Search 搜索范围,默认值 All:
All:搜索文件名和文件内容。
File:只搜索文件名。
Text:只搜索文件内容。
searchLikeIntellij.search.mode 控制搜索实现:
Default:默认值,使用 VS Code 工作区 API 和插件内置文本读取逻辑,不调用外部工具。
Custom Tools:使用外部工具搜索文件名和文件内容。
Custom Tools 模式下可以配置:
searchLikeIntellij.search.fileTool:文件名搜索工具,默认 fzf,支持 fd、fd.exe、find、find.exe、fzf、fzf.exe 或可执行文件全路径。
searchLikeIntellij.search.fzfSort:控制 fzf 文件搜索是否按 fzf 分数排序,默认 false,性能优先。设为 true 时会移除 --no-sort,结果相关性更好但会增加排序开销。
searchLikeIntellij.search.textTool:文件内容搜索工具,默认 rg,支持 rg、rg.exe、grep、grep.exe 或可执行文件全路径。
searchLikeIntellij.search.useGitIgnore:是否排除工作区根目录 .gitignore 匹配的文件和文件夹,默认 true。
searchLikeIntellij.search.excludeDirectories:gitignore 风格的目录排除规则,默认 node_modules、.git、out、dist、build、.next、coverage;支持 packages/a/node_modules、dist-*,设为 [] 可关闭目录排除。
searchLikeIntellij.search.excludeFiles:gitignore 风格的文件排除规则,默认 [],例如 *.map、package-lock.json、generated/*.ts。
可以通过 Command Palette 执行以下命令检查工具配置:
Search Like IntelliJ: Check File Search Tool
Search Like IntelliJ: Check Text Search Tool
Search Like IntelliJ: Check Search Tool Configuration
匹配模式
Open Search 支持三个匹配按钮:
Aa:区分大小写。
ab:whole word,全词匹配。
.*:正则表达式。
Aa 和 ab 可以叠加;.* 与 Aa / ab 互斥。
文件内容搜索中:
- 默认是忽略大小写的字面量包含匹配。
Aa 会启用区分大小写。
ab 会启用 whole word。
Aa + ab 会启用区分大小写的 whole word。
.* 会把查询文本作为正则表达式。
文件名搜索中:
- 默认是忽略大小写的文件名包含匹配。
Aa 支持区分大小写。
.* 支持正则表达式。
ab 主要用于文件内容搜索。Default 模式下文件名 ab 使用 \bquery\b 单词边界匹配;Custom Tools 模式下 fd / find 不做真实 whole word 文件名匹配,ab 等同普通包含匹配,Aa + ab 等同 Aa。
Custom Tools 的普通文件名搜索会把 query 转换成 glob 包含匹配,例如 config 会生成 *config*。
- 当
searchLikeIntellij.search.fileTool 配置为 fzf / fzf.exe 时,文件名搜索使用 fzf fuzzy filter。插件会优先用 fd 按当前搜索范围枚举候选文件,再执行类似 fzf -i --filter "afcon" --no-sort 的过滤;如果 fd 不可用,会回退到 VS Code API 收集候选。afcon 可以匹配 af_push_consumer.go。如果开启 searchLikeIntellij.search.fzfSort,则不传 --no-sort。
说明
VS Code 扩展 API 不能可靠捕获“单独按两次 Shift”这类纯修饰键事件,因此插件提供命令和可配置快捷键。你可以在 VS Code 的 Keyboard Shortcuts 中把 searchLikeIntellij.open 改成自己喜欢的组合键。
开发
npm install
npm run compile
然后在 VS Code 中按 F5 启动 Extension Development Host。