键盘、主题与快捷键
第一部分。12 个格位,22 个内置键,拖动排序的编辑器。还可以自己造键。
第二部分。蓝牙键盘能做什么、不能做什么,拼音和日文输入为什么要专门修一次。
第三部分。8 套终端主题和一个调色器,10 种字体,8 个 App 图标,强调色自己定。
这条栏由 Moshpit 自己绘制,系统的 input accessory view 已关掉。你看到的是 App 的栏,不是键盘自带的。最多放 12 个键,出厂 6 个。
设置 → KEYBOARD · KEYS → Shortcuts
出厂 6 个,另外 16 个等着你加
Section titled “出厂 6 个,另外 16 个等着你加”新装的 App,栏上依次是 esc、tab、^C、^L、粘贴和方向摇杆。另外 16 个内置键放在编辑器的 AVAILABLE 列表里,需要时再加。有三个键在栏上显示图标而不是文字:粘贴是剪贴板,摇杆是四向箭头,翻历史是上下箭头。paste、✛、⇅ 这几个名字只出现在编辑器列表里。
- 横向拖动这一排,能把屏幕外的键拉进来
- 显示/隐藏键盘的按钮在拖动区域之外,位置固定
- 设置里那一行直接显示占用情况,比如
6/12、9/12

编辑器分四组。PREVIEW 实时渲染这条栏最终的样子。IN TOOLBAR · n/12 就是栏本身:拖 ≡ 调顺序,点红色 − 移出。CUSTOM 是你自己做的键。AVAILABLE 是当前不在栏上的全部内置键,每个带一个绿色 +,点了加回来。
- 移出内置键不是删除,它只是回到 AVAILABLE,内置键丢不了。自定义键不一样:CUSTOM 组里的红色
−是真删,没有撤销。 - 只有栏本身能排序。AVAILABLE 不能手动排,它按存储顺序显示,重排栏时会跟着变。
- 版本更新加了新的内置键,而你的栏已经满了,新键会进 AVAILABLE,不会悄悄消失。
默认不在栏上的 16 个键
Section titled “默认不在栏上的 16 个键”其中两个专门给编程智能体用:⌃End 把 Claude Code 长长的对话跳到最新一行,⇧Tab 切换它的模式。这两个在软键盘上打不出来:没有 End 键,Shift-Tab 也得有实体 Tab。

