zudo-text

検索したい単語を入力

いつでも検索バーを開ける

Device Override

同じワークスペースを複数のデバイスで共有していると、「MacBook ではフォントサイズ 14 だけど、iPhone では 18 にしたい」「仕事用のデスクトップだけサイドバー位置を変えたい」といった、デバイスごとに変えたい設定が出てきます。

Device Override は、ベース設定(.zudotext.settings.json に保存される通常の設定)にデバイス単位で差分を重ねるための仕組みです。ベース設定は全デバイスで共有され、その上に現在のデバイスの override だけが適用されます。

どういう問題を解決するか

  • ベース設定は 1 つのファイルに保存され、クラウド同期経由で全デバイスに配られます。

  • デバイス固有の好み(フォントサイズ、レイアウト、ピン、ショートカット…)を、他のデバイスに影響を与えずに調整できます。

  • 別のデバイス用の override をまとめて編集して、そのデバイスでアプリを開いた瞬間から反映させる、といった使い方もできます。

デバイスの識別方法

デバイスの識別は 2 つのレイヤーで動きます。

  1. ローカルデバイス名 — そのデバイスが自分をどう呼ぶかを表す文字列。ブラウザ/REST コンテキストでは localStoragezudotext.deviceName キーに保存されます。ここはデバイス固有のローカル状態なので、同期されません。

  2. 同期された deviceOverrides マップ.zudotext.settings.jsondeviceOverrides フィールド。キーはデバイス名(上のローカル名と一致させる)、値は「そのデバイスで適用したい部分的な設定」です。こちらはベース設定と一緒に同期されます。

効果的な設定は getEffectiveSettings() によって「ベース設定 + 現在のデバイス名にマッチする override ブロック」として解決されます。ローカルデバイス名が未設定の場合、または deviceOverrides に一致するキーがない場合は、ベース設定がそのまま効きます。

このデバイスに名前をつける

  1. Settings (Mod+,) を開きます。

  2. サイドバーから Device Override を選びます。

  3. ツリー上部に「Name this device…」バナーが出ていれば、Name this device ボタンからインライン name-picker を起動します。

  4. 候補チップ(環境から推測した候補名)をクリックするか、自分で入力して 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 自体(自己参照になるため)

  • ランタイム状態(activeDraftdraftCountsimilarDocsPanelSizesimilarDocsInnerRatio など)

whitelist 外のキーをハンド編集などで deviceOverrides に書き込んでも、読み込み時の validation(validateDeviceOverride)で静かにドロップされます。不正値(型不一致・レンジ外)も同様に捨てられ、ベース値にフォールバックします。

デバイスの override ブロックを削除する

特定のデバイス用の override をまるごと消したい場合:

  1. Settings → Device Override を開きます。

  2. そのデバイスのノード右端にある メニュー(デバイスコンテキストメニュー)を開きます。

  3. 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
      }
    }
  }
}

保存すると、読み込み時に validateSettingsvalidateDeviceOverrides の順に検証が走り、不正なキー/値は静かにドロップされます。キー両端の空白は自動で trim されるので、" My MacBook " のようなキーは "My MacBook" として正規化されます(重複検出の抜け漏れを防ぐため)。

注意: editor.disableVimOnMobile は削除されました

Device Override 導入に伴い、旧来の editor.disableVimOnMobile 設定はこのリリースで削除されました。Vim モードは純粋に editor.vimMode のみで制御されます。モバイル/デスクトップで Vim の有効/無効を切り替えたい場合は、該当デバイスの override として editor.vimMode を設定してください。