
知识管理知识库开发工具MCP 服务【免费下载链接】foamA personal knowledge management and sharing system for VSCode项目地址https://gitcode.com/gh_mirrors/fo/foam点击查看免费下载导读Smart Folders智能文件夹是 Foam 在 VS Code 资源管理器中呈现已保存查询的方式每个智能文件夹都是一个存放在.foam/queries/id.yaml下的查询文件按需实时执行并把匹配到的笔记以树形或列表形式展示在侧边栏。本文将以 docs/user/features/smart-folders.md 为核心结合foam-vscode与foam-core的源码实现系统讲解智能文件夹的创建、编辑、删除、视图选项以及底层查询语法与存储机制帮助你在大规模工作区中摆脱僵化的标签层级用查询代替手动的目录组织。Smart Folders 是什么Smart Folders 的核心思想是文件夹不存储文件只存储筛选条件。它由三部分组成一个 YAML 查询文件位于工作区.foam/queries/目录文件名即查询 idFoam 查询引擎foam/core中的executeQuery——按查询描述符在工作区中筛选笔记VS Code 树视图SmartFoldersProvider——把匹配结果渲染到侧边栏。典型场景是创建一个名为 Work in Progress 的智能文件夹只显示打了#wip标签、且没有#archive标签的笔记见 foam-queries 中保存查询的示例。这样笔记物理上可以分散在任何目录但视图上始终聚合在同一个逻辑分组下非常适合跨目录检索大型工作区。从源码结构看智能文件夹与内联查询foam-query代码块共享同一套查询语法和引擎saved-store.ts 中的QueryStore负责读写.foam/queries/下的 YAML 文件而树视图直接调用foam/core的executeQuery执行查询见 smart-folders-explorer.ts因此保存的查询和内联查询可以互相复制、完全等价。创建 Smart Folder通过面板或命令创建创建智能文件夹有两种入口见 create-smart-folder.ts打开资源管理器中的Smart Folders面板点击Create Smart Folder对应命令foam-vscode.views.smart-folders.create或在命令面板运行Foam: Create Smart Folder。创建流程分两步交互输入名称例如Work in Progress多选要包含的标签可选按 Esc 跳过直接进入 YAML 手动编辑。完成后 Foam 会在.foam/queries/name.yaml生成查询文件并自动打开编辑。名称如何变成文件名输入的名称会先经过sanitizeQueryId处理成文件系统安全 id实现见 saved.ts全部转小写空白与非法字符替换为-去掉首尾的-合并连续-。例如Work in Progress→work-in-progress.yamlresearch/animals→research-animals.yaml。如果生成的 id 已存在创建逻辑会自动追加序号-2、-3……直到不冲突见 create-smart-folder.ts。若名称无法产生有效 id例如只含符号Foam 会提示改用字母、数字、连字符或下划线。标签选择背后的过滤逻辑多选标签后Foam 会构建一个或过滤器buildOrFilter只选 1 个标签 →filter: { tag: #wip }选择多个标签 →filter: { or: [ { tag: #a }, { tag: #b } ] }即匹配任意一个所选标签的笔记都会出现工作区没有任何标签或按 Esc 跳过选择 → 生成filter: *匹配全部笔记留待你在 YAML 中细化。生成的文件随后通过QueryStore.save写入磁盘见 saved-store.ts文件名由 id 决定因此重命名文件即重命名查询。编辑 Smart Folder编辑有两种方式点击面板中智能文件夹旁边的铅笔图标命令foam-vscode.views.smart-folders.edit会自动打开对应的 YAML 文件直接打开.foam/queries/id.yaml手动编辑。改动会自动生效SmartFolderStorage为.foam/queries/*.{yaml,yml}注册了FileSystemWatcher文件创建、修改、删除都会触发树视图刷新见 smart-folder-storage.ts 与 index.ts。此外工作区图谱foam.graph的更新同样会触发刷新因此笔记标签、链接变化后智能文件夹的结果也会随之更新。YAML 文件结构一个保存的查询文件把查询字段直接放在 YAML 根级可选两个包装字段name: Work in Progress # 可选缺省时由文件名转成人类可读形式 description: Notes I am editing # 可选 filter: and: - tag: #wip - not: tag: #archive sort: title ASC limit: 50最简有效文件只需一行filter: #wip。字段说明完整语法见 foam-queriesfilter选择包含哪些笔记select选择展示哪些字段默认title和pathsort排序例如title ASC或backlink-count DESC被排序的字段需同时出现在select中否则投影后不可用limit/offset限制返回条数 / 跳过前 n 条formatlist、table或count。从解析器源码saved.ts看根级只允许name、description以及filter、select、sort、limit、offset、format这些字段出现未知字段会被记为解析警告warning 而非硬错误并在树视图中以errors条目呈现。filter 支持的筛选键tag拥有该标签的笔记如tag: #researchtype指定类型的笔记如type: daily-notepath路径匹配正则的笔记如path: ^/projects/title标题匹配正则的笔记links_to/links_from链接到 / 被链接自某笔记 id 的笔记可用$current指代当前笔记jexl针对每条笔记求值的 Jexl 表达式如resource.tags|length 2可访问resource对象及length、lower、upper等内建变换and/or/not逻辑组合简单快捷形式#tag、[[note-id]]、/regex/、*全部笔记。删除 Smart Folder点击智能文件夹旁的垃圾桶图标并确认即可删除对应的 YAML 文件会被移除。源码实现create-smart-folder.ts会先弹出模态确认框只有选择Delete才调用storage.delete(id)QueryStore.delete会检查文件存在再删除见 saved-store.ts。删除后FileSystemWatcher的onDidDelete事件会清掉内存缓存并刷新视图。视图选项面板标题栏提供两个开关Group By Folder / Flat list把匹配的笔记按工作区路径分组为目录树或以扁平列表展示。该偏好通过ContextMemento持久化在foam-vscode.views.smart-folders.group-by状态中默认folder见 smart-folders-explorer.ts由命令foam-vscode.views.smart-folders.group-by:folder和group-by:off控制Refresh按需重新执行所有查询。refresh()会清空结果缓存uriCache并重建树见 smart-folders-explorer.ts。树视图本身由SmartFoldersProvider驱动smart-folders-explorer.ts其行为要点顶层条目每个已保存查询一个条目图标为folder-library描述显示匹配笔记数若文件存在解析错误则显示为带警告图标、描述为errors的SmartFolderErrorTreeItem点击可直接打开查询文件见 smart-folders-explorer.ts分组模式buildFolderTree把匹配 URI 按工作区相对路径拆分为嵌套目录节点每个目录节点显示叶子数子项按名称排序smart-folders-explorer.ts错误隔离单个查询执行失败不会拖垮整个面板——异常被捕获并记录日志该文件夹显示为空结果对应测试见 smart-folders-explorer.spec.ts信任工作区查询可包含 Jexl 表达式仅在受信任trusted工作区执行与foam-query块的信任门槛一致未信任时默认() false保证安全见 smart-folders-explorer.ts。底层存储与文件约定理解以下几点可以更安全地手工管理智能文件夹目录与扩展名查询文件固定存放在.foam/queries/glob 为*.{yaml,yml}常量QUERIES_GLOB见 saved-store.ts注意这是查询专用目录Foam 普通笔记数据存储通常只覆盖**/*.md不会误扫到这些 YAMLid 来自文件名查询 id 由文件名去掉.yaml/.yml扩展名推导idFromQueryFilename不写在 YAML 内容里重命名文件即重命名查询见 saved.ts显示名缺省规则YAML 中省略name时显示名由 id 经humanizeQueryId自动生成例如work-in-progress→Work In Progress序列化时若name与缺省值相同会被省略saved.ts缓存与观察SmartFolderStorage在内存中缓存解析结果配合FileSystemWatcher增量更新避免每次刷新重读所有 YAMLsmart-folder-storage.ts查询执行结果也有uriCache在每次refresh()时清空smart-folders-explorer.ts。与 Foam Queries 的关系智能文件夹与 Foam Queries 是同一能力的两种形态内联形态在笔记中写foam-query代码块结果渲染在 Markdown 预览中持久形态把同样的字段写入.foam/queries/下的 YAML侧边栏的 Smart Folders 面板即为其展示层。两者的语法完全一致保存的查询文件与内联块可以互相复制。区别在于渲染位置与用途智能文件夹适合常驻侧边栏的工作视图如进行中的项目、待办聚合内联查询适合放在某篇笔记里按需展示。若需要把查询结果嵌入到其他笔记可参考 embeds。小结Smart Folders 把组织笔记从手工建目录、维护层级转变为编写并保存查询创建、编辑、删除、视图切换四个核心操作均可在面板内完成所有改动即时生效底层由foam-core的QueryStoreexecuteQuery与foam-vscode的树视图、文件监听器协作实现。掌握 查询语法filter 组合、排序、limit、Jexl 表达式等即可组合出如#wip且非#archive指向某主题的所有笔记按回链数排序的 TOP 10等动态视图让侧边栏真正反映笔记内容而非目录结构。赞分享知识管理知识库开发工具MCP 服务【免费下载链接】foamA personal knowledge management and sharing system for VSCode项目地址https://gitcode.com/gh_mirrors/fo/foam点击查看免费下载相关推荐i茅台自动预约神器5分钟快速上手的完整指南i茅台自动预约神器5分钟快速上手的完整指南 还在为每天手动预约茅台而烦恼吗还在担心错过预约时间而遗憾不已吗这款i茅台自动预约系统将彻底解放你的双手让茅台后端前端任务调度工作流自动化VS Code 侧边栏看不到 Kilo Code 图标怎么排查VS Code 侧边栏看不到 Kilo Code 图标怎么排查 安装完 Kilo Code 扩展后最常见的“失踪”现象是在 VS Code 左侧Prim人工智能大模型AI Agent代码智能体工具调用交互助手CLI如何用GTweak优化网络从协议到防火墙的完整流程如何用GTweak优化网络从协议到防火墙的完整流程 GTweak 是一款免费的便携式 Windows 优化工具无需安装即可一键完成网络优化、系统清理和隐私设桌面应用上一篇如何快速掌握witrGo语言系统诊断工具的完整使用指南下一篇Stable Diffusion 2.1模型训练原理深入理解潜在扩散模型工作机制创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考