跳转到内容
返回首页
返回博客
Feature

Android 应有的代码编辑器:LSP、IntelliSense 及更多

一款真正的 Android 代码编辑器:LSP 语言服务器、语义化自动补全、TextMate 语法高亮、多光标编辑、代码导航与内联诊断——全部在你的手机上完成。

2 min
作者 Pelayo Naredo
Android 应有的代码编辑器:LSP、IntelliSense 及更多

Android 上大多数所谓的"代码编辑器",不过是包装华丽的文本框。它们依赖 Android 的 TextView,打开一个 2000 行的文件就卡顿,拿不出任何能让真正的开发者敢用它写生产代码的 东西。运气好的话你能有点语法着色,仅此而已。于是每当需要临时改一个 bug,你还是得去掏 笔记本电脑。

PocketCode 走的是完全相反的路线。它的 Android 代码编辑器构建在 Sora Editor 之上——这是一个由 gap-buffer 数据结构支撑的高性能引擎。与基于 TextView 的方案不同,Sora 在每次按键时避免了 O(n) 复制,因此大文件依然流畅。在这个引擎 之上,PocketCode 叠加了你在桌面 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 与文件扩展名。

为了让编辑器在手机上保持响应流畅,PocketCode 自带了一套 IncrementalTokenizer,可以立即绘制 token,而不必等待完整的 TextMate 解析结束。围绕它, 你还能获得让代码更易读的编辑器基础能力:可配置的行号、匹配的花括号与圆括号指示、可视化 缩进参考线,以及对函数、类、方法、接口、注释块、导入块和自定义区域的代码折叠——支持嵌套 折叠,且折叠状态按文件持久保存

语言检测是自动的,可按扩展名(CodeLanguage.fromExtension())或按文件名 (CodeLanguage.fromFileName(),能识别 DockerfileMakefile.gitignore 之类),无匹配时回退为纯文本。

由 LSP 驱动的自动补全与 IntelliSense

正是从这里开始,PocketCode 不再是一个移动端玩具,而成为一款真正的 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 毫秒的缓冲窗口,避免轻微的光标移动就把它关掉——接受建议会插入完整文本,同时保留 你的撤销/重做历史,而且它绝不会与标准的自动补全引擎冲突。想深入了解,可参阅 编辑器文档

编辑能力:多光标、Emmet 与符号键盘

只有当编辑器让你痛苦时,在手机上敲代码才会痛苦。PocketCode 的 MultiCursorEngine 让你在任意位置放置额外的光标并同时编辑每一个,配以清晰的 偏移量 ↔ 行/列转换,还能在保留其余光标的同时移除单个光标。

Emmet 对 HTML 和 CSS 提供完整支持:ul>li*3 展开为嵌套列表,div.cls#id 变成 <div id="id" class="cls"></div>,而像 dfdisplay: flexw100pwidth: 100% 这样的 CSS 简写也都能用。

