在 Termux 上使用 Oh My Zsh

背景

之前有一段时间对 Zsh 的狂热到了极端痴迷的地步,恨不得在所有 *Unix 设备上装上 Oh My Zsh(甚至是路由器)。Termux 是运行在 Android 上的模拟 Linux 环境,偶尔会想到在 Linux 环境下做的事,掏出手机就可以马上开始。

但是在这个过程中踩了不少坑,还用过一些脚本来一键设置。但后果是,通常这些脚本都会更改字体(因为 Oh My Zsh 中的「agnoster」主题有一些特殊字符需要 powerline font 的支持),而且常常自作聪明地更改配色方案。

安装

首先是安装 git、wget 或者 curl,还有 zsh:

1
pkg install git curl zsh

我本人更喜欢 curl 多一些,所以就安装了 curl。

Termux 的包管理基于 apt,而 apt 又是依赖于 wget 的,所以 Termux 本身就带有 wget。但是默认带有的 wget 和 Debian 系的 Linux 一样,并不支持 https,所以直接执行会提示 wget: not an http or ftp url: https://example.com.,这个问题在有意克制储存占用的 *Unix 系统下很常见,通常需要额外安装一些包来解决。

在之前,Oh My Zsh 还没有针对 Termux 做优化,所以在 Termux 执行时,会报出许多 /usr/bin/<package name> not found. 的错误,因为 Termux 的实际可执行文件路径位于 /data/data/com.termux/files/usr 下。而后 Oh My Zsh 合并了一个 pr 才适配了 Termux注 1,所以直接按照 Oh My Zsh 的安装教程安装大致上就可以完成了注 2

1
sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

同样,你也可以使用 wget,在此不再赘述。

就是有一点不完美,安装完成后会提示 /usr/bin/chsh not found.,这时再执行 chsh -s zsh 手动设置一下就可以了。

常规配置(个人向)

1
2
3
4
5
6
7
8
9
.zshrc
==========
ZSH_THEME="agnoster"
# Keep language enviorment is English
export LANG=en_US.UTF-8
# Set vim as default editor
export EDITOR='vim'
# Upgrade Oh My Zsh without asking
DISABLE_UPDATE_PROMPT=true

乱码(更换字体)

剩下就是不是特别影响操作的字体问题了,切换到「agnoster」就很难免地要遇到「豆腐块」(乱码)的问题。只需要安装一个售价 $2 的插件:Termux: Styling注 3,再回到终端中长按 > more > style > choose font 选择一个自己喜欢的字体。至此,配置已全部完成。
需要注意的是,这些插件必须要和本体的签名匹配,也就是说,你不能用 Play 商店上下载的 Termux 搭配 F-Droid 上下载的 Termux: Styling 使用。注 4

参考

用 CloudFlare 重定向

需求

我有一个用我真名命名的域名,姑且称为 xiaoming.com。有一个圈名命名的域名,姑且称为 example.com。

  • 将 xiaoming.com/ 和 www.xiaoming.com/ 的请求 301 重定向到 example.com/about
  • 向下兼容以前在 xiaoming.com 下创建过的文章链接
  • www.example.com 的请求全部重定向到 example.com

配置

页面规则(Page Rules)

CloudFlare 有一个强大的功能,叫做 Page Rules,它可以实现链接匹配并进行一些特殊操作,例如:始终使用 HTTPS、始终在线(always online)和链接跳转等功能。注 1

免费版下,每个域名有三条规则的上限,不过对于现有需求来说也够用了。

首先打开 CloudFlare 面板 > xiaoming.com > Page Rules 来创建两条规则:

  1. If:*xiaoming.com/,then:https://example.com/about
  2. If:*xiaoming.com/*,then:https://example.com/$2

因为规则是顺位匹配的,所以在添加规则时,一定要注意规则的排序。

同样,打开 example.com 的 Page Rules:

  1. If:*example.com/*,then:https://example.com/$2

上述几条规则对于有编程经验的人来说应该不难理解,这里稍微做一些说明:

  • * 即通配符注 2,在此位置上的任意字符都会被判定为符合规则。比如 blog.example.com、www.example.com 和 example.com/foobar 都会匹配到 *example.com/* 这条规则,而 example.com/foobar 和 www.example.com/foobar 就不会匹配到 *example.com/ 这条规则。
  • $<num>注 3 类似于参数,$1 代表着 if 中第一个 * 里的字段,以此类推,$2 就是第二个 * 中的字段。例如 https://example.com/foobar 在上述 example.com 的规则一里,$1 就是「https://」,$2 就是「foobar」。

DNS 解析记录

一开始在这里百思不得其解,没有解析记录的域名当然是无法被解析的,访问时找不到 IP,当然没法跳转。注 4

所以我们需要新建 www.xiaoming.com、xiaoming.comwww.example.com 这三条解析记录,在这里我将解析类型设为 CNAME,值设为了 example.com,而 CDN 保持默认开启状态,否则可能会出现证书问题。至此,我们设定的 Page Rules 就生效了。

参考

Hello World

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

Quick Start

Create a new post

1
$ hexo new "My New Post"

More info: Writing

Run server

1
$ hexo server

More info: Server

Generate static files

1
$ hexo generate

More info: Generating

Deploy to remote sites

1
$ hexo deploy

More info: Deployment

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×