# LazyTabs [中文](README.md) | [English](README.en.md) ![LazyTabs 图标](public/icon/128.png) 按自定义规则自动整理 Chrome 标签页。 LazyTabs 会在标签页创建或网址发生变化时,将匹配规则的页面放入对应的 Chrome 标签组;也可以一次整理当前窗口(或全部窗口)中已经打开的标签页。 ## 功能 - 按域名、完整 URL 或页面标题匹配,支持包含、前缀、后缀、完全相等和正则五种操作符 - 每个分组可包含多条规则,每条规则可包含多个条件,命中任一条件即可归入分组 - 为每个分组设置名称和标签组颜色,颜色可选自动随机 - 单独启用或停用分组 - 一键暂停或恢复自动分组 - 手动整理当前窗口或全部窗口,自动分组暂停时仍可使用 - 整理后折叠其他分组,聚焦标签所在的分组保持展开 - 可选:整理后把未分组的标签页移到窗口末尾 - 浅色、深色、跟随系统三种主题 - 设置可导出、导入(JSON) - 在设置页检查新版本 - 跳过固定标签页和无痕标签页 ## 安装 ### 从 Release 下载 1. 打开 [最新 Release](https://github.com/CuartPyaw/Lazytabs/releases/latest),下载 `LazyTabs.zip`。 2. 解压下载的 ZIP 文件。 3. 打开 `chrome://extensions`。 4. 开启右上角的“开发者模式”。 5. 点击“加载已解压的扩展程序”。 6. 选择解压后的 `LazyTabs` 目录。 ### 构建并加载 ```bash npm install npm run build ``` 然后在 Chrome 中: 1. 打开 `chrome://extensions`。 2. 开启右上角的“开发者模式”。 3. 点击“加载已解压的扩展程序”。 4. 选择项目下的 `.output/LazyTabs` 目录。 ### 开发模式 ```bash npm run dev ``` 开发构建启动后,在 `chrome://extensions` 中重新加载扩展即可应用更新。 ## 快速开始 1. 点击扩展图标,打开设置页。 2. 添加一个分组,填写分组名称和标签组颜色。 3. 为该分组添加匹配规则;每条规则可包含多个条件,条件由“字段 × 操作符 × 值”构成。 4. 保存分组,并保持该分组和“自动分组”都处于启用状态。 5. 打开或跳转到匹配网页时,标签页会自动归入对应标签组。 6. 点击弹窗中的“整理标签页”,可立即整理当前窗口已有的标签页。 扩展还注册了“整理当前窗口”命令,默认快捷键为 `Alt+O`,可在 `chrome://extensions/shortcuts` 中修改。快捷键始终只整理当前窗口;弹窗按钮的整理范围由“通用”设置决定。 ## 匹配条件 每个条件由匹配字段、操作符和值三部分组成。 字段: | 字段 | 说明 | | --- | --- | | 域名部分 | 页面主机名,仅对 HTTP(S) 页面生效,不区分大小写 | | 完整 URL | 页面的完整地址,区分大小写 | | 页面标题 | 标签页标题,区分大小写 | | 页面标题(忽略大小写) | 标签页标题,不区分大小写 | 操作符: | 操作符 | 说明 | | --- | --- | | 包含 | 字段值包含匹配值 | | 前缀为 | 字段值以匹配值开头 | | 后缀为 | 字段值以匹配值结尾 | | 完全相等 | 字段值与匹配值完全一致 | | 正则匹配 | 匹配值作为正则表达式 | 保存分组时会校验: - 分组名称不能为空,且不能与其他分组重复 - 至少添加一条匹配规则,每个条件都必须填写匹配值 - 正则表达式必须有效 - 已启用分组之间不能存在可能同时命中的条件 一个分组可以包含多条规则,每条规则可以包含多个条件,命中任意一个条件即可归入该分组。分组按顺序匹配,因此应避免让不同分组覆盖相同的匹配范围。 ## 通用设置 - **整理后折叠其他分组**:整理完成后只保留聚焦标签所在的分组展开 - **整理后把未分组标签页移到最后一个分组后面**:把未匹配任何分组的标签页统一移到窗口末尾 - **整理全部窗口**:开启后,弹窗中的“整理标签页”作用于所有窗口而非仅当前窗口 ## 开发 ```bash npm install npm run dev ``` 常用命令: | 命令 | 说明 | | --- | --- | | `npm run dev` | 启动 WXT 开发构建 | | `npm run build` | 生成生产构建到 `.output/LazyTabs` | | `npm test` | 运行 Vitest 单元测试 | | `npm run typecheck` | 运行 TypeScript 类型检查 | 项目使用 TypeScript、React、WXT 和 HeroUI 构建。核心规则、设置与标签组逻辑位于 `src/lib/`,弹窗和设置页分别位于 `entrypoints/popup/` 与 `entrypoints/options/`。 ## 权限 - `storage`:保存分组规则和设置 - `tabs`:读取标签页及其网址、标题 - `tabGroups`:创建、更新和复用 Chrome 标签组 - `https://api.github.com/*`:在设置页检查新版本 ## 反馈 有问题、建议或功能需求,请[提交 Issue](https://github.com/CuartPyaw/Lazytabs/issues)。 ## 许可证 本项目采用 [MIT License](LICENSE) 开源。