由于手机键盘并非为写代码而设计,系统键盘之上还有一条编程符号栏。其中一个区块插入你真正 需要的字符——{ } [ ] ( ) ; : = 等等——另一个区块则暴露各类操作: 撤销/重做、上下移动一行、切换行注释(//)或块注释(/* */)、复制当前行、跳转到某行、 对选中行排序、以及大小写转换(大写 / 小写 / 首字母大写)。再加上双指缩放字号、长按时的 放大镜以便精确定位光标,以及无限制的撤销/重做,小屏幕就不再是借口了。

像模像样地在代码中穿行

一个真正的编辑器,要看你在代码库里穿行的速度。PocketCode 给了你完整的导航工具箱:

  • 转到符号——对当前文件的模糊过滤对话框,涵盖函数、方法、类、接口、属性、变量、常量、 导入和区域,每一项都带有一行上下文。
  • 大纲面板——一个可滑出的文件结构树,随你的编辑实时更新。
  • 快速查看定义——一个内联弹窗,显示某符号定义周围约 10 行的上下文,无需移动光标。
  • 转到引用——项目中的每一处引用,从视觉上区分定义与使用。
  • 重命名符号——在整个项目范围内查找所有出现处,将代码与字符串/注释区分开,并在应用前 显示预览
  • 全局搜索——对所有项目文件进行文本或正则表达式搜索,可按扩展名过滤,绑定到 Ctrl+Shift+F
  • 命令面板——一个 VS Code 风格的模糊入口,可触达每一项编辑器操作。
  • 自动导入——扫描未定义的符号,并为 Kotlin、Java、Python、TypeScript、JavaScript 等语言推荐正确的导入。

无需服务器的诊断

你并不总想启动一个语言服务器,因此 PocketCode 内置了一个本地的 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 风格的问题面板中呈现,按文件分组,并可按严重程度 (ERRORWARNINGINFOHINT)过滤。

在力所能及之处,编辑器会替你把问题修好。快速修复会出现在诊断旁边——清理行尾空白、移除 空行,以及应用特定语言的操作。而提取重构会分析选区中的变量,从中抽取一个方法(带上正确 的参数与调用点),或把一个表达式包装为一个具名变量,并自动缩进到正确层级。

就在设备上完成的格式化

格式化完全在设备本地进行——无需外部工具,无需网络往返。每种语言都有各自的格式化器实现:

格式化器语言
C 风格Kotlin、Java、JS、TS、C、C++、C#、Dart、Go、Swift、Rust、PHP、Scala、Gradle
PythonPython(PEP-8 缩进)
XML/HTMLHTML、XML、SVG
JSONJSON(美化打印或紧凑)
CSSCSS、SCSS、Less
YAML / SQL / MarkdownYAML、SQL、Markdown

按配置文件划分的选项让你可以设置缩进大小、最大行宽、是否添加行尾换行、运算符周围的空格,以及 花括号的摆放位置。

为手机而生,而非移植而来

布局会在手机竖屏、手机横屏、平板和折叠屏等形态之间自动适配。禅模式会隐藏文本之外的一切, 分屏编辑器让两个文件并排显示,而上下文相关的工具栏 chip 让格式化、查找、替换和大纲都触手 可及。几乎每一项操作都归置在一个井井有条的溢出菜单里,还有离线模式,让编辑、本地执行与 Git 在无网络时依然可用。

坦诚说一句:实时协作在路线图上,但尚未上线。协作面板作为一个没有后端的 UI 原型存在——光标 同步与共享会话仍在规划中,所以我们不会假装它们今天就能用。


手机不再是用更差的工具写代码的借口。PocketCode 的编辑器把真正重要的部分——LSP 支持的自动 补全与 IntelliSense、覆盖 33 种语言的 TextMate 语法高亮、多光标编辑,以及完整的代码 导航——带到了那台永远在你口袋里的设备上。想了解各版本能力,也可以看看 定价页面

Android 代码编辑器:快速解答

Android 上有好用的代码编辑器吗? 有——PocketCode 把 LSP 自动补全、覆盖 33 种语言的 高亮、多光标编辑和内置 Git 都带到了手机上。

没有电脑也能在 Android 上写代码吗? 可以——只用手机就能编写、运行和调试,全程离线。

有带终端的代码编辑器吗? 有——编辑器紧挨着一个内置终端(SSH/SFTP)和设备端运行器, 因此你在同一个应用里编辑并运行。

它有 Git 吗? 内置:提交、差异对比、blame、分支——无需外部客户端。

免费且无广告吗? 完整的编辑器免费,没有广告。

能离线用吗? 完全可以——编辑器、运行时和 Git 都能在无网络连接的情况下工作。

PocketCode 即将登陆 Google Play。加入预注册,抢先在你自己的 设备上体验它。

本文背后的工具

代码编辑器

准备好试用 PocketCode 了吗?

下载应用,开始用手机编程。