跳转到内容

键盘、主题与快捷键

第一部分。12 个位置、22 个内置键,编辑器里拖着排序。还能自己做键。

第二部分。蓝牙键盘覆盖到哪、哪些做不到,以及拼音和日文输入为什么专门修过一次。

第三部分。八套终端主题加一个调色器、十种字体、八个 App 图标,强调色自己定。

这条栏是 Moshpit 自己画的——系统那个 input accessory view 被关掉了, 所以你看到的是 app 的栏,不是键盘的。最多放 12 个键,默认给你 6 个。

设置 → KEYBOARD · KEYS → Shortcuts

默认 6 个,另外 16 个在候选池里

Section titled “默认 6 个,另外 16 个在候选池里”

装好就有的是 esctab^C^L、粘贴和方向摇杆,顺序就是这个。 其余 16 个内置键放在编辑器的 AVAILABLE 分组里,你要才加。 有三个 chip 在栏上画的是图标不是文字——粘贴是剪贴板、摇杆是四向箭头、翻历史是上下箭头; paste 这几个名字只在编辑器列表里出现。

  • 横向拖这一排,能把屏幕外的键拉进来
  • 收起/调出键盘的按钮不在拖动区里,位置永远不变
  • 设置里那一行直接写着占用数——6/129/12

Shortcuts 编辑器:上面是这条栏的实时预览,下面是可拖动排序的键列表

编辑器分四组。PREVIEW 按最终样子实时渲染这条栏; IN TOOLBAR · n/12 就是栏本身,拖 改顺序,点红色 移出去;CUSTOM 放你自己做的键;AVAILABLE 放当前不在栏里的全部内置键, 每个后面有个绿色 + 把它加回来。

  • 移出内置键不等于删掉它,只是回到 AVAILABLE,内置键丢不了。自定义键不一样: CUSTOM 那组里的红色 是真删,删了没有撤销。
  • 能排序的只有栏本身。AVAILABLE 不能手动排,它跟着存储顺序走,而重排栏会带着它一起动。
  • 版本更新加了新内置键、而你的栏已经满了,新键会落到 AVAILABLE,不会悄悄消失。

其中两个是专门为 coding agent 放的:⌃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 上翻页、下翻页

✛ 方向摇杆。带死区、按主轴判断方向:手指进入某个方向先发一次,按住就连发。 没带修饰键的方向键走摇杆自己的编码器,所以 application-cursor 模式是跟着走的, shell 的历史搜索不会被写死的序列搞坏。

⇅ 翻历史。往上拖看更早的、往下拖看更新的,一次三行,按住就一直翻。 它放在栏上而不是终端画面上,是为了不跟点击聚焦、长按选中抢手势。 至于翻的是谁手上的历史,取决于这条会话——下面单独说。

ctrl 粘滞。点它,再打一个字母,这个字母就按对应的控制码发出去,然后 chip 自己解除。 点栏上任何其它控件——esc、tab、paste、摇杆——也会解除它, 免得它悄悄粘到你根本没想按的那个键上。

只有裸 shell 的历史是留在手机上的。其它情况下历史都在服务端, 所以这个拖块是去请服务端翻页。这是对的做法,但也意味着“翻历史”并不是一个纯本地动作—— 你至少该知道自己在用哪一种。

  • 裸 SSH,或者 mosh 下的裸 shell——翻 Moshpit 自己的缓冲,什么都不往外发。 如果当前程序抢了鼠标,那它收到的是合成出来的滚轮事件。
  • SSH + tmux——由 tmux 的 -CC 控制通道判断:抢了鼠标的程序(Claude Code、vim)收滚轮, 普通 shell 走 tmux copy-mode。两种都是 tmux 服务端在翻。
  • mosh + tmux——判断一样,但滚轮字节或 copy-mode 按键是从 mosh 这条路走的, 而且按页做了节流,按住拖块不会把历史一路撕过去。
  • herdr——发一条 terminal.scroll,滚轮还是 scrollback 由服务端决定。 herdr 在本地根本没有 scrollback:它的帧是逐格绝对定位的整屏重绘,不是追加式字节流, 手机上攒不出可翻的历史,所以每翻一步都是一次往返。

在 Shortcuts 编辑器右上角点 。Add Shortcut 是一整屏、从上往下填, 顶上有 chip 的实时预览和一个 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——chip 标签最多 6 个字符;Description 是你在编辑列表里看到的说明。
  • SCOPE——不选就是全局。绑到某几台主机后,这个键只在那些连接的栏上出现, 这也是实际用超过 12 个键的办法。

写了 ACTION,TRIGGER 就不算数了。Key Combo 只要负载非空,就原样发负载, 上面那组修饰键和主键一律被忽略。有几个快捷预设——S-Tab、Del、BSpace、Home、End、 PgUp、PgDn 和全部 F 键——填的是负载而不是触发器,所以你事后改触发器不会有任何变化, 得先把 ACTION 清空。

这个表单里有两处,做的比看起来少

Section titled “这个表单里有两处,做的比看起来少”

