Device Override
同じワークスペースを複数のデバイスで共有していると、「MacBook ではフォントサイズ 14 だけど、iPhone では 18 にしたい」「仕事用のデスクトップだけサイドバー位置を変えたい」といった、デバイスごとに変えたい設定が出てきます。
Device Override は、ベース設定(.zudotext.settings.json に保存される通常の設定)にデバイス単位で差分を重ねるための仕組みです。ベース設定は全デバイスで共有され、その上に現在のデバイスの override だけが適用されます。
どういう問題を解決するか
ベース設定は 1 つのファイルに保存され、クラウド同期経由で全デバイスに配られます。
デバイス固有の好み(フォントサイズ、レイアウト、ピン、ショートカット…)を、他のデバイスに影響を与えずに調整できます。
別のデバイス用の override をまとめて編集して、そのデバイスでアプリを開いた瞬間から反映させる、といった使い方もできます。
デバイスの識別方法
デバイスの識別は 2 つのレイヤーで動きます。
ローカルデバイス名 — そのデバイスが自分をどう呼ぶかを表す文字列。ブラウザ/REST コンテキストでは
localStorageのzudotext.deviceNameキーに保存されます。ここはデバイス固有のローカル状態なので、同期されません。同期された
deviceOverridesマップ —.zudotext.settings.jsonのdeviceOverridesフィールド。キーはデバイス名(上のローカル名と一致させる)、値は「そのデバイスで適用したい部分的な設定」です。こちらはベース設定と一緒に同期されます。
効果的な設定は getEffectiveSettings() によって「ベース設定 + 現在のデバイス名にマッチする override ブロック」として解決されます。ローカルデバイス名が未設定の場合、または deviceOverrides に一致するキーがない場合は、ベース設定がそのまま効きます。
このデバイスに名前をつける
Settings (
Mod+,) を開きます。サイドバーから Device Override を選びます。
ツリー上部に「Name this device…」バナーが出ていれば、Name this device ボタンからインライン name-picker を起動します。
候補チップ(環境から推測した候補名)をクリックするか、自分で入力して Confirm します。
名前を決めると、Device Override ツリーに現在のデバイスが表示され、同じ名前でキーの付いた override ブロックが deviceOverrides に追加できるようになります。ベース設定にはまだ変更が加わらない点に注意してください — 何か 1 つでも override 値を変えて初めて、そのデバイス用のブロックが書き出されます。
名前は後から Rename ボタンで変更できます。リネーム時には、deviceOverrides マップ内の該当キーも同時にリネームされます。
override がどう合成されるか
合成ロジックは effective-settings リゾルバの deepMerge() にあります。ざっくり次のルールです。
プレーンオブジェクト — 再帰的にマージされ、override 側に存在するフィールドが勝ちます。
配列 — フルリプレース。override 側に配列があれば、ベースの配列を完全に置き換えます。要素単位でのマージは行いません。
プリミティブ(string / number / boolean) — override 側が勝ちます。
null/undefinedの扱い — 「存在しない」と同じ扱いになり、ベース値が透けて見えます。「override で明示的に null にする」操作はサポートされません。キー自体を消すことで「継承に戻す」を表現します。
つまり、「ベースで font size = 14 / padding = 12、このデバイスだけ font size = 18 にしたい」という場合、override 側には editor.fontSize = 18 だけ書けば OK で、padding 等は自動的にベースから継承されます。
上書きできるセクション・できないセクション
override できるのは、ユーザーが普段 Settings ダイアログで触るセクションです。同期まわりやサブスクリプションなど、全デバイスで整合性を保ちたいものは意図的に除外されています。
上書きできる(whitelist):
General(
general)Colors(
color)Editor(
editor)Vim(
vim)Shortcuts(
shortcuts)Move Buttons(
moveButtons)Quick Actions(
quickActions)iOS(
ios)
上書きできない:
Sync(
sync)— アカウント・ワークスペース情報はデバイスで分岐させないWorkspace Chooser(
workspaceChooser)Font Candidates(
fontCandidates)Subscription(
subscription)deviceOverrides自体(自己参照になるため)ランタイム状態(
activeDraft、draftCount、similarDocsPanelSize、similarDocsInnerRatioなど)
whitelist 外のキーをハンド編集などで deviceOverrides に書き込んでも、読み込み時の validation(validateDeviceOverride)で静かにドロップされます。不正値(型不一致・レンジ外)も同様に捨てられ、ベース値にフォールバックします。
デバイスの override ブロックを削除する
特定のデバイス用の override をまるごと消したい場合:
Settings → Device Override を開きます。
そのデバイスのノード右端にある ⋯ メニュー(デバイスコンテキストメニュー)を開きます。
Remove all overrides for this device を選びます。確認ダイアログで Remove を押すと、
deviceOverridesマップからそのエントリが削除されます。
現在のデバイス自身を含め、どのデバイスでも同じ操作で削除できます(死んだ/使わなくなったデバイスの掃除に使ってください)。
セクション単位で override を消したい場合は、そのデバイス配下のセクションを開き、上部の Reset this section ボタンを押します。該当セクションだけがクリアされ、ベース値が継承されるようになります。セクションが空になった override ブロックは自動的に刈り取られます。
Raw Settings から直接編集する例
Settings ダイアログの Raw Settings タブでは、.zudotext.settings.json 全体を JSON として編集できます。deviceOverrides もここから直接触れます。
{
"editor": {
"fontSize": 14,
"vimMode": true
},
"deviceOverrides": {
"My MacBook": {
"editor": {
"fontSize": 20
}
},
"Work iPhone": {
"editor": {
"fontSize": 18,
"vimMode": false
}
}
}
}保存すると、読み込み時に validateSettings → validateDeviceOverrides の順に検証が走り、不正なキー/値は静かにドロップされます。キー両端の空白は自動で trim されるので、" My MacBook " のようなキーは "My MacBook" として正規化されます(重複検出の抜け漏れを防ぐため)。
注意: editor.disableVimOnMobile は削除されました
Device Override 導入に伴い、旧来の editor.disableVimOnMobile 設定はこのリリースで削除されました。Vim モードは純粋に editor.vimMode のみで制御されます。モバイル/デスクトップで Vim の有効/無効を切り替えたい場合は、該当デバイスの override として editor.vimMode を設定してください。