Android 应有的代码编辑器:LSP、IntelliSense 及更多
一款真正的 Android 代码编辑器:LSP 语言服务器、语义化自动补全、TextMate 语法高亮、多光标编辑、代码导航与内联诊断——全部在你的手机上完成。
Android 上大多数所谓的"代码编辑器",不过是包装华丽的文本框。它们依赖 Android 的
TextView,打开一个 2000 行的文件就卡顿,拿不出任何能让真正的开发者敢用它写生产代码的
东西。运气好的话你能有点语法着色,仅此而已。于是每当需要临时改一个 bug,你还是得去掏
笔记本电脑。
PocketCode 走的是完全相反的路线。它的 Android 代码编辑器构建在
Sora Editor 之上——这是一个专为大文件设计的高性能引擎。与基于
TextView 的方案不同,Sora 在每次按键时避免了 O(n) 复制,因此大文件依然流畅。在这个引擎
之上,PocketCode 叠加了你在桌面 IDE 中期待的一切:LSP 语言服务器、语义化
自动补全、真正的语法高亮、多光标编辑,以及深度代码导航。下面就来看看它实际
是什么样子。你也可以直接查看
代码编辑器功能页面进一步了解。
不是玩具级别的语法高亮
高亮由 TextMate 语法规则驱动(与 VS Code 使用的 .tmLanguage.json 格式相同),
经由 tm4e 引擎处理。开箱即用覆盖 39 种语言——Kotlin、Java、Python、JavaScript、
TypeScript(以及 TSX)、Go、Rust、C、C++、C#、PHP、Ruby、Swift、Scala、SQL、YAML、
TOML、Dockerfile 等等——每一种都映射到其正确的 TextMate scope 与文件扩展名。
为了让编辑器在手机上保持响应流畅,PocketCode 自带了一套
IncrementalTokenizer,可以立即绘制 token,而不必等待完整的 TextMate 解析结束。围绕它,
你还能获得让代码更易读的编辑器基础能力:可配置的行号、匹配的花括号与圆括号指示、可视化
缩进参考线,以及文件结构大纲(类、函数、注释块、导入块和自定义区域),它同时驱动面包屑导航。
没有代码折叠:Sora 引擎无法隐藏行。
语言检测是自动的,可按扩展名(CodeLanguage.fromExtension())或按文件名
(CodeLanguage.fromFileName(),能识别 Dockerfile、.gitignore 和 Gradle 构建文件;Makefile 会按纯文本打开),无匹配时回退为纯文本。
由 LSP 驱动的自动补全与 IntelliSense
正是从这里开始,PocketCode 不再是一个移动端玩具,而成为一款真正的 IDE。编辑器内置了完整
的 Language Server Protocol 客户端——LspClient,实现了 LSP 3.17——可与标准语言服务器通信,每个都可在编辑器中一键安装:TypeScript 与 JavaScript、Python 的 Pyright、HTML/CSS/JSON 服务器、Markdown、YAML(含 Docker Compose 与 GitHub Actions)、Dockerfile、Bash、Vue、Svelte、Astro、GraphQL、MDX、Prisma 和 Angular,外加 Emmet、Stylelint、UnoCSS 等 CSS 辅助服务器。19 种语言有一键安装的语言服务器。Java、Kotlin、Go、Rust、C、C++、Ruby、Swift 和 Dart 没有:它们的服务器是原生程序,或需要 PocketCode 未包含的运行环境。PHP 只有在项目自带 node_modules 中的 intelephense 时才可用。限制:Bash 没有 ShellCheck,YAML 不下载远程 schema,辅助服务器同时最多运行 2 个,Vue、Svelte、Astro、MDX 和 Angular 使用 TypeScript 包。GraphQL 需要项目中有 graphql-config 文件,Angular 需要 angular.json。通信基于 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 毫秒的缓冲窗口,避免轻微的光标移动就把它关掉——接受建议会插入完整文本,同时保留 你的撤销/重做历史,而且它绝不会与标准的自动补全引擎冲突。想深入了解,可参阅 编辑器文档。Ghost Text 会在你同意之后,把代码发送给你配置的 AI 提供商。
编辑能力:多光标、Emmet 与符号键盘
只有当编辑器让你痛苦时,在手机上敲代码才会痛苦。PocketCode 的
MultiCursorEngine 会在光标所在单词的每一处出现位置放置一个光标(Ctrl+Shift+L,或菜单中
的在所有匹配处添加光标),然后同时编辑它们——包括用屏幕键盘输入的内容,而不仅是实体键盘。
Emmet 通过展开 Emmet 缩写命令支持 HTML 和 CSS(没有快捷键,Tab 不会触发它):ul>li*3 展开为嵌套列表,div.cls#id 变成 <div id="id" class="cls"></div>,而像 df → display: flex 或 w100p → width: 100% 这样的 CSS 简写也能用。它只是一个子集:没有 ^,也没有 $ 编号。
由于手机键盘并非为写代码而设计,系统键盘之上还有一条编程符号栏。其中一个区块插入你真正
需要的字符——{ } [ ] ( ) ; : = 等等——另一个区块则暴露各类操作:
撤销/重做、上下移动一行、切换行注释(//)或块注释(/* */)、复制当前行、跳转到某行、
对选中行排序、以及大小写转换(大写 / 小写)。再加上双指缩放字号、长按时的
放大镜以便精确定位光标,以及每个标签页 200 步的撤销/重做,小屏幕就不再是借口了。
像模像样地在代码中穿行
一个真正的编辑器,要看你在代码库里穿行的速度。PocketCode 给了你完整的导航工具箱:
- 转到符号——对当前文件的模糊过滤对话框,涵盖函数、方法、类、接口、属性、变量、常量、 导入和区域,每一项都带有一行上下文。
- 大纲面板——一个可滑出的文件结构树,随你的编辑实时更新。
- 快速查看定义——一个内联弹窗,显示某符号定义周围约 10 行的上下文,无需移动光标。
- 转到引用——语言服务器找到的引用,可能跨文件;没有服务器时,只在当前文件中做文本搜索。
- 重命名符号——在应用前显示预览,把代码中的出现处与字符串/注释中的出现处(后者不会被重命名)区分开。有语言服务器时可以修改其他文件;没有时只在当前文件中重命名。
- 在文件中搜索——在项目中进行文本或正则表达式搜索(Ctrl+Shift+F),可从命令面板或转到菜单打开。它会跳过 512 KB 及以上的大文件,最多显示 500 条结果,而且只能搜索:不支持跨文件替换。
- 命令面板——一个 VS Code 风格的模糊入口,可触达每一项编辑器操作。
- 自动导入——针对尚未导入的符号,根据内置的常见符号表(Kotlin、Java、Python、JavaScript/TypeScript、Go 和 Rust)推荐
import;它不会查找你自己项目中的符号。
无需服务器的诊断
你并不总想启动一个语言服务器,因此 PocketCode 内置了一个本地的
InlineDiagnostics 引擎,使用按语言划分的规则实时捕捉问题——无需 LSP。它携带了
针对 Kotlin、Java、JavaScript/TypeScript、Python、Go、Rust、PHP、CSS、HTML 和 JSON
的规则。
通用规则会标记行尾空白、过多的连续空行、不成对的括号,以及 TODO / FIXME / HACK / XXX / BUG 注释。特定语言的规则则更进一步——Kotlin 的 !! 用法、JavaScript 中用 == 而非 === 或用 var 而非 let/const、Python 混用制表符与空格以及裸 except、格式错误的 JSON。一切都会在 VS Code 风格的问题面板中呈现,按文件分组,并可按严重程度
(ERROR、WARNING、INFO、HINT)过滤。
在力所能及之处,编辑器会替你把问题修好。快速修复会出现在诊断旁边——清理行尾空白、移除 空行,以及应用特定语言的操作。而提取重构会分析选区中的变量,从中抽取一个方法(带上正确 的参数与调用点),或把一个表达式包装为一个具名变量,并自动缩进到正确层级。
就在设备上完成的格式化
格式化完全在设备本地进行——无需外部工具,无需网络往返。八个专用格式化器覆盖 24 种语言:
| 格式化器 | 语言 |
|---|---|
| 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 |
格式化文档(Shift+Alt+F,需要在设置中开启代码格式化)会先尝试语言服务器,再回退到这些格式化器。缩进和行宽来自项目的 .editorconfig(indent_style、indent_size、tab_width、end_of_line、max_line_length)。其他语言只会得到通用清理(行尾空格、空行、末尾换行)。
为手机而生,而非移植而来
布局会在手机竖屏、手机横屏、平板和折叠屏等形态之间自动适配。禅模式会隐藏文本之外的一切, 分屏视图在编辑器旁显示一个只读的第二窗格,标签页始终位于顶部,VS Code 风格的资源 管理器一触即达。所有操作都按分组放在菜单中,快速访问行提供格式化、查找、转到符号、源代码管理和 运行,在已有会话的情况下,编辑、本地执行与本地 Git 无需联网即可在设备上运行。内置 23 款编辑器主题:4 款免费(PocketCode Dark、PocketCode Light、VS Code Dark+、GitHub Light),19 款为Pro 主题。
实时协作可在你的本地网络中使用:同一 Wi-Fi 下的人可以一起编辑同一个文件,显示在线状态、光标 和评论,数据不会离开本地网络。
手机不再是用更差的工具写代码的借口。PocketCode 的编辑器把真正重要的部分——LSP 支持的自动 补全与 IntelliSense、覆盖 39 种语言的 TextMate 语法高亮、多光标编辑,以及完整的代码 导航——带到了那台永远在你口袋里的设备上。想了解各版本能力,也可以看看 定价页面。
PocketCode 已在 Google Play 上架。获取 PocketCode,在你自己的设备上体验这款编辑器。
常见问题
Android 上有好用的代码编辑器吗?
有。PocketCode 是一款完整的代码编辑器,具备 LSP 支持的自动补全、覆盖 39 种语言的语法高亮、多光标编辑和内置 Git——全部在手机上运行。
没有电脑也能在 Android 上写代码吗?
可以。PocketCode 是一个完整的 IDE:你可以只用手机来编写和运行代码,并调试 Node 上的 JavaScript。登录时需要联网;之后你的代码在设备上运行。不需要笔记本电脑或服务器。
有带终端的 Android 代码编辑器吗?
有。PocketCode 把编辑器与内置终端(本地 shell、SSH 和 SFTP)以及设备端代码运行器搭配在一起,因此你在同一个应用里编辑并运行。
这个编辑器有 Git 吗?
有——内置 Git,支持提交、差异对比、blame 和分支,无需任何外部客户端。
它是免费且无广告的吗?
完整的编辑器免费且没有广告。免费版包含 1 个项目和 23 个内置主题中的 4 个;Pro 取消项目数量上限,并增加云同步和 Pro 主题。
它能离线使用吗?
登录时需要联网;已有会话时打开应用无需联网。编辑器、本地 Git 和设备端运行器都在设备上运行,语言服务器和可选运行时包下载后同样无需联网(下载它们本身需要网络)。
代码编辑器