# OpenIDE **Repository Path**: js-25/openide ## Basic Information - **Project Name**: OpenIDE - **Description**: 基于Go打造的原生TUI 代码编辑器 - **Primary Language**: TypeScript - **License**: Apache-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-08-03 - **Last Updated**: 2026-09-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # OpenIDE [English](../README.en.md) | [Русский](../README.ru.md) OpenIDE 是一个面向终端的集成开发环境(IDE),基于 Go 和 [Bubble Tea](https://github.com/charmbracelet/bubbletea) 构建。它支持 LSP 语言服务、文件浏览与多标签编辑。 ## 功能特性 - **终端 UI(TUI)**:基于 Bubble Tea 的现代终端界面,支持文件浏览、编辑、分页。 - **LSP 客户端**:内置 LSP 客户端,可对接 gopls、rust-analyzer、clangd 等语言服务器。 - **文件与编辑器**:文件管理、文本编辑、多标签页。 - **诊断与代码导航**:LSP 补全、跳转定义、悬停信息、代码操作、实时问题列表与语义高亮。 - **NOR 命令模式**:通过 `:` 执行语言/符号/问题命令,或调用指定 shell 执行项目命令。 ## 项目结构 ``` cmd/ └── openide-tui/ # 终端 UI 入口 pkg/ ├── lsp/ # LSP 客户端与协议 ├── plugin/ # Lua 插件加载与宿主桥接 └── tui/ # Bubble Tea TUI 实现 themes/ # 内置 TOML 主题 ``` 详细接口、命令和快捷键归档见 [APIS.md](./APIS.md)。 ## 插件系统 Lua 插件位于 `~/.openide/plugins/<插件名>/`,包含 `manifest.toml` 和 `plugin.lua`。 宿主当前暴露的窄接口: - `ShowMessage(text)` — 状态栏消息 - `ActivePath()` — 当前活动文件绝对路径 - `ProjectRoot()` — 工作区根目录 脚本可用 API: ```lua local p = ide.plugin{ name = "demo" } p:command{ name = "Demo: Hello", key = "ctrl+alt+h", run = function(ctx) ctx:msg("hello") local f = ctx:path() local r = ctx:root() end } p:on("file_open", function(ev) end) p:on("file_change", function(ev) end) p:on("file_save", function(ev) end) ``` - 事件仅白名单:`file_open` / `file_change` / `file_save` - `manifest.permissions` 当前仅声明,未强制执行 - 脚本沙箱禁用 `io`/`os`/`package`/`coroutine`,不可自行读盘或执行进程 Go 侧加载与注册: ```go app.LoadPlugins(tui.DefaultPluginDir()) ``` 插件命令会通过 `App.RegisterCommand` 注入命令面板,脚本错误记录在 `plugin.Manager.Errs` 并回显状态栏,不会拖垮编辑器。详细接口归档见 [APIS.md](./APIS.md)。 ## 主题 OpenIDE TUI 支持自定义主题。主题文件为 TOML 格式,放置在 `themes/` 目录下。 当前内置主题: - **Snazzy**:GitHub Dark Default + Dark Plus 语法高亮 - **GitHub Dark**:GitHub Dark Dimmed - **Catppuccin Mocha**:柔和的紫色调深色主题 - **Nord**:北极蓝灰配色 - **Dracula**:经典 Dracula 深色主题 - **Tokyo Night**:东京之夜 Storm 配色 - **Gruvbox Dark**:复古暖色调深色主题 使用方法: 1. 在 `~/.config/opde/config.toml` 中配置主题路径: ```toml [theme] path = "~/.config/opde/themes/nord.toml" ``` 2. 也可以复制 `themes/` 目录下的任意主题文件到 `~/.config/opde/themes/` 并修改。 3. 启动 OpenIDE TUI 时自动加载配置的主题。 ## LSP 配置 OpenIDE 不内置语言服务器配置。需要在用户级配置文件中按 language ID 声明启动命令: ```toml [lsp.go] command = "gopls" args = ["serve"] [lsp.python] command = "pyright-langserver" args = ["--stdio"] ``` 配置文件路径为 `~/.config/opde/config.toml`;也可使用内联表: ```toml [lsp] rust = { command = "rust-analyzer", args = ["--stdio"] } ``` 未配置的语言不会自动启动。`OPENIDE_LSP_CONFIG` 可以覆盖配置文件路径,便于测试或受管环境部署。 ## 环境要求 - Go 1.23+ - Bubble Tea 0.25.0 ## 快速开始 ### 终端 UI ```bash go run ./cmd/openide-tui ``` 可选参数: ```bash go run ./cmd/openide-tui -dir /path/to/project -open main.go ``` NOR 模式(未进入编辑模式)可按 `:` 打开命令输入: - `:lang`:选择当前文件的编程语言 - `:symbol`:打开当前文件的 LSP 文档符号 - `:err`:打开实时问题列表 - `: <命令>`:在指定 shell 中执行命令并在输出窗口查看结果,例如 `:zsh ls -la` - `:reload`:重新加载主题、插件与 LSP 配置 ## 开发说明 ### 构建 ```bash go build ./cmd/openide-tui ``` ### 测试 ```bash go test ./... ``` ## 快捷键 | 快捷键 | 作用 | | --- | --- | | `:q`(NOR 模式) | 退出 | | `Ctrl + Space` | 触发补全(当前版本为自动触发,无需手动按键) | | `Ctrl + b` | 显示 / 隐藏侧边栏 | | `Ctrl + e` | 焦点切换到文件树 | | `Ctrl + w` | 关闭当前标签页 | | `Ctrl + s` | 保存当前文件 | | 鼠标拖拽 | 划词选区 | | `Ctrl + c` | 复制选区(无选区时退出) | | `Ctrl + x` | 剪切选区 | | `Ctrl + v` | 粘贴系统剪贴板 | | `↑` / `↓` | 在补全候选中选择 | | `Enter` | 插入当前补全项 | | `Esc` | 关闭补全菜单 | | `F12` | 跳转到定义 | | `Ctrl + d` | 显示当前行诊断 | | `Ctrl + k` | 显示悬停信息 | | `Ctrl + .` | 显示代码操作 | | `Ctrl + t` | 显示全局符号 | | `Ctrl + f` | 打开文件树浮层 | | `Ctrl + h` | 显示帮助 | | `i` / `Esc` | 进入插入模式 / 回到 NOR 模式 | | `Esc` | 关闭当前浮层或命令输出窗口 | | `Tab` | 下一个标签页 | | `Shift + Tab` | 上一个标签页 | | `Esc` | 关闭搜索面板 | | 方向键 | 在文件树 / 编辑器中移动 | | `Enter` | 打开文件或展开目录 | 补全为自动触发:INS 模式下输入标识符字符或触发字符(如 `.`)后约 25ms 防抖发起请求,退格按剩余词头自动重查,无需手动快捷键。INS 模式下存在选区时,输入任意字符将整体替换选区,退格删除整个选区。 ## 路线图 - [x] TUI 基础框架(Bubble Tea) - [x] 文件浏览与编辑 - [x] LSP 客户端框架 - [ ] 格式化、重命名、引用查找等更多 LSP 特性 - [x] NOR 命令模式与问题列表 - [x] LSP 语义高亮(无 LSP 时回退到正则高亮) - [ ] TTY/PTY 集成 - [x] Lua 插件系统(命令、事件与宿主桥接) ## 贡献 欢迎提交 Issue 和 Pull Request。 ## 许可证 [Apache 2.0](./LICENSE)