# AiMarkT **Repository Path**: han-fan/AiMarkT ## Basic Information - **Project Name**: AiMarkT - **Description**: markdown文本格式编辑器 - **Primary Language**: TypeScript - **License**: MulanPSL-2.0 - **Default Branch**: releases - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-23 - **Last Updated**: 2026-06-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # AiMarkT 一款基于 Electron + React + ProseMirror 构建的跨平台 WYSIWYG Markdown 编辑器,支持 macOS 和 Windows。 ## 功能特性 - **所见即所得编辑** - 基于 ProseMirror 的实时 Markdown 渲染 - **多标签页** - 支持同时打开多个文件,标签页切换时保留编辑状态 - **文件树导航** - 侧边栏文件浏览器,快速定位和打开文件 - **语法高亮** - 代码块支持多种编程语言的语法高亮(基于 highlight.js) - **文档大纲** - 自动生成标题结构导航 - **键盘快捷键** - 支持常用 Markdown 操作的快捷键 - **原生菜单** - macOS 风格的应用菜单 - **暗色/亮色主题** - 支持主题切换 ## 技术栈 | 层级 | 技术 | |------|------| | 桌面框架 | Electron | | 前端框架 | React 18 | | 编辑器引擎 | ProseMirror | | 状态管理 | Zustand | | 样式方案 | Tailwind CSS | | 构建工具 | Vite + esbuild | | 类型检查 | TypeScript | ## 项目结构 ``` AiMarkT/ ├── src/ │ ├── main/ # Electron 主进程 │ │ ├── index.ts # 应用入口 │ │ ├── window.ts # 窗口管理 │ │ ├── ipc.ts # IPC 通信处理 │ │ └── menu.ts # 原生菜单 │ ├── preload/ │ │ └── index.ts # 预加载脚本,暴露 electronAPI │ ├── renderer/ # React 渲染进程 │ │ ├── features/ │ │ │ ├── editor/ # ProseMirror 编辑器核心 │ │ │ │ ├── Editor.tsx │ │ │ │ ├── editorSchema.ts │ │ │ │ ├── editorPlugins.ts │ │ │ │ ├── markdownParser.ts │ │ │ │ └── markdownSerializer.ts │ │ │ ├── tabs/ # 标签页管理 │ │ │ ├── file-tree/ # 文件树组件 │ │ │ └── outline/ # 文档大纲 │ │ ├── components/ │ │ │ ├── layout/ # 布局组件(侧边栏、状态栏、工具栏) │ │ │ └── common/ # 通用组件 │ │ ├── stores/ # Zustand 状态管理 │ │ │ ├── tabStore.ts # 标签页状态 │ │ │ ├── editorStore.ts # 编辑器状态 │ │ │ ├── fileStore.ts # 文件操作状态 │ │ │ └── uiStore.ts # UI 状态 │ │ ├── types/ # TypeScript 类型定义 │ │ └── styles/ # 全局样式 │ └── shared/ │ └── ipc-channels.ts # IPC 通道常量 ├── electron-builder.yml # Electron 打包配置 ├── vite.config.ts # Vite 配置 ├── tsconfig.json # TypeScript 配置 ├── tailwind.config.js # Tailwind CSS 配置 └── package.json ``` ## 快速开始 ### 环境要求 - Node.js >= 18 - npm >= 9 - macOS / Windows ### 安装依赖 ```bash npm install ``` ### 开发模式 ```bash npm run dev ``` 此命令会: 1. 编译 Electron 主进程代码 2. 启动 Vite 开发服务器(端口 5173) 3. 启动 Electron 应用并加载开发服务器 ### 构建打包 ```bash # 仅构建(不打包) npm run build # 构建 macOS 安装包(需在 macOS 系统上执行) npm run package:mac # 构建 Windows 安装包(需在 Windows 系统上执行) npm run package:win ``` 构建产物将输出到 `release/` 目录。 #### Windows 打包说明 Windows 平台使用 NSIS 安装包格式,打包配置如下: - **目标格式**: NSIS 安装程序(64 位) - **安装行为**: 非一键安装,用户可自定义安装目录 - **快捷方式**: 自动创建桌面和开始菜单快捷方式 打包命令: ```bash npm run package:win ``` 构建完成后,在 `release/` 目录下会生成 `AiMarkT Setup x.x.x.exe` 安装程序。 > **注意**: Windows 打包需要在 Windows 系统上执行,不支持跨平台构建。 ### 运行测试 ```bash npm test ``` ## 快捷键 | 操作 | 快捷键 | |------|--------| | 加粗 | `Ctrl+B` / `Cmd+B` | | 斜体 | `Ctrl+E` / `Cmd+E` | | 行内代码 | `` Ctrl+` `` / `` Cmd+` `` | | 保存 | `Ctrl+S` / `Cmd+S` | | 新建标签 | `Ctrl+T` / `Cmd+T` | | 关闭标签 | `Ctrl+W` / `Cmd+W` | ## 数据流 ``` 用户输入 → ProseMirror EditorView → dispatchTransaction → serializeMarkdown() → tabStore.updateTab() + editorStore.setContent() ``` 标签页切换时,当前编辑器状态(EditorState)会保存到 `tabStates` Map,切换回时恢复,避免重新创建状态。 ## 许可证 MIT