一款真正的 Android 代码编辑器:LSP 语言服务器、语义化自动补全、TextMate 语法高亮、多光标编辑、代码导航与内联诊断——全部在你的手机上完成。
Android 上大多数所谓的"代码编辑器",不过是包装华丽的文本框。它们依赖 Android 的
TextView,打开一个 2000 行的文件就卡顿,拿不出任何能让真正的开发者敢用它写生产代码的
东西。运气好的话你能有点语法着色,仅此而已。于是每当需要临时改一个 bug,你还是得去掏
笔记本电脑。
Pocket Code 走的是完全相反的路线。它的 Android 代码编辑器构建在
Sora Editor 之上——这是一个由 gap-buffer 数据结构支撑的高性能引擎。与基于
TextView 的方案不同,Sora 在每次按键时避免了 O(n) 复制,因此大文件依然流畅。在这个引擎
之上,Pocket Code 叠加了你在桌面 IDE 中期待的一切:LSP 语言服务器、语义化
自动补全、真正的语法高亮、多光标编辑,以及深度代码导航。下面就来看看它实际
是什么样子。你也可以直接查看
代码编辑器功能页面进一步了解。
高亮由 TextMate 语法规则驱动(与 VS Code 使用的 .tmLanguage.json 格式相同),
经由 tm4e 引擎处理。开箱即用覆盖 33 种语言——Kotlin、Java、Python、JavaScript、
TypeScript(以及 TSX)、Go、Rust、C、C++、C#、PHP、Ruby、Swift、Scala、SQL、YAML、
TOML、Dockerfile 等等——每一种都映射到其正确的 TextMate scope 与文件扩展名。
为了让编辑器在手机上保持响应流畅,Pocket Code 自带了一套
IncrementalTokenizer,可以立即绘制 token,而不必等待完整的 TextMate 解析结束。围绕它,
你还能获得让代码更易读的编辑器基础能力:可配置的行号、匹配的花括号与圆括号指示、可视化
缩进参考线,以及对函数、类、方法、接口、注释块、导入块和自定义区域的代码折叠——支持嵌套
折叠,且折叠状态按文件持久保存。
语言检测是自动的,可按扩展名(CodeLanguage.fromExtension())或按文件名
(CodeLanguage.fromFileName(),能识别 Dockerfile、Makefile、.gitignore
之类),无匹配时回退为纯文本。
正是从这里开始,Pocket Code 不再是一个移动端玩具,而成为一款真正的 IDE。编辑器内置了完整
的 Language Server Protocol 客户端——LspClient,实现了 LSP 3.17——可连接
到标准的外部语言服务器(clangd、pyright 等)。通信基于 JSON-RPC 2.0,具备完整的语言
服务器生命周期管理,服务器断开时可自动重连。
正是这个 LSP 客户端把基础补全变成了真正的 IntelliSense。它实现了以下八项能力:
| LSP 方法 | 功能 |
|---|---|
textDocument/completion | 语义化自动补全 |
textDocument/hover | 悬停显示文档 |
textDocument/definition | 跳转到定义 |
textDocument/references | 查找引用 |
textDocument/signatureHelp | 函数参数提示 |
textDocument/formatting | 服务器辅助格式化 |
textDocument/rename | 安全的语义化重命名 |
textDocument/publishDiagnostics | 实时的服务器诊断 |
Sora 引擎本身也提供了原生的浮动自动补全窗口,因此在你尚未接入语言服务器之前就能获得 补全。而对于 AI 辅助写作,一个 Ghost Text 图层会在光标之后以半透明内联文本渲染建议, 并设有 150 毫秒的缓冲窗口,避免轻微的光标移动就把它关掉——接受建议会插入完整文本,同时保留 你的撤销/重做历史,而且它绝不会与标准的自动补全引擎冲突。想深入了解,可参阅 编辑器文档。
只有当编辑器让你痛苦时,在手机上敲代码才会痛苦。Pocket Code 的
MultiCursorEngine 让你在任意位置放置额外的光标并同时编辑每一个,配以清晰的
偏移量 ↔ 行/列转换,还能在保留其余光标的同时移除单个光标。
Emmet 对 HTML 和 CSS 提供完整支持:ul>li*3 展开为嵌套列表,div.cls#id 变成
<div id="id" class="cls"></div>,而像 df → display: flex 或 w100p →
width: 100% 这样的 CSS 简写也都能用。
由于手机键盘并非为写代码而设计,系统键盘之上还有一条编程符号栏。其中一个区块插入你真正
需要的字符——{ } [ ] ( ) ; : = 等等——另一个区块则暴露各类操作:
撤销/重做、上下移动一行、切换行注释(//)或块注释(/* */)、复制当前行、跳转到某行、
对选中行排序、以及大小写转换(大写 / 小写 / 首字母大写)。再加上双指缩放字号、长按时的
放大镜以便精确定位光标,以及无限制的撤销/重做,小屏幕就不再是借口了。
一个真正的编辑器,要看你在代码库里穿行的速度。Pocket Code 给了你完整的导航工具箱:
Ctrl+Shift+F。你并不总想启动一个语言服务器,因此 Pocket Code 内置了一个本地的
InlineDiagnostics 引擎,使用按语言划分的规则实时捕捉问题——无需 LSP。它携带了
针对 Kotlin、Java、JavaScript/TypeScript、Python、Go、Rust、PHP、CSS、HTML 和 JSON
的规则。
通用规则会标记行尾空白、过多的连续空行,以及 TODO / FIXME / HACK / NOTE /
BUG / WARN 注释。特定语言的规则则更进一步——Kotlin 的 !! 用法、JavaScript 中用
== 而非 === 或用 var 而非 let/const、Python 缩进不一致与未使用的导入、格式
错误的 JSON。一切都会在 VS Code 风格的问题面板中呈现,按文件分组,并可按严重程度
(ERROR、WARNING、INFO、HINT)过滤。
在力所能及之处,编辑器会替你把问题修好。快速修复会出现在诊断旁边——清理行尾空白、移除 空行,以及应用特定语言的操作。而提取重构会分析选区中的变量,从中抽取一个方法(带上正确 的参数与调用点),或把一个表达式包装为一个具名变量,并自动缩进到正确层级。
格式化完全在设备本地进行——无需外部工具,无需网络往返。每种语言都有各自的格式化器实现:
| 格式化器 | 语言 |
|---|---|
| C 风格 | Kotlin、Java、JS、TS、C、C++、C#、Dart、Go、Swift、Rust、PHP、Scala、Gradle |
| Python | Python(PEP-8 缩进) |
| XML/HTML | HTML、XML、SVG |
| JSON | JSON(美化打印或紧凑) |
| CSS | CSS、SCSS、Less |
| YAML / SQL / Markdown | YAML、SQL、Markdown |
按配置文件划分的选项让你可以设置缩进大小、最大行宽、是否添加行尾换行、运算符周围的空格,以及 花括号的摆放位置。
布局会在手机竖屏、手机横屏、平板和折叠屏等形态之间自动适配。禅模式会隐藏文本之外的一切, 分屏编辑器让两个文件并排显示,而上下文相关的工具栏 chip 让格式化、查找、替换和大纲都触手 可及。几乎每一项操作都归置在一个井井有条的溢出菜单里,还有离线模式,让编辑、本地执行与 Git 在无网络时依然可用。
坦诚说一句:实时协作在路线图上,但尚未上线。协作面板作为一个没有后端的 UI 原型存在——光标 同步与共享会话仍在规划中,所以我们不会假装它们今天就能用。
手机不再是用更差的工具写代码的借口。Pocket Code 的编辑器把真正重要的部分——LSP 支持的自动 补全与 IntelliSense、覆盖 33 种语言的 TextMate 语法高亮、多光标编辑,以及完整的代码 导航——带到了那台永远在你口袋里的设备上。想了解各版本能力,也可以看看 定价页面。
Pocket Code 即将登陆 Google Play。加入预注册,抢先在你自己的 设备上体验它。
代码编辑器