开学了,可能有的同学因为军训的缘故,还没买电脑,在买电脑之前,我们是不是就不能编程呢?答案显然是否定的!下面将会介绍一种用手机练习C语言或者C++,python等等语言的姿势。
概念
首先明确一点,现在流行的智能手机其实也是冯·诺依曼结构的计算机的一种。很自然,通过电脑能实现的任务,用智能手机也有可能做到,只是不同的操作系统还有应用程序会有所差别,和人的交互部分也有所不同。
用户在使用操作系统的过程中,需要与操作系统的内核交互,这个交互的过程,是通过“壳层”来实现的,英文名为Shell。“壳层”主要分为两类,一类是图形界面(GUI:Graphicial User Interface),另一类是命令行界面(CLI:Command-line Interface)。
我们平时用的PC和智能手机,实际上和我们接触的是 GUI 界面。GUI 界面的设计贴合人类的直觉,直观和方便,但设计者在设计软件时需要考虑使用者的心理等种种因素,较为复杂,功能安排也相对局限;CLI 命令行面向机器,虽说不那么直观,但特点是严谨、灵活和高效。
专门为一个平台设计 GUI 的软件,这是一个很大的工程,而手机、平板并不主要为程序开发服务,很少会有厂商投入资源到编程方面的 APP 的开发中。所以你在应用商店很难找到一个合适的专门的C语言编译器的APP,并不是哪里都有 Visual Studio。
投入到 CLI 命令行界面的开发相对来说更容易,更有价值一些,因此在应用市场中有不少终端模拟器类的APP出现。所以说,在手机上难以找到合适的GUI界面的APP的情况下,我们可以通过安装一个提供CLI界面的环境,通过命令行间接实现练习代码的目标。
恰好,在强大的开源社区的支持下,在 Android 平台有一个非常好用的终端模拟器APP,名字叫 Termux,接下来我也开始介绍用 Termux 实现手机写代码的姿势。
此前写过一篇 在 Windows 系统使用 GCC + 文本编辑器练习代码 的教程,通过 Think-C 第一章我们可以明确,刚开始写代码,实际上我们只需要两个东西:文本编辑器、编译器(或者是解释器)。这些东西在命令行都有提供。在手机上,文本编辑器我们使用的是 Vim,C 语言编译器用 gcc 命令。
当然,命令行的编辑器可不只有 Vim 一个选择,还有nano,emacs等编辑器可以用,限于篇幅,这里只能你自己探索一下了。
Termux 的安装和配置
首先我们得有一台 Android 系统的手机,然后在应用商店搜索安装 Termux APP。
问题来了,国内的应用商店并没有上架这个APP,所以手机有 Google Play 商店的同学可以直接在Google Play下载,没有的话,可以在 apkpure.com 上下载 APK 文件。
问题又来了,国内似乎无法直接访问 apkpure.com,所以最终我把安装包搬运到了百度盘。
安装这个APP,启动,一开始 Termux 需要从远程服务器下载基础的软件包,我们等待一会儿。
安装完成后会有如下的界面。

接着我们试着运行 vim 和 gcc,由于此时 Termux 内的环境并没有安装这两个软件包,所以它给出了找不到命令的错误提示。

我们按照提示的命令,分别运行 pkg install vim
,pkg install clang
,有提问是否 continue 的时候输入 Y 确定,稍等片刻即可安装好。经过测试发现,这里用的编译器是clang,而不是 gcc,gcc 命令指向的是 clang 程序。这不影响使用,gcc 和 clang 的调用参数基本是一样的。

这时候我们可以开始使用 Vim 编写我们的代码,测试运行了。
写代码!
装好依赖的程序以后,我们就可以写代码了,这里用一个 C 语言的 Hello World 作为例子来演示这个过程。
首先我们用 Vim 新建一个名为 hello.c 的文本文件。输入命令 vim hello.c
启动 Vim 编辑文件,我们可以看到下图一般的界面:

使用 Vim 的第一步当然是存活下来,在 Vim 中,我们用的最多的按键是 Esc 键,而手机输入法并没有提供,所以Termux设计了一个常用键的按钮,我们可以按 音量增+q
调出这个小键盘,这时候,Esc 键可以很方便地接触到了。

首先明确一下 Vim 的三种状态,以及对应的显示界面:
- 一般(Normal)模式:左下角显示文件名或为空
- 插入模式:左下角显示--INSERT--
- 可视模式:左下角显示--VISUAL--
其中,一般模式可以通过运行 Vim 命令实现光标移动等操作,插入模式是输入文本,可视模式用于选择文本,类似在GUI界面中我们用鼠标选择 Word 上的文字一样,只是终端没有鼠标给你用😛。我们这里用到了两种模式,一般模式与插入模式。
需要写代码的时候,我们需要从正常模式把光标定位到需要修改代码的部分,然后进入插入模式。对于初学者来说,我们可以输入 i (insert的缩写)进入插入模式。
进入插入模式后,左下角是一个 --INSERT--
提示,意思是,你的输入将会插入正在编辑的文本中,我们可以在这里输入我们的代码啦~
#include <stdio.h>
int main() {
printf("Hello, 0xFFFF!")
}
手机上的效果:

这时候,我们编辑了代码,也可以用方向键切换光标,但我按什么键都是输入文字,好像都没得退出了,怎么办呢?别忘了刚刚说的Esc键!Esc就是用来给你退出插入模式,返回到一般模式用的。
试着按一下Esc,你会发现,左下角的 --INSERT--
消失了,这说明你已经返回了一般模式。
接着你可以尝试一下,在一般模式中,分别按按 hjkl 这四个字母键,看看光标有什么变化,然后按 i 键进入插入模式,再按 Esc 返回一般模式,重复上述的操作,感受感受。
在编辑好代码之后,最重要的事情,莫过于保存写好的代码了!万一丢了咋办捏。保存代码的方法,是在一般模式,输入 :w
(write的简称)命令,回车保存,以下是截图。

保存成功以后,Vim 会提示 xxxxx written
,意为文件写入完毕。

保存完代码,自然是需要运行了,如何退出Vim呢?
很简单,在一般模式,输入 :q
(quit 的简称),回车,就可以退出 Vim 了。

退出以后,我们回到了最初的命令行界面,系统等待你输入新的指令运行。

编译的话,我们通过 gcc 命令调用编译器,编译刚刚写的代码。
gcc hello.c
如无意外,程序不会有任何输出。我们通过ls命令可以发现目录生成了一个名为 a.out
的文件,这就是编译好的程序了。
然后我们运行这个程序,输入 ./a.out
回车。

Hello, 0xFFFF!
通过上面的方法,你可以很方便地在手机进行写代码,测试等操作。其中,Vim还有许多操作的技巧,入门 Vim,推荐这篇教程:
简明 Vim 练级攻略 | | 酷 壳 - CoolShell
不得不说,在手机上干这些事情,效率是有所损失的,所以还是尽快有自己的笔记本为妙(说多了都是泪)。