| 键 | 作用 |
|---|---|
| ctrl | Control,粘滞,只生效一次 |
| ⇅ | 翻历史 |
| ⌃End | 跳到末尾 |
| ⇧Tab | 反向 Tab/切换模式 |
| ^D | 文件结束(EOF) |
| ^R | 反向搜索 |
| ^A | 行首 |
| ^E | 行尾 |
| ^W | 删一个词 |
| ^Z | 挂起 |
| ↑ / ↓ | 上一条/下一条历史命令 |
| Home / End | Home、End |
| PgUp / PgDn | 上翻页、下翻页 |
有三个键不是点一下就完
Section titled “有三个键不是点一下就完”✛ 方向摇杆。它是一个带死区、按主轴判断方向的摇杆:先按住,再推。进入一个方向时发一次,按住不放就连发。普通方向键走摇杆自己的编码器,所以 application-cursor 模式照常生效,shell 的历史搜索也不受影响。生效前那一下短按是故意的:这条栏离底部的 Home 指示条很近,iOS「上滑回桌面」的手势可能就从这个键上起手。要是碰到就发,这一滑的方向就会当成真的方向键发到远端。
⇅ 翻历史。往上拖看更早的,往下拖看更新的,一步三行,按住不放就一直翻。它放在栏上而不是终端画面上,是为了不和点击聚焦、长按选中这两个手势冲突。翻的是谁那边的历史,取决于会话类型,下面单独说。
按一下生效,用完自动解除
Section titled “按一下生效,用完自动解除”ctrl 粘滞键。点它,再打一个字母,这个字母就按对应的控制码发出去,然后键自动解除。点栏上任何别的控件(esc、tab、paste、摇杆)也会解除它,不会粘到你没打算按的键上。
⇅ 翻的到底是哪边的历史
Section titled “⇅ 翻的到底是哪边的历史”只有普通 shell 的历史留在手机上。其他情况下历史在服务端,这个键是请服务端翻页。这么做是对的,但也说明「翻历史」不是纯本地操作。你至少该知道自己用的是哪一种。
- 纯 SSH,或 mosh 下的普通 shell:翻 Moshpit 自己的缓冲,什么都不往外发。当前程序接管了鼠标的话,它收到的是合成出来的滚轮事件。
- SSH + tmux:接管了鼠标的程序(Claude Code、vim)通过控制模式连接收到滚轮事件。普通 shell 翻的是本地留的一份窗格历史,连上时预先取好,你在看的时候新输出先攒着。不会进 tmux 的 copy-mode(见滚动)。
- mosh + tmux:接管鼠标的程序收滚轮事件,普通 shell 收 tmux copy-mode 按键,都走 mosh 那条路。因为 mosh 画出来的那块屏幕是 copy-mode 唯一会重绘的地方。翻页做了节流,按住不放也不会一口气把历史翻穿。
- herdr:发一条
terminal.scroll消息,由服务端决定是滚轮还是翻历史。herdr 在本地完全没有回滚:它的帧是整屏重绘,不是追加的字节流。手机上攒不出可翻的历史,每翻一步都是一次往返。
在 Shortcuts 编辑器右上角点 +。Add Shortcut 是一整屏表单,从上往下填。顶部有这个键的实时预览和一个 SLOT n/12 读数,让你知道这一格花在哪。
- TYPE:Key Combo 发修饰键加主键。Text 原样输入一段文字。Command 输入一条命令并按回车。
- QUICK KEYS:41 个预设,分 PREFIX、CONTROL、SPECIAL、NAVIGATION、F-KEYS(F1–F12)五组。点一个填入触发键,再改标签。PREFIX 组第一个就是多路复用器前缀
C-b,tmux 和 herdr 默认都是它。 - TRIGGER:四个修饰键开关
⌃ ⌥ ⇧ ⌘,加一个主键。手机上⌘按 Control 的语义送进 PTY。 - ACTION:实际发送的内容。
\r、\n、\t、\e会解释成对应的控制字符,转义序列可以直接写。Append Return 在末尾补⏎提交。 - DISPLAY:键上的标签最多 6 个字符。Description 是编辑器列表里显示的说明。
- SCOPE:留空,这个键处处可见。绑定到某几台主机,就只在那些连接上出现。实际用到超过 12 个键,靠的就是这个。
填了 ACTION,TRIGGER 就不算数。Key Combo 只要 ACTION 里有内容,就原样发送,上面的修饰键和主键一律忽略。有几个快捷预设(S-Tab、Del、BSpace、Home、End、PgUp、PgDn 和全部 F 键)填的是 ACTION 而不是 TRIGGER。事后改 TRIGGER 不会有任何变化,得先清空 ACTION。
这个表单里有两处,实际做的比看上去少
Section titled “这个表单里有两处,实际做的比看上去少”这两处都是当前版本的真实情况。先说清楚,免得你照着它们排计划。
- Color 色块存了,但没画。栏上每个键,不管内置还是自定义,都是同一种深灰色圆角键。你的选择会保存下来,但现在栏上没有颜色区分。
- 「Repeat on hold」不是逐键开关。不管开不开,每个 Key Combo 键按住都会连发。副标题写的是按住 0.4 秒后每秒 30 次,实际大约 0.3 秒开始,每秒 14 次左右。按「按住会连发」理解就行。
Only in a multiplexer
Section titled “Only in a multiplexer”SCOPE 组还有一个开关 Only in a multiplexer,说明写的是「只在会话跑着 tmux 或 herdr 时显示」。发前缀组合键的键适合放这里。在纯 SSH 的 shell 上,它只是占位。
这个开关早先只认 tmux,herdr 会话算作「不在多路复用器里」,结果你标记过的键在唯一想用它的那条连接上悄悄消失了。这个问题已经修好。存储字段保留旧名字,是为了让已保存的快捷键还能读出来,变的只是含义。
「在多路复用器里」的准确定义:App 在这条连接上握着一条活的 tmux 或 herdr 控制通道,而不是「屏幕上出现了 tmux 这个词」。走 mosh 时,这条控制通道是另开的一条轻量 SSH 连接,因为 mosh 传的是渲染好的画面,带不了 tmux -CC,也带不了 herdr 的帧协议。主机不给 Moshpit 开这条旁路连接,就算你眼睛看着会话里跑着多路复用器,这个键也不会出现。
tmux 和 herdr 的前缀键不一样
Section titled “tmux 和 herdr 的前缀键不一样”两边的前缀默认都是 ⌃ b,所以 PREFIX 那个预设对谁都对。分歧在前缀后面绑的是什么。Moshpit 的面板会按每条连接的多路复用器打印正确的键位,就是因为这一点。
| 你要做的 | tmux | herdr |
|---|---|---|
| 列出会话/工作区 | ⌃ b s | ⌃ b w |
| 切换窗口/标签页 | ⌃ b 再按 1–9 | ⌃ b n / ⌃ b p,逐个切换,不能按数字跳 |
| 窗格 | ⌃ b q 列出窗格 | ⌃ b v 分屏。herdr 没有「列出窗格」这个键 |
记住 ⌃ b q:在 tmux 里是列出窗格,在 herdr 里是断开连接。名词也不同,tmux 叫 Session 和 Window,herdr 叫 Workspace 和 Tab。
这是两件不同的事。一件由终端引擎负责,键盘配对上就能用。另一件专门修过,而且专门决定了哪些东西不打开。
蓝牙键盘能做什么
Section titled “蓝牙键盘能做什么”物理按键事件直接进终端,终端需要的键本来就都在:
- 方向键,识别 application-cursor 模式。
⌥←/⌥→发 emacs 的按词移动,⌃←/⌃→发 control-left/right - Esc、Tab、Shift-Tab(反向 Tab)、前向删除
- Home 和 End。Page Up 和 Page Down 在远端不处于 application-cursor 模式时翻的是画面
- Control 组合键。Option 当 Meta 用,运行时用
⌥⌘O切换 - 功能键到 F11。长按 0.4 秒开始重复,之后每 0.1 秒一次。
边界说清楚:Moshpit 没有外接键盘的键位重映射。没有 App 级的 ⌘ 快捷键,没有键位设置页,F12 及以上没有任何作用。Shortcuts 编辑器只管屏幕上那条栏。外接键盘打不出来的键,放到栏上去。
拼音、日文和候选栏
Section titled “拼音、日文和候选栏”终端视图一般会关掉自动纠错、拼写检查和智能引号。对 shell 来说这是对的。但在真机上,这些一关,键盘的联想区也跟着塌掉,而拼音和日文输入法的候选栏正是画在那里。结果就是一个候选都看不到。
Moshpit 只为这一件事,在终端上重新打开了拼写检查。自动纠错仍然关着,shell 里的命令不会改写,ls 不会变成 last。自动大写、智能引号和智能连字符也都关着,'foo' 和 --flag 发出去就是你打的样子。
键盘弹出、收起、改变高度的过程中,终端画布尺寸是冻住的,中英文键盘互切也算在内。切换途中重排会把画面弄花。
设置 → DISPLAY → Theme。每一行都把配色直接画出来:一个迷你终端,加八个基础 ANSI 色块。一串主题名字回答不了你在这里唯一关心的问题。
设置 → Display
直接选一套,或者从一套改起
Section titled “直接选一套,或者从一套改起”长按内置主题,选 Duplicate & Edit。长按自己的主题,有 Edit、Duplicate、Copy JSON、Delete。+ 菜单里是 New Theme 和 Import JSON…。
- 内置主题只读,复制一份是唯一的入口
- 删掉正在用的主题,自动切回默认
- 8 套内置全是深色。没有浅色终端主题。