都是当前版本的真实情况,先说清楚,免得你照着它排计划。

  • Color 那一栏存了但没画。栏上每个 chip——内置的和自定义的——都是同一个深灰药丸。 你的选择会被保存下来,但现在栏上没有任何颜色区分。
  • “Repeat on hold” 不是逐键开关。不管开没开,每个 Key Combo chip 按住都会连发。 副标题写的是“按住 0.4 秒后每秒 30 次”,实际是按住约 0.3 秒开始、每秒 14 次左右。 就按“按住会连发”理解就行。

SCOPE 那组还有一个开关叫 Only in a multiplexer,说明是 “只在这个会话跑着 tmux 或 herdr 时显示”。发前缀组合的键适合放这里—— 在裸 SSH shell 上它纯属占位。

这个开关早先只认 tmux,结果 herdr 会话被判成“不在 multiplexer 里”, 于是把你标记过的 chip 悄悄丢掉了——而且丢的正是你唯一想让它出现的那个连接。这个已经修好。 存储字段名保持原样是为了让已保存的快捷键还能读出来,改的只是含义。

“在 multiplexer 里”的准确含义:是这条连接上 app 手里有一条活的 tmux 或 herdr 控制通道,而不是“屏幕上出现了 tmux 这个词”。走 mosh 的时候,这条控制通道 是另起的一条轻量 SSH 连接——因为 mosh 传的是渲染完的屏幕差分,承载不了 tmux -CC,也承载不了 herdr 的帧协议。这条旁路连不上,就算你眼睛看着会话里明明 跑着 multiplexer,这个 chip 也不会出现。

两边的前缀默认都是 ⌃ b,所以 PREFIX 那个快捷预设对哪边都对。 分岔的是前缀后面绑了什么——Moshpit 在自己的面板里按连接分别打印正确的键位,也是因为这件事。

你想做的 tmux herdr
列 session/workspace ⌃ b s ⌃ b w
切 window/tab ⌃ b 再按 19 ⌃ b n / ⌃ b p,一步一步走,不能按数字跳
pane ⌃ b q 列出来 ⌃ b v 是分屏;herdr 没有“把 pane 列给我看”这个键

要记住的是 ⌃ b q:在 tmux 里是列 pane, 在 herdr 里是断开连接。叫法也不同——tmux 说 Session 和 Window, herdr 说 Workspace 和 Tab。

这是两件事。一件由终端引擎负责,配对上就能用; 另一件是专门修过的,而且专门决定了打开哪些东西。

物理按键事件直接进终端,所以终端要的那些键本来就在:

  • 方向键,跟随 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 编辑器只管屏幕上那条栏。外接键盘打不出来的键,就放到栏上去。

终端视图一般会关掉自动纠错、拼写检查和智能引号,对 shell 来说这是对的。 但在真机上,这些一关,键盘的预测/联想区也跟着塌掉——而拼音和日文输入法的候选栏 正是画在那个区域。结果就是:打拼音,一个候选都看不见。

Moshpit 只为这一件事,把终端上的拼写检查重新打开。自动纠错保持关闭, 所以 shell 里的命令永远不会被改写——ls 不会变成 last。 自动大写、智能引号和智能连字符也都保持关闭,'foo'--flag 打出去就是你打的样子。

键盘弹出、收起、改高度的整个过程里,终端的画布尺寸是冻住的, 中英文键盘互切也算在内。切换途中重排版会把屏幕搞花。

设置 → DISPLAY → Theme。每一行都直接把配色画出来—— 一个迷你终端加上八个基础 ANSI 色块。因为一串主题名字回答不了你在这里唯一关心的问题。

设置 → Display

长按内置主题选 Duplicate & Edit;长按自己的主题有 Edit、Duplicate、 Copy JSON、Delete。右上角 + 菜单是 New ThemeImport JSON…

  • 内置主题只读,复制一份是唯一的入口
  • 删掉正在用的那套,会自动切回默认主题
  • 八套内置全是深色。没有浅色终端主题。

设置页:强调色、App 图标、终端字体、字号和主题几行

主题 背景色
GitHub Dark #050507 默认
Liquid Glass #0E1019 深玻璃质感配色
Bioluminescent #0D1117
Dracula #282A36
Nord #2E3440
Solarized Dark #002B36
Monokai #272822
Tokyo Night #1A1B26

屏幕顶上是一段用你当前草稿配色画出来的假 git status 会话。 选它是因为一屏就能同时压到:提示符的绿、路径的蓝、diff 的红绿一对、警告的黄, 还有暗色的次要文字。改动只在点 Save 时才生效,所以中途退出,正在跑的终端一点没变。

四组:NAMETERMINAL(背景/前景/光标)、 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 可选
}
  • 简写别名也认:bgfgtextcursorColorcaret,以及按位的 ansi0ansi15
  • 十六进制接受 #RGB#RRGGBBRRGGBB0xRRGGBB#RRGGBBAA 能进来,但透明度会被丢掉—— 终端调色板里的一格没有 alpha 这回事
  • 某一个颜色写错,那一格变成黑色,而不是整份导入失败。一份只错一处的主题 照样能加载,进调色器改掉就行
  • 单个主题和数组都收。每次导入都会重新生成 id—— payload 里的 id 一律不采信,这样它既撞不到内置主题,也覆盖不掉你还想留着的主题。 重名会自动加 “ 2”、“ 3”。

