iSH 终端键盘操作技巧:15 个按键组合让 iPhone 命令行操作快人一步
【免费下载链接】ishLinux shell for iOS项目地址: https://gitcode.com/GitHub_Trending/is/ish
手机和桌面终端最大的区别只有一个:手机上没有物理的 Ctrl 键。在 iSH 这个 iOS 上的 Linux 终端里,修饰键全靠软件层模拟,但一旦搞懂它的规则,iOS Linux 终端效率会明显上一个台阶。
规则其实就两条。触屏用户:点 iSH 自带键盘底部的 Ctrl 键再点字母,比如 Ctrl + A;外部键盘用户直接按物理 Ctrl。所有带修饰键的输入都走 TerminalView.m 里的insertText:和insertControlChar::字符按toupper(ch) ^ 0x40换算,所以 Ctrl+A 送出 0x01、Ctrl+C 送出 0x03,和 Linux 传统绑定完全一致。
- (void)insertControlChar:(char)ch { if (strchr(controlKeys, ch) != NULL) { if (ch == ' ') ch = '\0'; if (ch == '2') ch = '@'; if (ch == '6') ch = '^'; if (ch != '\0') ch = toupper(ch) ^ 0x40; [self.terminal sendInput:[NSData dataWithBytes:&ch length:1]]; } }理解了这条换算规则,下面这些快捷键你不用背,推得出来。
第一档:先学会 5 个键
| 按键组合 | 真实场景 |
|---|---|
| Ctrl+A / Ctrl+E | 改命令开头 / 补命令尾部参数,不重打整行 |
| Ctrl+U | 敲了一长串发现方向错了,一键清空重来 |
| Ctrl+K | 只删光标到行尾的尾巴,前半段保留 |
| Ctrl+C | 前台进程跑飞了,中断它 |
| Ctrl+D | 空行按一次,退出当前 shell 会话 |
日常提效的主力其实是 Ctrl+K:手滑多敲了半行命令,不想整行重打,按一下就只删掉尾巴,前半段原样保留。
第二档:日常提效,还有 8 个键
- Ctrl+L:输出刷屏、提示符被顶到屏幕外时,按一下清屏并把提示符拉回当前。
- Ctrl+R:反向搜索历史,敲过一次的长命令不用回忆,打两个字符就能翻出来。
- Ctrl+B / Ctrl+F:光标左、右移一格,配合 Ctrl+U、Ctrl+K 做局部修改。
- Alt+B / Alt+F:以单词为单位左右跳。前提是把 Option 键映射为 Esc(下一节讲),否则这两个键只是输出符号。
- Alt+D:删掉光标后的一个单词,改参数名时比连按退格快得多。
- Ctrl+Z:进程临时挂起到后台,用
bg恢复或kill %1处理,不用直接杀掉。 - Cmd+K:iSH 专属,一键清空整个回滚缓冲区。实现是 TerminalView.m 的
clearScrollback:,执行 JS 侧的exports.clearScrollback()。 - Cmd+数字 1–7 / Cmd+
-调字号:切到第 N 个虚拟终端、缩小字体一次看更多行。定义在 TerminalViewController.m 的keyCommands里,只有接外部键盘时可用。
手机专属:双指浮出"浮动光标"
🖐️ 没有方向键不代表没法移动光标。在 iSH 屏幕空白处双指点一下,屏幕会浮出一个小方块光标;再点屏幕任意格子,光标就"瞬移"过去。原理见 TerminalView.m 的updateFloatingCursorAtPoint::它把两点间的行列差换算成一串方向键转义序列连续发出去,Linux 侧看到的就是快速连按方向键。iPhone 命令行操作想改命令中间某个字符,这是最省力的方式。
iSH 键盘映射:把 Option 键改成 Esc
外接键盘最大的痛点是 Option 键——iOS 默认把它当输入特殊符号用。iSH 在 UserPreferences.h 里留了三个开关,设置界面都能改:
- Option 映射为 Esc(
OptionMapEsc):开启后 Option 加字母会送出 Esc 前缀,Alt+B、Alt+D 这类 Emacs 绑定才真正可用。keyCommands里会据此把整套 metaKeys 注册进去。 - 反引号映射为 Esc(
backtickMapEscape):单手打字的人可以把手指放到`键上获得 Esc,退出 Vim 的插入模式快很多。 - Caps Lock 重映射(
capsLockMapping):可把它变成 Ctrl 或 Esc,handleCapsLockWithCommand:负责把按下时的按键重写后重新派发。
另有一个overrideControlSpace开关处理外部键盘的 Ctrl+Space 歧义:默认它发送空字符(Emacs 里是 universal argument),开启后改为发送 0x18。
今天就动手:三件小事
- 打开设置,按键盘类型把 Option 或反引号映射成 Esc(触屏用户可跳过)。
- 今天只练三个键:Ctrl+A 到行首、Ctrl+K 删到行尾、Ctrl+L 清屏。
- 用
ps跑一个进程,依次用 Ctrl+C 和 Ctrl+Z 处理它,感受"杀掉"和"挂起"的区别。
这三件做完,下次再在手机上敲长命令,你会发现手指基本不用离开主键盘区。
【免费下载链接】ishLinux shell for iOS项目地址: https://gitcode.com/GitHub_Trending/is/ish
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考