Nvim —— 我的第N代移动开发方案

起因

本人是台式机的忠实拥趸,对于笔记本持接受不能的态度。不过台式机便携性极低的客观事实无法忽略……这也导致上课时除了坐牢便无事可做。

幸运的是,我能算得上半个 iPad 的爱好者(可能与经历有关,iPad 的确为童年带来了许多快乐的时光)。在 iPad 上搭建一个趁手的开发环境,能让购买时付出高昂成本变得更值得一些。

综上,需求和要求为:

  • iPad 开发环境
  • 尽可能趁手

Gen1: vscode on iPad

大名曰:Code App

旨在给 ipad 带来纯粹的 VS Code 体验。Github:thebaselab/codeapp: Building a full-fledged code editor for iPad

刚上手时感受:

  • 轻松上手,毕竟和 VS Code 一个模子
  • 可以应对一些简易的 c/c++ 和 python 项目,甚至可以本地编译和运行
  • 内置终端有一些基础的命令
  • SSH 支持还行

但是,使用了一周之后我便放弃了这个 app,只说几个关键的点:

  • 稍大的工程相当不好用。工具链限制太多了
  • 没有 extensions
  • ipad 上戳触控板很难受
  • App 是 testflight 白嫖的。App Store 上 5.99$

我需要的是一整套的、可自定义的开发环境,而不仅仅是一个带有简单终端的 toy IDE。故放弃。

Gen2: virtual machine

那这样,我直接在 iPad 上搓一个 Linux 虚拟机出来不就好了!?

目光投向了 UTM

我不想过于详细地介绍我是怎么折腾地装上 UTM、如何绕过 IOS 的应用证书、最终只得到了一个卡得完全没法用的 Ubuntu 22.04 GNOME 桌面的。这无异于向你展示如何将大象装进冰箱。

我的总结是:至少从开发环境的角度,请不要抱着日常使用的期望在 IpadOS 15.6 以上的版本安装虚拟机。

  • IOS 对危险软件(utm 这种虚拟机)及其封闭
  • ipad 内存比金子贵、虚拟机架构特殊等等问题必然会导致后续的使用不尽人意

Gen3: 串流

RT,直接将 Windows 开发环境串流到当前设备即可。相关工具有:

  • RD Client
    • 微软原生串流。走的是 RDP 的 3389 端口
    • 配置还算方便,稳定
    • 流畅度、画质一般
  • ToDesk
    • 国内流行的远程控制方案
    • 十分方便,还算稳定
    • 流畅度画质和 rd client 差不多,更好的体验得加钱
  • Moonlight / Sunshine
    • 游戏首选
    • 配置比较麻烦
    • 基本接近原生的延迟、流畅度和画质

平心而论,串流是一个十分不错的方案。不太用担心网速问题,凭借现在串流的压缩技术,双方有 5~10M 的稳定带宽基本就能有不错的体验了。

但是教室网速比较一般(不稳定),而且我的 iPad 触控板也相当难用,我也无意购入妙控键盘。所以这个方案仅在使用一周后便被抛弃了。

Gen4: iSH

在 iPad 上存在一个 fancy 的软件 iSH。基于 x86 模拟器为 IOS 提供一个 linux shell 环境。

乍一看似乎在 iPad 上运行了一个 linux。但其背后的原理比较复杂,自底向上地说:

  • iSH 完全运行在 iOS 提供的用户态环境中,没有越狱、不涉及内核扩展。整个应用在用户态。
  • iSH 实现了一个用户态的 x86 仿真器,并通过将 Linux 的系统调用转译成等价的 iOS 系统调用,从而让 Linux 用户空间程序得以运行。相当于一个中间层。
  • iSH 通过自己实现的中间层,来运行真正的 Linux 镜像。ish 默认使用轻量的 Alpine Linux
  • 你看到的其实是 Alpine 提供的工具链。终端、BusyBox 命令、apk 包管理器等,都是 Alpine Linux 用户空间的一部分,而不是 iSH 自己写的。

这很 hack 和 elegant,那么代价是?

  • 慢。没有 JIT,iSH 的系统调用转译是解释执行。
  • 内存小。JVM 都跑不起来,更别说 docker 了
  • 纯软件实现,没有硬件加速
  • IOS 限制摆在这,多线程等内核支持完全没有

所以这个 iSH 充其量只是一个“工程妥协的艺术”(ChatGPT 锐评)。

Gen5: SSH

答案早就甩在脸上了,但这个 ssh 指的是纯命令行开发。都什么年代了还在用命令行?是现代 IDE 不好用吗?

答:妥协+适应之后的豁然开朗。妥协就不说了,iPad 的特殊条件。

适应,一方面得跨过 ssh 的门槛,对于 linux 得足够熟悉和适应。

另一方面,将 ssh 一步步配置成高效的开发工具。走过适应二者的苦痛之路后,其实 ssh 也不是那么难用。甚至发现自己在逐渐抛弃 jetbrains 和 vscode。

目前的 ssh 工作流:tmux + nvim with LazyVim

有时间写一下我是如何配置全套开发环境的。