InVerse1 downloadsUnified vault, command, property, link, and web search, with CJK full-text indexing and a floating search bar.
Radar Search 是一款用于 Obsidian 的统一搜索插件。提供 Vault、全局及互联网搜索,正文索引、中文 bigram 检索、命令、属性、标签、书签、链接、搜索预设和历史分页。
main.js、manifest.json、styles.css,或使用下方开发命令自行构建。.obsidian/plugins/primecore-search/。仓库使用自定义配置目录时,以该目录为准。浮动搜索框直接挂载搜索栏容器,宽度为视口的 70%,水平居中,顶部位于视口高度的 30% 处。后方遮罩复用 Obsidian 命令面板的 modal-container mod-dim 和 modal-bg 样式,颜色采用原生 --background-modifier-cover,透明度及效果由 Obsidian 和当前主题控制;搜索栏本身保持原有不透明度。搜索模式、搜索、搜索选项和清除按钮的背景使用 --background-primary,悬停背景使用 --background-secondary,随主题自动变化。打开后直接聚焦输入框,按 Esc 或点击遮罩关闭。搜索页在独立标签页打开,再次执行命令时激活已有搜索页并聚焦输入框。两种入口共享设置、历史与索引,同时打开时各自保留搜索栏状态。
Vault 与全局模式输入后延迟 200ms 自动搜索。内容、标签、链接等已启用的分类显示在结果浮动菜单内部的顶栏,采用横向菜单和主题高亮下边框;零结果分类置灰且不可点击,键盘导航跳过这些分类。全部无结果时,下方显示“什么都木有”和大号空收件箱图标;临时过滤入口仍可用于清除筛选。浮动结果右上角的“在搜索页打开”会保留关键词、分类、预设、筛选条件和排序,并关闭浮动框。
搜索页把结果直接显示在搜索栏下方,不再弹出结果菜单;更改关键词或分类会更新页面结果。Vault 与全局模式省略重复的搜索按钮,页面内回车立即搜索,浮动菜单内上下键选择、回车打开当前结果。互联网模式保留搜索按钮执行网页搜索。页面中打开文件会使用新标签页,保留搜索页以便继续浏览。
内容摘要保留原文匹配范围。点击某条摘要会打开编辑视图、选中并滚动到对应匹配处;定位时根据当前正文重新解析,处理重复词、中文、换行与搜索后的文本编辑。
输入框背景始终使用 --background-secondary。聚焦时边框使用 --interactive-accent,失焦时使用 --background-modifier-border;焦点切换只改变边框颜色。
笔记内嵌入口,无需 Dataview:
```primecore-search
```
此代码块在阅读视图或 Live Preview 渲染代码块时显示搜索栏。
设置仅从插件自身 data.json 读取,通过 Obsidian loadData/saveData 保存。首次安装使用默认值,不读取外部脚本配置。加载时补全默认值、剔除未知字段,不再转换过时的数据格式。
主设置页包含 20 项设置。Vault 搜索中的正文、专项搜索、内容上限、排序、上下文和默认预设共 13 项,统一由“搜索选项 → 配置搜索选项”按钮进入设置子视图,修改后自动保存。搜索栏中的搜索选项与设置子视图操作相同的插件配置。
排除路径通过“配置”按钮进入子视图。所有子视图顶栏提供“返回”,返回时恢复父视图的滚动位置、焦点和未保存草稿。
配置页不需要编辑 JSON。搜索引擎、信息源和预设采用可增删的表格;预设路径和引擎的更多选项通过按钮进入子视图,不在表格中展开,也不打开 Modal。条目子视图使用独立草稿,直接返回不改动条目,点击“应用”后返回所属表格,仍需保存表格。排除路径使用逐项列表,索引使用开关。复杂结构统一支持“保存修改 / 还原”;空行、重复项和无效网址会阻止保存。
表格、列表和开关编辑器均在内容上方设置操作顶栏,添加、保存、还原等按钮放在同一行,窄屏自动换行。配置、编辑、删除、返回和应用按钮也统一使用“图标 + 标签”的横向样式,背景透明。
分组标题、编辑顶栏和子视图标题均在左侧显示对应图标。主视图省略重复的“设置”总标题,分组标题采用统一的紧凑样式;表格名称与说明直接显示在顶栏和内容区上方。
各文本输入提供示例占位提示。预设重命名、引擎标识修改或删除时,默认选择同步更新,相关模型一次保存。编辑器使用 Obsidian 原生控件,表格可在窄屏横向滚动,不依赖 EmbedUI 运行时。
历史天数限制控制显示范围,不自动删除记录;“永久”模式查询所有日期。
插件不依赖 Dataview、EmbedUI、Iconize 或仓库中的动态脚本。索引引擎打包到插件,实例按插件隔离。普通图标通过 Obsidian 原生 Lucide API 渲染,预设图标填写 folder、lightbulb 等原生名称,不解析第三方图标前缀。颜色继承当前 Obsidian 主题,支持底部卡片与防滚动误触交互。
插件标志将放大镜镜片替换为雷达,由 assets/search-radar.svg 统一定义,通过 Obsidian addIcon/setIcon 用于 Ribbon、搜索页和搜索图标。构建时同时将 SVG 嵌入 dist/styles.css,可用 .primecore-search-logo 类显示随 currentColor 变化的图标,不需要安装图标插件。
搜索历史保存在配置目录下的 plugins/primecore-search/history/。索引仅保存在内存,按需后台建立;关闭最后一个搜索实例时释放索引和监听器。多视图历史写入及插件设置写入均使用串行队列,避免覆盖。
插件无遥测,不读取仓库外文件。全局与互联网搜索会通过 Obsidian requestUrl 向已启用的建议词接口发送输入文本,并在执行互联网搜索时打开相应 URL;如不希望发送输入,可关闭相关引擎或将其 suggest 清空。内置浏览器需启用 Obsidian Web viewer,否则回落外部浏览器。命令和书签查询沿用 Obsidian 内部注册表,未来 Obsidian 版本变更可能影响这些接口。
源码、构建脚本和测试均使用 TypeScript,需要 Bun 1.3+,运行需 Obsidian 1.7.2+,以支持等待延迟页面加载完成的 revealLeaf API。开发依赖包括 TypeScript、Obsidian 类型与 ESLint,运行时 Obsidian API 由宿主提供。
bun install --frozen-lockfile
bun run check
bun test --timeout 5000
bun run build
| 目录 | 职责 |
|---|---|
src/main.ts |
插件生命周期、命令、视图、Markdown 内嵌与实例管理 |
src/settings/ |
默认值、校验、持久化、表格、顶栏与设置页内导航 |
src/search/ |
Vault / 全局 / Web 查询、元数据、摘要与索引引擎 |
src/history/ |
历史展示与并发安全存储 |
src/ui/ |
搜索栏、浮层、选项、分页、事件与响应式布局 |
src/shared/ |
常量、原生图标与触摸手势 |
搜索组件按职责拆分为行为 mixin。SearchBarComponent 组合行为并持有 UI 状态,继承 Obsidian Component 管理资源。设置主视图与子视图共用 SettingsForm,SettingsNavigation 管理视图栈,ActionToolbar 统一操作布局。各模块直接维护,构建不读取原仓库或重新提取代码。
测试覆盖当前配置校验、废弃字段清理、设置可达性、默认选择同步、串行持久化、多实例历史写入、防滚动误触、中文全文索引和引擎隔离。
发版规则见 AGENT.MD:Release 标题及 Git tag 必须与 manifest 版本完全一致,仅包含版本号,不加插件名或 v 前缀,例如 1.0.0;发布前运行与当前版本一致的命令,例如 bun run release:check 1.2.0。
结果分组直接作为顶栏横向菜单,静息时仅显示图标,悬停或键盘聚焦时显示标签及数量;命令与隐藏命令、内链与外链各自独立。内容区只显示当前选中类别,不再显示纵向折叠分组,也不保留旧分组展开设置。右侧“排序”和“临时过滤”均为透明的图标加标签按钮,打开结果区域中的子视图。
外链从 Markdown 正文提取 HTTP(S) URL,支持 Markdown 链接、引用定义、自动链接和普通网址,忽略围栏代码块、行内代码及注释;不依赖不含外链的 Obsidian 元数据缓存。点击外链匹配项目会打开包含它的笔记。
浮动结果菜单的整体尺寸受当前可视区域约束,内容过长时内部滚动,下方空间不足时向上显示。操作按钮默认只显示图标,悬停或键盘聚焦时显示标签;搜索选项按钮的标签始终显示,排序选项、多级排除选项和单选项也保留文字。
文件结果行尾与搜索选项面板内提供“多级排除”按钮,列出当前笔记及从近到远的父目录;搜索栏不再重复放置该按钮。菜单顶端以左侧 check 图标标记“临时过滤”或“写入预设”,切换时菜单保持打开。临时排除仅影响当前搜索,也随搜索状态带入页面;写入预设可直接更新所选黑名单预设,选择“新建预设…”后点击排除目标进入名称填写视图。正在使用白名单时,额外排除仍然生效且保留原来的包含条件。
临时过滤只影响当前搜索的仓库文件结果,适用于 Vault 和全局模式,并随“在搜索页打开”传递;不影响网页建议或命令。点击“应用”后使用临时条件,点击“清除临时过滤”后恢复当前预设或全局排除规则。直接返回不应用草稿。
点击“保存为预设”会切换到命名视图,填写名称并点击“保存预设”后才写入插件设置。空名称、重复名称和错误规则会阻止保存。保存后用于当前搜索,不改变默认预设。设置页中的预设表格也支持添加常用预设;过滤规则编辑器提供目录自动补全与常用规则插入,修改后需保存表格。
同一套规则适用于全局排除列表、保存的预设及局部临时过滤。每行一条,同组多条规则按“任意一条匹配”合并,再按黑名单排除或白名单保留:
| 写法 | 含义 |
|---|---|
Projects/Archive |
该目录及其子目录;不会误匹配 ArchiveOld |
path:Projects/[notes] |
按字面匹配文件或目录,方括号等字符不会作为通配符解释 |
exclude:path:Work/assets |
强制排除;可在白名单中保留包含条件并排除指定子目录 |
glob:**/assets/** 或 **/assets/** |
任意层级的 assets 目录及其内容 |
glob:**/{assets,attachments,附件}/** |
任意层级的多个附件目录 |
glob:**/*.md |
所有 Markdown 文件;使用白名单表示仅搜索 Markdown |
| `regex:/.(png | jpe?g |
**/assets/** 属于 glob 通配模式:* 匹配一层路径内的字符,** 可以跨越多层目录。glob 匹配由打包在插件内的 Picomatch 提供,不会请求网络;匹配包含隐藏目录。正则必须加 regex: 前缀,可用 regex:表达式 或 regex:/表达式/标志,对仓库相对路径执行匹配。不支持任意 Obsidian 搜索查询语法。
原先调用 Components/PrimeCore/primecore-searchbar.js 的 DataviewJS 块属于旧入口,不会随插件升级而改变。使用 Radar Search 命令、Ribbon 或 primecore-search 代码块打开新界面。