OlaProeis/Ferrite
GitHub: OlaProeis/Ferrite
基于 Rust 和 egui 构建的轻量级本地编辑器,专注于 Markdown 和配置文件(JSON/YAML/TOML)的编辑与预览。
Stars: 1202 | Forks: 50
# Ferrite
**English** | [简体中文](README.zh-CN.md)
## 🤖 AI 辅助开发
本项目代码 100% 由 AI 生成。所有 Rust 代码、文档和配置均由 Claude (Anthropic) 通过 [Cursor](https://cursor.com) 和 MCP 工具编写。
## 截图

| 原始编辑器 | 分屏视图 | 禅模式 |
|------------|------------|----------|
|  |  |  |
## 功能特性
### 核心编辑
- **所见即所得 Markdown 编辑** - 通过实时预览、点击编辑格式和语法高亮编辑 Markdown
- **多格式支持** - 原生支持 Markdown、JSON、CSV、YAML 和 TOML 文件
- **多编码支持** - 自动检测并保留文件编码(UTF-8、Latin-1、Shift-JIS、Windows-1252、GBK 等)
- **树形查看器** - JSON/YAML/TOML 的分层视图,支持内联编辑、展开/折叠和路径复制
- **查找与替换** - 支持正则表达式和匹配高亮的搜索
- **跳转到行 (Ctrl+G)** - 快速导航到特定行号
- **撤销/重做** - 每个标签页完整的撤销/重做支持
### 视图模式
- **分屏视图** - 并排显示原始编辑器和渲染预览,带有可调整大小的分隔条;两个窗格均可完全编辑
- **禅模式** - 无干扰写作,文本列居中显示
### 编辑器功能
- **语法高亮** - 支持 100+ 种语言的全文语法高亮(Rust、Python、JavaScript、Go、TypeScript、PowerShell 等)
- **代码折叠** - 通过行号指示符(▶/▼)折叠/展开标题、代码块和列表区域;隐藏折叠的内容
- **语义缩略图** - 导航面板,带有可点击的标题标签、内容类型指示器和文本密度条(可切换为 VS Code 风格的像素视图)
- **多光标编辑** - Ctrl+点击添加多个光标;在所有位置同时输入、删除和导航
- **括号匹配** - 高亮匹配的括号 `()[]{}<>` 和强调对 `**` `__`
- **自动闭合括号和引号** - 输入 `(`、`[`、`{`、`"` 或 `'` 自动生成匹配对;支持选中文本包裹
- **复制行 (Ctrl+Shift+D)** - 复制当前行或选中文本
- **上下移动行 (Alt+↑/↓)** - 无需剪切/粘贴即可重新排列行
- **智能链接粘贴** - 选中文本后粘贴 URL 以创建 `[text](url)` Markdown 链接
- **拖放图片** - 将图片拖入编辑器可自动保存到 `./assets/` 并插入 Markdown 链接
- **目录** - 通过 `` 块从标题生成/更新目录 (Ctrl+Shift+U)
- **代码片段** - 文本扩展,如 `;date` → 当前日期,`;time` → 当前时间,以及自定义片段
- **自动保存** - 可配置的自动保存,带有临时文件安全机制
- **行号** - 可选的行号栏
- **可配置行宽** - 限制文本宽度以提高可读性(80/100/120 或自定义)
- **自定义字体选择** - 为编辑器和 UI 选择首选字体;对 CJK 区域字形偏好很重要
- **键盘快捷键自定义** - 通过设置面板重新绑定快捷键
### MermaidJS 图表
在预览中直接原生渲染 11 种图表类型:
- 流程图、时序图、饼图、状态图、思维导图
- 类图、ER图、Git 图、甘特图、时间轴、用户旅程
### CSV/TSV 查看器
- **原生表格视图** - 在格式化表格中查看 CSV 和 TSV 文件,具有固定宽度列对齐
- **彩虹列着色** - 交替的列颜色以提高可读性
- **分隔符检测** - 自动检测逗号、制表符、分号和竖线分隔符
- **标题行检测** - 智能检测和高亮标题行
### 工作区功能
- **工作区模式** - 打开文件夹,包含文件树、快速切换器 (Ctrl+P) 和文件内搜索 (Ctrl+Shift+F)
- **Git 集成** - 可视化状态指示器(已修改、已添加、未跟踪、已忽略),保存、聚焦和文件更改时自动刷新
- **会话持久化** - 重启时恢复打开的标签页、光标位置和滚动偏移
### 终端工作区
- **集成终端** - 支持选择 Shell (PowerShell, CMD, WSL, bash) 的多实例
- **平铺与拆分** - 通过水平和垂直拆分创建复杂的 2D 网格
- **智能最大化** - 临时最大化任意窗格以专注于工作 (Ctrl+Shift+M)
- **布局持久化** - 将您喜欢的终端布局保存并加载为 JSON 文件
- **主题与透明度** - 自定义配色方案(如 Dracula)和背景不透明度
- **拖放标签页** - 通过视觉反馈重新排列终端
- **AI 就绪** - 终端等待输入时的视觉“呼吸”指示器(非常适合 AI 代理)
### 附加功能
- **亮色与暗色主题** - 精美的主题,支持运行时切换
- **文档大纲与统计** - 通过大纲面板导航;标签化统计显示字数、阅读时间、标题/链接/图片数量
- **导出选项** - 导出为带主题样式的 HTML,或复制为 HTML
- **格式化工具栏** - 快速访问粗体、斜体、标题、列表、链接等功能
- **Live Pipeline** - 通过 Shell 命令管道处理 JSON/YAML 内容(面向开发者)
- **自定义窗口** - 无边框窗口,带有自定义标题栏和调整大小手柄
- **最近文件和文件夹** - 点击状态栏中的文件名以访问最近打开的文件和工作区文件夹
- **CJK 段落缩进** - 中文(2 字符)和日文(1 字符)写作习惯的首行缩进选项
## 安装
### 预构建二进制文件
从 [GitHub Releases](https://github.com/OlaProeis/Ferrite/releases) 下载适用于您平台的最新版本。
| 平台 | 下载 | 说明 |
|----------|----------|-------|
| **Windows** | `ferrite-windows-x64.msi` | 推荐 - 完整安装程序,带开始菜单 |
| Windows | `ferrite-portable-windows-x64.zip` | 便携版 - 解压到任意位置,可从 USB 运行 |
| **Linux (Debian/Ubuntu)** | `ferrite-editor_amd64.deb` | 适用于 Debian, Ubuntu, Mint, Pop!_OS |
| **Linux (Fedora/RHEL)** | `ferrite-editor.x86_64.rpm` | 适用于 Fedora, RHEL, CentOS, Rocky |
| Linux | `ferrite-linux-x64.tar.gz` | 通用版 - 适用于任何发行版 |
| **macOS (Apple Silicon)** | `ferrite-macos-arm64.tar.gz` | 适用于 M1/M2/M3 Mac |
| **macOS (Intel)** | `ferrite-macos-x64.tar.gz` | 适用于 Intel Mac |
## 用法
```
# 打开文件
ferrite path/to/file.md
# 打开文件夹作为工作区
ferrite path/to/folder/
```
### 视图模式
Ferrite 支持 Markdown 文件的三种视图模式:
- **原始** - 带语法高亮的纯文本编辑
- **渲染** - 带渲染 Markdown 的所见即所得编辑
- **分屏** - 并排显示原始编辑器和实时预览
使用工具栏按钮或键盘快捷键在模式间切换。
## 键盘快捷键
| 快捷键 | 操作 |
|----------|--------|
| `Ctrl+N` | 新建文件 |
| `Ctrl+O` | 打开文件 |
| `Ctrl+S` | 保存文件 |
| `Ctrl+W` | 关闭标签页 |
| `Ctrl+P` | 快速文件切换器 |
| `Ctrl+F` | 查找 |
| `Ctrl+G` | 跳转到行 |
| `Ctrl+,` | 打开设置 |
## 配置
通过 `Ctrl+,` 或齿轮图标访问设置。配置外观、编辑器行为和文件处理。
## 路线图
计划功能和已知问题请参见 [ROADMAP.md](ROADMAP.md)。
## 贡献
欢迎贡献!请查阅 [CONTRIBUTING.md](CONTRIBUTING.md) 了解指南。
### 帮助翻译
Ferrite 正在社区的帮助下翻译成多种语言。
[](https://hosted.weblate.org/engage/ferrite/)
**[在 Weblate 上帮助翻译 Ferrite](https://hosted.weblate.org/engage/ferrite/)** - 无需编程!
## 技术栈
使用 Rust 1.70+、egui/eframe (GUI)、comrak (Markdown 解析)、ropey (基于 Rope 的文本编辑) 和 syntect (语法高亮) 构建。
## 许可证
本项目采用 MIT 许可证授权 - 详情请参见 [LICENSE](LICENSE) 文件。
## 致谢
## 赞助商
如果您觉得 Ferrite 有用,请考虑[支持其开发](https://github.com/sponsors/OlaProeis)。
[](https://getferrite.dev)
[](https://github.com/OlaProeis/Ferrite/releases)
[](LICENSE)
[](https://github.com/OlaProeis/Ferrite/stargazers)
[](https://github.com/OlaProeis/Ferrite/issues)
[](https://hosted.weblate.org/engage/ferrite/)
**[getferrite.dev](https://getferrite.dev)** — 包含下载、功能介绍和文档的官方网站
一款快速、轻量级的文本编辑器,专为 Markdown、JSON、YAML 和 TOML 文件设计。采用 Rust 和 egui 构建,提供原生、响应式的体验。
🛡️ 代码签名与杀毒软件
从 v0.2.6.1 版本开始,**所有 Windows 发行版均经过数字签名**,证书由 [SignPath Foundation](https://signpath.org) 提供。这意味着: - **Windows SmartScreen** 能够识别发布者 —— 不再出现“未知发布者”警告 - **杀毒软件误报**显著减少,这得益于受信任的代码签名 - **完整性验证** —— 您可以验证二进制文件未被篡改 ### 以前的误报情况 较旧的未签名版本可能仍会触发杀毒软件检测。这是由以下原因造成的: - **Live Pipeline 功能**:在 Windows 上使用 `cmd.exe /C` 执行 Shell 命令,基于机器学习的检测可能会误判 - **Rust 编译模式**:Rust 二进制文件可能因其独特特征而触发启发式检测 我们通过代码签名、构建配置文件调整(禁用符号剥离、速度优化)以及向 Microsoft 安全智能门户报告来解决此问题。 ### 如果您仍受影响 如果 Windows Defender 隔离了 Ferrite: 1. **升级**:从 [GitHub Releases](https://github.com/OlaProeis/Ferrite/releases) 下载最新的签名版本 2. **验证签名**:右键点击 `ferrite.exe` → 属性 → 数字签名 → 应显示“SignPath Foundation” 3. **检查 VirusTotal**:将文件上传到 [VirusTotal](https://www.virustotal.com) —— 签名版本应显示干净的结果 Ferrite **绝不**访问密码、浏览器数据或进行网络连接。该应用程序完全离线运行,仅访问您明确打开的文件。关于 AI 工作流
### 我的角色 - **产品方向** —— 决定构建什么以及为什么 - **测试** —— 运行应用程序,发现 Bug,验证功能 - **审查** —— 阅读生成的代码,理解其功能 - **编排** —— 有效管理 AI 工作流 ### 工作流程 1. **想法提炼** —— 与多个 AI(Claude、Perplexity、Gemini Pro)讨论概念 2. **PRD 创建** —— 使用 [Task Master](https://github.com/task-master-ai/task-master) 生成需求 3. **任务执行** —— Claude Opus 负责实现(倾向于处理大任务而非多个子任务) 4. **会话交接** —— 结构化提示在会话间保持上下文 5. **人工审查** —— 审查每次交接;根据需要进行方向调整 📖 **完整详情:** [AI 开发工作流](docs/ai-workflow/ai-development-workflow.md) ### 开放流程 用于构建 Ferrite 的实际提示和文档是公开的: | 文档 | 用途 | |----------|---------| | [`current-handover-prompt.md`](docs/current-handover-prompt.md) | 活动会话上下文 | | [`ai-workflow/`](docs/ai-workflow/) | 完整工作流文档、PRD、历史交接记录 | | [`handover/`](docs/handover/) | 可复用的交接模板 | 这种透明度是有意的 —— 我希望其他人能从这种方法中学习(并加以改进)。Windows 安装
#### MSI 安装程序(推荐) 下载 `ferrite-windows-x64.msi` 并运行。这将: - 将 Ferrite 安装到 `C:\Program Files\Ferrite` - 添加带图标的开始菜单快捷方式 - 可通过 Windows 设置轻松卸载 - 设置存储在 `%APPDATA%\ferrite\` #### 便携版 (ZIP) 下载 `ferrite-portable-windows-x64.zip` 并解压到任意位置。ZIP 包含: - `ferrite.exe` - 应用程序 - `portable/` - 存放所有设置的文件夹 - `README.txt` - 快速入门指南 **真正的便携模式:** 所有配置、会话和数据都存储在可执行文件旁边的 `portable` 文件夹中。不会向 `%APPDATA%` 或 Windows 注册表写入任何内容。非常适合 USB 驱动器或在不安装的情况下试用 Ferrite。Linux 安装
#### Debian/Ubuntu/Mint (.deb) ``` # 下载 .deb 文件,然后使用以下命令安装: sudo apt install ./ferrite-editor_amd64.deb # 或者使用 dpkg: sudo dpkg -i ferrite-editor_amd64.deb ``` #### Fedora/RHEL/CentOS (.rpm) ``` # 下载 .rpm 文件,然后使用以下命令安装: sudo dnf install ./ferrite-editor.x86_64.rpm # 或者使用 rpm: sudo rpm -i ferrite-editor.x86_64.rpm ``` .deb 和 .rpm 软件包都将: - 将 Ferrite 安装到 `/usr/bin/ferrite` - 添加桌面入口(出现在您的应用菜单中) - 注册 `.md`、json`、`.yaml`、`.toml` 文件的关联 - 为系统安装图标 #### Arch Linux (AUR) [](https://aur.archlinux.org/packages/ferrite/) [](https://aur.archlinux.org/packages/ferrite-bin/) Ferrite 可在 [AUR](https://wiki.archlinux.org/index.php/Arch_User_Repository) 上获取: - [Ferrite](https://aur.archlinux.org/packages/ferrite/)(发布包) - [Ferrite-bin](https://aur.archlinux.org/packages/ferrite-bin/)(二进制包) ``` # Release package yay -Sy ferrite # Binary package yay -Sy ferrite-bin ``` #### Nix / NixOS (官方 flake) ``` # 直接从 GitHub 运行 Ferrite(无需安装) nix run github:OlaProeis/Ferrite # 进入一个在 PATH 中暴露 ferrite 的 shell nix shell github:OlaProeis/Ferrite ``` 从本地克隆构建: ``` # Build package output nix build .#ferrite ./result/bin/ferrite # 进入开发 shell(Rust toolchain + 系统 deps) nix develop ``` #### 其他 Linux (tar.gz) ``` tar -xzf ferrite-linux-x64.tar.gz ./ferrite ```从源码构建
#### 前置条件 - **Rust 1.70+** - 从 [rustup.rs](https://rustup.rs/) 安装 - **平台特定依赖:** **Nix 用户:** 您可以跳过手动依赖安装,使用仓库根目录下的 `nix develop`(参见 `flake.nix`)。 **Windows:** - Visual Studio Build Tools 2019+ 及 C++ 工作负载 **Linux:** ``` # Ubuntu/Debian sudo apt install build-essential pkg-config libgtk-3-dev libxcb-shape0-dev libxcb-xfixes0-dev # Fedora sudo dnf install gcc pkg-config gtk3-devel libxcb-devel # Arch sudo pacman -S base-devel pkg-config gtk3 libxcb ``` **macOS:** ``` xcode-select --install ``` #### 构建 ``` # 克隆仓库 git clone https://github.com/OlaProeis/Ferrite.git cd Ferrite # 构建 release 版本(优化) cargo build --release # 二进制文件将位于: # Windows: target/release/ferrite.exe # Linux/macOS: target/release/ferrite # macOS: 创建 .app bundle(可选) cargo install cargo-bundle cargo bundle --release # Bundle 将位于:target/release/bundle/osx/Ferrite.app ```更多 CLI 选项
``` # 从源码运行 cargo run --release # 或者直接运行二进制文件 ./target/release/ferrite # 以标签页形式打开多个文件 ./target/release/ferrite file1.md file2.md # 显示版本 ./target/release/ferrite --version # 显示帮助 ./target/release/ferrite --help ``` 完整 CLI 文档请参见 [docs/cli.md](docs/cli.md)。所有键盘快捷键
### 文件操作 | 快捷键 | 操作 | |----------|--------| | `Ctrl+N` | 新建文件 | | `Ctrl+O` | 打开文件 | | `Ctrl+S` | 保存文件 | | `Ctrl+Shift+S` | 另存为 | | `Ctrl+W` | 关闭标签页 | ### 导航 | 快捷键 | 操作 | |----------|--------| | `Ctrl+Tab` | 下一个标签页 | | `Ctrl+Shift+Tab` | 上一个标签页 | | `Ctrl+P` | 快速文件切换器(工作区) | | `Ctrl+Shift+F` | 文件内搜索(工作区) | ### 编辑 | 快捷键 | 操作 | |----------|--------| | `Ctrl+Z` | 撤销 | | `Ctrl+Y` / `Ctrl+Shift+Z` | 重做 | | `Ctrl+F` | 查找 | | `Ctrl+H` | 查找和替换 | | `Ctrl+G` | 跳转到行 | | `Ctrl+Shift+D` | 复制行 | | `Alt+↑` | 上移行 | | `Alt+↓` | 下移行 | | `Ctrl+B` | 粗体 | | `Ctrl+I` | 斜体 | | `Ctrl+K` | 插入链接 | ### 视图 | 快捷键 | 操作 | |----------|--------| | `F11` | 切换全屏 | | `Ctrl+,` | 打开设置 | | `Ctrl+Shift+[` | 全部折叠 | | `Ctrl+Shift+]` | 全部展开 | ### 终端工作区 终端快捷键是**上下文感知**的;仅在终端面板聚焦时生效。 | 快捷键 | 操作 | |----------|--------| | `Ctrl+Tab` / `Ctrl+Shift+Tab` | 循环切换终端标签页 | | `Ctrl+1-9` | 切换到特定终端标签页 | | `Ctrl+Arrow Keys` | 在拆分窗格间移动焦点 | | `Ctrl+Shift+M` | 切换 **最大化窗格** (缩放) | | `Ctrl+L` | 清空终端屏幕 | | `Ctrl+Shift+C` | 复制选中内容 / 屏幕 | | `Ctrl+Shift+V` | 粘贴到终端 | | `Ctrl+W` / `Ctrl+F4` | 关闭聚焦的窗格(自动折叠拆分) | | `Double-click Tab` | 重命名终端 |配置详情
设置存储在平台特定的位置: - **Windows:** `%APPDATA%\ferrite\` - **Windows 便携版:** `ferrite.exe` 旁边的 `portable\` 文件夹 - **Linux:** `~/.config/ferrite/` - **macOS:** `~/Library/Application Support/ferrite/` **便携模式 (Windows):** 如果可执行文件旁边存在 `portable` 文件夹,Ferrite 会自动使用它存储所有配置,而不是 `%APPDATA%`。这使得 Ferrite 完全自包含 —— 非常适合 USB 驱动器。 工作区设置存储在工作区文件夹内的 `.ferrite/` 中。 ### 设置面板 - **外观:** 主题、字体系列、字体大小、默认视图模式 - **编辑器:** 自动换行、行号、缩略图、括号匹配、代码折叠、语法高亮、自动闭合括号、行宽 - **文件:** 自动保存、最近文件历史贡献者快速入门
``` # Fork 并克隆 git clone https://github.com/YOUR_USERNAME/Ferrite.git cd Ferrite # 创建 feature branch git checkout -b feature/your-feature # 进行更改,然后验证 cargo fmt cargo clippy cargo test cargo build # 可选(Nix 用户):验证 flake outputs nix flake check # 提交并推送 git commit -m "feat: your feature description" git push origin feature/your-feature ```完整技术栈
| 组件 | 技术 | |-----------|------------| | 语言 | Rust 1.70+ | | GUI 框架 | egui 0.28 + eframe 0.28 | | 文本缓冲区 | ropey 1.6 (rope 数据结构) | | Markdown 解析器 | comrak 0.22 | | 语法高亮 | syntect 5.1 + two-face 0.5 | | Git 集成 | git2 0.19 | | 终端 PTY | portable-pty 0.8 | | 终端 ANSI 解析器 | vte 0.13 | | 编码检测 | encoding_rs 0.8 + chardetng 0.1 | | 国际化 | rust-i18n 3 + sys-locale 0.3 | | CLI 解析 | clap 4 | | 文件对话框 | rfd 0.14 | | 剪贴板 | arboard 3 | | 文件监控 | notify 6 | | 模糊匹配 | fuzzy-matcher 0.3 | | HTTP 客户端 | ureq 2 (更新检查器) | | 哈希 | blake3 1.5 (Mermaid 缓存) | | 日期/时间 | chrono 0.4 | | CSV 解析 | csv 1.3 | | 调色板 | palette 0.7 | | 字体枚举 | font-kit 0.14 | | 分配器 (Windows) | mimalloc 0.1 | | 分配器 (Unix) | tikv-jemallocator 0.6 |库与工具
### 库 - [egui](https://github.com/emilk/egui) - Rust 的即时模式 GUI 库 - [comrak](https://github.com/kivikakk/comrak) - 兼容 CommonMark + GFM 的 Markdown 解析器 - [syntect](https://github.com/trishume/syntect) - 语法高亮库 - [git2](https://github.com/rust-lang/git2-rs) - Rust 的 libgit2 绑定 - [Inter](https://rsms.me/inter/) 和 [JetBrains Mono](https://www.jetbrains.com/lp/mono/) 字体 ### 开发工具 - [Claude](https://anthropic.com) (Anthropic) - 编写代码的 AI 助手 - [Cursor](https://cursor.com) - AI 驱动的代码编辑器 - [Task Master](https://github.com/eyaltoledano/claude-task-master) - 用于开发工作流的 AI 任务管理 ### 贡献者 - [@liuxiaopai-ai](https://github.com/liuxiaopai-ai) — 用于可复现构建和开发环境的 Nix/NixOS flake 支持 ([PR #92](https://github.com/OlaProeis/Ferrite/pull/92)) - [@blizzard007dev](https://github.com/blizzard007dev) — 首次启动配置的欢迎页面 ([PR #80](https://github.com/OlaProeis/Ferrite/pull/80)) - [@wolverin0](https://github.com/wolverin0) — 集成终端工作区和生产力中心 ([PR #74](https://github.com/OlaProeis/Ferrite/pull/74)) - [@abcd-ca](https://github.com/abcd-ca) — 删除行、移动行、macOS 文件关联 ([PR #29](https://github.com/OlaProeis/Ferrite/pull/29), [#30](https://github.com/OlaProeis/Ferrite/pull/30)) - [@SteelCrab](https://github.com/SteelCrab) — CJK 字符渲染 ([PR #8](https://github.com/OlaProeis/Ferrite/pull/8))|
|
Free code signing on Windows provided by SignPath.io, certificate by SignPath Foundation |
标签:egui, GUI, JSON, LangChain, Markdown编辑器, Note taking, Rust, SOC Prime, Static Site Generator, Sysadmin, TOML, YAML, 代码签名, 原生应用, 可视化界面, 安全库, 实时预览, 开发工具, 文本编辑器, 桌面应用, 网络流量审计, 轻量级, 通知系统, 通知系统, 配置文件管理