设置 → DISPLAY → Font。七款程序员字体装在 app 里,所以在哪台设备上看都一样; 另外三款来自 iOS 系统。

  • 随 app 打包:JetBrains Mono、Maple Mono、Fira Code、Source Code Pro、 IBM Plex Mono、Hack、Anonymous Pro
  • 来自 iOS:SF Mono(默认)、Menlo、Courier

Fira Code 和 JetBrains Mono 都在列表里,但你拿不到它们的连字。 字符终端是按字形索引一列一个字形排的;带连字的字体会把 ->!=== 合成一个字形,于是它后面每一个字形都往左错一列,整行就花了。 关掉才是终端该有的行为,这个不建议想办法打开。

那几款程序员字体本身没有 CJK 字形,所以从远端回显过来的中文—— 或者输入法组字时的浮层——以前会显示成豆腐块。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 里,AccentApp Icon 是分开的两行。 它们曾经是一个列表,选个颜色顺带换图标。拆开不是为了好看,是 iOS 的限制决定的。

内置四套:Signal Room(默认的靛蓝)、Teal LineTerminal GreenAmber Console。自定义强调色只有一个颜色—— 按下态和两层很淡的背景底色都是从它推出来的,而且只存这一个色值, 这样以后调整推导规则,已经保存的强调色也能跟着变。

  • 编辑器把你的颜色画在 app 自己界面的模拟件上——一个 CONNECT 按钮、一个 MOSH 药丸、 一行选中态——旁边就摆着固定的警告色、成功色、错误色,所以撞色在保存前就能看出来。
  • 状态色永远不动。警告、成功、错误保持固定,不会被误认成强调色。
  • 强调色是在你退出这个页面时才应用的,不是点一下就换。 点的时候先在那一行打勾,退出时提交。立刻应用会重建整棵视图树, 连带把这个二级页面一起顶掉——你点一下强调色就被弹回设置页, 想对比两个颜色得来回进出。

八个:Moshpit、Teal、Green、Amber、Daylight、Mono、Cursor、Hail。 其中有两个根本不是 app 那个标志——这一组做的是真的不同的图,不是同一张图换八个颜色。 选择器里显示的是打包进去的那张真图,不是重新画一遍,所以你看到的就是桌面上会出现的。

设置 → CURSOR:形状 Block/Bar/Underline;颜色可选青、绿、白或你的强调色; Blink 按 1.1 秒节奏。琥珀色不在可选项里——那是漫游时自动切上去的颜色。

“Trail on predict” 和上面那个 Color 一个毛病。开关在、默认还是开的, 文案写的是标出 mosh 预测回显里服务器还没确认的字符——但今天真正会画它的, 只有设置页里紧挨着的那个小预览。终端的渲染路径没有任何一处读这个设置, 所以真实光标开不开都没有拖尾。

你的选择在每一批输出之后都会被重新贴一遍。远端程序会随手发光标样式控制序列—— vim、zsh 插件、coding agent 都会——只贴一次的话,下一条序列一来就没了, 光标就会时对时不对。

快捷键和主题会在多台设备之间同步吗?

不会。栏的排列、自定义快捷键、自定义主题和自定义强调色,全部存在本机。 Moshpit 没有账号,也没有 iCloud 同步,第二台设备是从默认状态开始的。 真要两边都用,长按主题选 Copy JSON 再粘过去。

自定义键能按颜色区分吗?

目前不能。Add Shortcut 里的 Color 会被保存,但没有任何渲染路径读它—— 栏上每个 chip 都是同一个深灰药丸。

光标拖尾到底有没有用?

终端里没有。“Trail on predict” 存下来了,也会画在设置页自己的预览上, 但渲染路径没人读它,所以开和关看到的光标是一样的。

⇅ 会往服务端发东西吗?

大多数情况下会。只有裸 shell 的历史在手机上。跑 tmux 时发的是滚轮事件或 copy-mode 按键; 跑 herdr 时发的是一条 terminal.scroll,由服务端翻页—— 因为 herdr 的帧是整屏重绘,本地压根攒不出可翻的历史。

外接键盘能改键位吗?

不能。物理按键由终端引擎处理,不可重映射,也没有 app 级的 快捷键, F12 及以上不做任何事。Shortcuts 编辑器只管屏幕上那条栏。

有浅色终端主题吗?

没有。八套内置全是深色。你可以在调色器里自己调一套浅色—— 没有什么拦着你把背景设成浅的——但 app 不附带。

Fira Code 的连字为什么不生效?

是故意关掉的。一列一个字形,是终端网格能对齐的前提; 一个连字把两个字符合成一个字形,后面所有内容就整体左移一列。 这是正确性上的取舍,不是漏做。

栏上能放超过 12 个键吗?

不能,12 是硬上限。绕开它的办法是 SCOPE:把键绑到指定主机, 或者只在 multiplexer 会话里显示,它就不会在用不到的连接上占位置。