基于 Rust + gpui(Zed 的 UI 框架)实现的轻量级 IntelliJ IDEA 风格 IDE。
本项目由 DeepSeek(AI 编程助手)辅助开发,界面与交互大量参考
Zed 的实现 —— 包括文件树 Project Panel 的
扁平可见条目 + uniform_list 虚拟化渲染、编辑器与工具窗口布局、Zed 官方 SVG 图标资产等,
UI 基于 gpui 直接构建。
- IDEA 风格界面:顶部菜单栏(File/Edit/View/Navigate/Code/Run/Tools/VCS/Window/Help,下拉浮层)、左侧工具窗口栏(圆角悬浮/选中样式)、Project 文件树、中部标签栏、底部状态栏
- 文件树:懒加载目录扫描(忽略
.git/target/node_modules等)、展开折叠、点击打开文件、活动文件高亮、键盘导航(方向键/回车/左右折叠展开)、选中条铺满面板 - 多标签编辑器:切换 / 关闭(×)/ 未保存标记(●)、打开 / 保存 / 全部保存
- 选区驱动编辑(参考 Zed 架构重构):
SelectionSet多光标/选区——Shift+方向键/Home/End 扩展选区、Cmd+A全选、选区输入覆盖、Cmd+C/X/V复制剪切粘贴、Cmd+Click追加/移除光标、选区背景渲染;Cmd+Z/Cmd+Shift+Z撤销重做(连续输入自动合并为一步,多选区编辑为一步事务);编辑后光标/选区经 anchor 偏移映射保持稳定;显示层与编辑层分离(display_map) - 终端工具窗口:通过
openpty运行交互式 shell(Unix),支持方向键/快捷键转义序列、剪贴板粘贴、ANSI 输出剥离、闪烁光标、清空/重启;停止时按进程组终止 - 运行 Java 项目(Run 面板):自动检测构建系统——
pom.xml→mvn -q compile exec:java、build.gradle→gradle run、单个.java文件 →java <file>(源码模式)、无构建文件时扫描含main的类;stdout/stderr 实时输出、退出码显示、可停止/重跑 - 语法高亮:Rust 与 Java 两套手写词法分析器,按文件扩展名自动分派(关键字、字符串、注释、数字、注解/属性、函数、类型名等,支持跨行块注释)
- 完整文本输入:中文输入法(IME 组合/提交/下划线)、光标移动、滚轮滚动、光标闪烁、自动滚动到光标、剪贴板粘贴
- 双主题:Darcula(深色)与 IntelliJ Light(浅色)一键切换,窗口尺寸自动适配小屏幕
- 状态栏:git 分支、项目名、
Ln, Col、语言、编码、缩进、主题名、操作消息
| ✅ 已实现 | 🚧 待办 |
|---|---|
| IDEA 风格界面(菜单栏 / 工具窗口栏 / 标签栏 / 状态栏) | 查找与替换(Cmd+F / Cmd+R) |
文件树:懒加载扫描、展开折叠、键盘导航、uniform_list 虚拟化渲染 |
文件树多选 / 拖拽、新建 / 重命名 / 删除文件 |
| 多标签编辑器:切换 / 关闭 / 未保存标记、打开 / 保存 / 全部保存 | LSP 集成:代码补全、跳转定义、错误诊断 |
| 选区驱动编辑:多光标 / 选区扩展 / 复制剪切粘贴 / 撤销重做(anchor 语义) | 文件系统变更监听(fs watcher),文件树自动刷新 |
| 语法高亮:Rust + Java 手写词法分析(含跨行块注释) | 工程配置:项目 SDK、运行配置、依赖管理 |
| 完整文本输入:IME 中文输入、光标、滚动、闪烁、剪贴板粘贴 | 超大文件性能:整行渲染 → 按需渲染优化 |
| 终端工具窗口:PTY 交互式 shell、ANSI 剥离、闪烁光标、清空 / 重启 | 终端完整 ANSI 支持(颜色 / 光标定位) |
| Run 面板:自动检测 Maven / Gradle / 单文件 Java 并运行 | 分屏 / 多窗口编辑 |
| 双主题:Darcula / IntelliJ Light 一键切换 | Git 集成面板:diff、提交、分支管理 |
状态栏:git 分支、Ln, Col、语言、编码、主题 |
调试器:断点、单步执行 |
| 打开 / 保存 / 全部保存 | — |
| 快捷键 | 功能 |
|---|---|
Cmd+O |
打开项目文件夹 |
Cmd+S / Cmd+Shift+S |
保存 / 全部保存 |
Cmd+W |
关闭当前标签 |
Cmd+R |
运行当前项目(打开 Run 面板) |
Cmd+A / Cmd+C / Cmd+X |
全选 / 复制 / 剪切(编辑器内) |
Cmd+Z / Cmd+Shift+Z |
撤销 / 重做(编辑器内) |
Shift+方向键 / Shift+Home / Shift+End |
扩展选区 |
Cmd+Click |
追加 / 移除光标(多光标) |
Cmd+V |
粘贴 |
Cmd+Q |
退出 |
Esc |
关闭下拉菜单 / 终端内写入转义键 |
方向键 / Home / End / PageUp / PageDown / Enter / Tab |
编辑 / 文件树导航 |
需要 macOS(或其他 gpui 支持平台)+ Rust 1.85+;运行 Java 项目需本机安装 JDK(Java 11+ 支持单文件运行)。
cargo run注意:gpui 默认在编译期用
metal编译 shader;若本机缺少 Metal Toolchain, 本项目已启用runtime_shadersfeature(shader 运行时编译),无需额外安装。
cargo test覆盖:语法高亮 token、输出流解析(ANSI 剥离/CRLF)、运行计划构建(Maven/Gradle/单文件/扫描)、 布局回归(状态栏/文件树面板可见性、窗口尺寸适配)、图标资源渲染、文件树交互、 编辑器核心(选区/多光标编辑、撤销重做事务与输入合并、anchor 偏移映射、越界行号 clamp)。
src/
├── main.rs # 入口,创建窗口(尺寸适配屏幕)
├── app.rs # 主视图:布局、菜单、工具窗口栏、标签、文件操作、状态栏
├── buffer.rs # 文本缓冲:基于文档偏移的编辑 API、anchor 映射、撤销/重做事务
├── editor.rs # 编辑器:选区驱动编辑、输入处理、选区/多光标渲染
├── selection.rs # 选区集合:多光标、选区运算、编辑后偏移更新
├── display_map.rs # 显示层:高亮 → TextRun → shape 的构建
├── file_tree.rs # 文件树:懒加载扫描、展开折叠、uniform_list 虚拟化渲染
├── terminal.rs # 终端工具窗口:PTY 交互式 shell
├── runner.rs # Run 面板:构建系统检测、进程管理、输出显示
├── java_highlight.rs # Java 词法高亮器
├── rust_highlight.rs # Rust 词法高亮器
├── output.rs # 公共输出流解析(终端与 Run 面板共用)
├── menus.rs # 菜单栏数据
├── assets.rs # 内嵌 SVG 图标资源(include_bytes!)
└── theme.rs # Darcula / IntelliJ Light 主题
- 演示型 MVP:不做 LSP 集成、不做工程配置;编辑器为整行渲染, 超大文件(数万行)性能有限;撤销为编辑记录式(非快照),连续输入自动合并
- 保存为同步写盘,适合小型文件
- 终端与运行输出按行渲染并剥离 ANSI 转义(无颜色/光标定位),
vim/top等全屏程序可交互但显示不完整 - 工具窗口栏与文件树图标采用 Zed 的 SVG 图标
(
assets/icons/,Apache-2.0),通过include_bytes!内嵌,单色描边由主题着色