| 主题 | 背景色 | |
|---|---|---|
| GitHub Dark | #050507 |
默认 |
| Liquid Glass | #0E1019 |
深色玻璃质感 |
| Bioluminescent | #0D1117 |
|
| Dracula | #282A36 |
|
| Nord | #2E3440 |
|
| Solarized Dark | #002B36 |
|
| Monokai | #272822 |
|
| Tokyo Night | #1A1B26 |
屏幕顶部是一段假的 git status 会话,用你正在编辑的配色画出来。选它是因为一屏就能同时看到提示符的绿、路径的蓝、diff 的红绿一对、警告的黄,还有暗色的次要文字。点 Save 之前什么都不会生效。中途退出,正在跑的终端一点没变。
四组:NAME、TERMINAL(背景、前景、光标)、ANSI COLORS(「shell、diff 和 TUI 就用这八个颜色上色」)、BRIGHT COLORS。
亮色默认自动推导:每个亮色是对应基础色朝白色混 32%。这里故意没用 xterm 手工挑的那张表。这样提亮结果可预期,色相不变,绝不会更暗。而且和「把基础色直接抄进亮色」不同,亮黑和黑能区分开。很多工具用亮黑画灰字,两者一样就等于看不见。想完全自己定,打开 Override bright colors。
导出的 JSON 格式化过,键名排过序。同一套主题再导一次,得到的是能看的 diff,不是一堆重排。格式故意做成扁平、用人话命名:可以手改,从别的终端模拟器抄来的配色也能直接解出来。
{ "name": "My Palette", "background": "#0D1117", "foreground": "#C9D1D9", "cursor": "#5FE3D8", "black": "#0A0C10", "red": "#F85149", "green": "#56D364", "yellow": "#E3B341", "blue": "#58A6FF", "magenta": "#BC8CFF", "cyan": "#39C5CF", "white": "#B1BAC4" // brightBlack … brightWhite 可选}- 简写别名也认:
bg、fg、text、cursorColor、caret,以及按位置的ansi0…ansi15 - 十六进制接受
#RGB、#RRGGBB、RRGGBB、0xRRGGBB。#RRGGBBAA也能读,透明度丢掉,终端调色板里没有 alpha 这回事 - 某个颜色写错了,那一格变成黑色,整份导入不会失败。差一点就对的主题照样能加载,进调色器改掉就行
- 单个主题和数组都收。每次导入都生成新的 id,payload 里的 id 一律不采用。这样既不会撞上内置主题,也不会覆盖你还想留的主题。重名自动加「 2」「 3」。
设置 → DISPLAY → Font。7 款程序员字体打包在 App 里,在哪台设备上看都一样。另外 3 款来自 iOS。
- 随 App 打包:JetBrains Mono、Maple Mono、Fira Code、Source Code Pro、IBM Plex Mono、Hack、Anonymous Pro
- 来自 iOS:SF Mono(默认)、Menlo、Courier
连字故意关掉了
Section titled “连字故意关掉了”Fira Code 和 JetBrains Mono 都在,但用不到它们的连字。字符终端按字形索引一列放一个字形。带连字的字体会把 ->、!=、== 合成一个字形,后面每个字形都提前一列,整行就乱了。对终端来说关掉才是正确的,也不打算再打开。
内置的程序员字体没有中日韩字形。远端回显的中文,或输入法组词时的浮层,以前会显示成方块。Moshpit 给你选的任何字体挂了一条回退链:PingFang SC、PingFang TC、Hiragino Sans、Apple SD Gothic Neo,再到 Apple Symbols(勾、箭头、制表符这类)和 Apple Color Emoji。ASCII 始终用你选的等宽字体,中日韩字符保持双宽,列对齐不受影响。
设置 → DISPLAY → Font Size 是 8 到 18 磅的滑块,步长 1,默认 9。下面有一行实时样例 ABCdef 012 ~/ssh $。在终端里双指缩放,停在哪个字号就写回这个设置,下次重绘不会弹回去。
设置 → APPEARANCE 里,Accent 和 App Icon 是分开的两行。它们曾经是一个列表,选颜色的同时也换了图标。拆开不是为了好看,是 iOS 的限制决定的。
内置四套:Signal Room(默认,靛蓝)、Teal Line、Terminal Green、Amber Console。自定义强调色只有一个颜色。按下状态和两层淡淡的背景色都从它推出来,而且只存这一个色值。以后推导规则改了,已保存的强调色也跟着变。
- 编辑器把你选的颜色画在 App 自己界面的模型上:一个 CONNECT 按钮、一个 MOSH 标签、一行选中状态。旁边就是固定的警告色、成功色、错误色,撞色在保存前就看得出来。
- 状态色永远不变。警告、成功、错误三个颜色固定,不会和强调色混淆。
- 强调色在你离开这个页面时才生效,不是点一下就换。点的时候那一行先打勾,退出时提交。立刻生效会重建整棵视图树,把这个页面一起顶掉,你会弹回设置页。想比较两个颜色,就得来回进出。
App 图标
Section titled “App 图标”9 个,全是 Liquid Glass,带深色和着色两种外观:Moshpit、Pit、Island、:wq、Prefix、Localhost、Prompt、Cursor、Hail。其中大多数根本不是 App 的标志。这一组是真正不同的图,不是一张图换九个颜色。选择器里显示的是打包进去的真图,不是重新画的,你看到的就是主屏幕上会出现的。
设置 → CURSOR:形状 Block、Bar 或 Underline。颜色可选青、绿、白或你的强调色。Blink 按 1.1 秒的节奏。琥珀色不在列表里,那是漫游时自动切换的颜色。
「Trail on predict」和上面的 Color 色块是同一个情况。开关在,默认开着,说明写的是标出 mosh 预测回显里服务器还没确认的字符。但今天真正会画它的,只有设置页里紧挨着的那个小预览。终端渲染路径没有任何一处读这个设置,真实光标开不开都没有拖尾。
你的选择在每一批输出之后都会重新应用一次。远端程序会随手发光标样式的控制序列,vim、zsh 插件、编程智能体都会。只应用一次的话,下一条序列一来就没了,光标时对时不对。
快捷键和主题会在多台设备之间同步吗?
不会。栏的排列、自定义快捷键、自定义主题和自定义强调色全部存在本机。Moshpit 没有账号,也没有 iCloud 同步,第二台设备从默认状态开始。两边都要用,把主题复制成 JSON 粘过去。
自定义键能用颜色区分吗?
目前不能。Add Shortcut 里的 Color 会保存,但没有任何渲染路径读它。栏上每个键都是同一种深灰色圆角键。
光标拖尾有用吗?
终端里没用。「Trail on predict」存下来了,也画在设置页自己的预览上,但渲染路径没人读它。开和关看到的光标一样。
⇅ 会往服务端发东西吗?
经常会。接管鼠标的程序在哪种连接下都收滚轮事件。普通 shell 在 SSH 下翻的是本地历史,带不带 tmux 都一样,只有 mosh + tmux 才发 copy-mode 按键。herdr 永远发一条 terminal.scroll 消息,由服务端翻页,因为它的帧是整屏重绘,本地攒不出可翻的历史。
外接键盘能改键位吗?
不能。物理按键由终端引擎处理,不可重映射,也没有 App 级的 ⌘ 快捷键。F12 及以上没有作用。Shortcuts 编辑器只管屏幕上那条栏。
有浅色终端主题吗?
没有。8 套内置全是深色。可以在调色器里自己做一套浅色,把背景设成浅的没人拦着,但 App 不自带。
Fira Code 的连字为什么不生效?
故意关的。一列一个字形,终端网格才能对齐。连字把两个字符合成一个字形,后面的内容整体左移一列。这是为了正确性,不是漏做。
栏上能放超过 12 个键吗?
不能,12 是硬上限。绕开的办法是 SCOPE:把键绑到指定主机,或者只在多路复用器会话里显示。它就不会在用不着的连接上占位。