サポートされるフォーマット
VMark は以下のすべてのファイル形式を直接開きます。差別化ポイントはスキーマ対応プレビューです: ファイルが既知のアーティファクトである場合、VMark は汎用 JSON ツリーではなく、適切なビューをレンダリングします。
フォーマットの有効化
Markdown、プレーンテキスト、YAML/YML は常にフルエディタで開かれます — これらは安定したデフォルトです。以下のその他すべてのフォーマットはデフォルトでオフであり、設定 → フォーマットのカテゴリトグルの後ろにあります:
| トグル | 有効にするもの |
|---|---|
| データフォーマット | .json、.jsonl、.toml(分割ペインのソース + ツリー、Cargo / package.json / pyproject スキーマレンダラー付き) |
| ダイアグラム & SVG | .mmd、.svg(分割ペインのソース + サニタイズされたライブレンダリング) |
| HTML プレビュー | .html、.htm(サンドボックス iframe — HTML のセキュリティモデルを参照) |
| コードビューア | 12 種類の読み取り専用コードビューア(.ts、.tsx、.js、.jsx、.py、.rs、.go、.css、.sh、.bash、.rb、.lua) |
カテゴリがオフの場合、対応する拡張子はプレーンテキストのフォールバックに移行するため、ファイルは引き続き開けます — プレビュー/スキーマビューなしで。トグルを切り替えると、レジストリがその場で再構築されます。開いているタブは適切なアダプターで再マウントされます。
マルチフォーマットサポートへのアップグレード後の最初の起動時、VMark は設定 → フォーマットを促す 1 回限りのトーストを表示します。それを閉じた場合(または新規インストールの場合)、パネルはいつでも設定 → フォーマットにあります。
一覧
| ファミリー | 拡張子 | デフォルト | エディタ | プレビュー |
|---|---|---|---|---|
| Markdown | .md、.markdown、.mdown、.mkd、.mdx | 常にオン | WYSIWYG + ソースモード | レンダリングされた文章 |
| プレーンテキスト | .txt | 常にオン | ソース | — |
| データ — YAML | .yaml、.yml | 常にオン | ソース + ツリー | ナビゲート可能なツリー、スキーマ対応(GitHub Actions) |
| データ — JSON | .json、.jsonl | データフォーマットトグルが必要 | ソース + ツリー | ナビゲート可能な JSON ツリー、スキーマ対応(package.json) |
| データ — TOML | .toml | データフォーマットトグルが必要 | ソース + ツリー | ナビゲート可能なツリー、スキーマ対応(Cargo.toml、pyproject.toml) |
| ダイアグラム | .mmd | ダイアグラム & SVG トグルが必要 | ソース + レンダリング | ライブ Mermaid ダイアグラム |
| ベクター | .svg | ダイアグラム & SVG トグルが必要 | ソース + レンダリング | サニタイズされたインラインレンダリング |
| Web | .html、.htm | HTML プレビュートグルが必要 | ソース + レンダリング | サンドボックス iframe(空の sandbox=""、DOMPurify、CSP) |
| コード(読み取り専用) | .ts、.tsx、.js、.jsx、.py、.rs、.go、.css、.sh、.bash、.rb、.lua | コードビューアトグルが必要 | ビューア(編集への切り替え可) | — |
コードファイルはデフォルトで読み取り専用となり、編集を有効化または外部エディタで開くを提供するバナーが表示されます。
スキーマ対応プレビュー
パスまたはコンテンツが既知のスキーマと一致する場合、VMark は汎用ツリーの代わりに適切なビューを表示します。
GitHub Actions ワークフロー(.github/workflows/*.yml)
ワークフローの視覚化(ジョブ DAG、トリガー、パーミッション)で開きます。
- パス検出:
.github/workflows/下の.yml/.yamlファイルは、YAML が不正な場合でもワークフローレンダラーにルーティングされます — 空のツリーではなく診断付きの縮退ビューが表示されます。(ファイルは最初に YAML アダプターに到達する必要があります。.yml/.yaml拡張子が必要です。) - コンテンツ検出: トップレベルの
on:とjobs:キー。
Cargo.toml
Rust 依存ツリーで開きます — ランタイム、dev、ビルド依存関係、バージョン仕様、フィーチャーフラグ付き。
- パス検出: POSIX または Windows パスでファイル名
Cargo.toml(大文字/小文字不問)。 - コンテンツ検出:
[package]または[workspace]ヘッダー。 - ネットワーク呼び出しなし — VMark は crates.io を解決しません。
package.json
npm 依存ツリーで開きます — dependencies、devDependencies、peerDependencies、optionalDependencies。
- パス検出: ファイル名
package.json。 - コンテンツ検出: トップレベルの
nameとdependencies/devDependencies/peerDependenciesのいずれか。
pyproject.toml
Python 依存ツリーで開きます — PEP 621([project] + [project.optional-dependencies])と Poetry([tool.poetry.dependencies]、[tool.poetry.dev-dependencies]、[tool.poetry.group.<name>.dependencies])の両方。
- パス検出: ファイル名
pyproject.toml。 - コンテンツ検出:
[project]または[tool.poetry]ヘッダー(クリーンな TOML パースを条件とする)。
編集ルール
- Markdown はフルツールバー、段落フォーマット、CJK ルール、数式、Mermaid、脚注などすべての既存 Markdown 機能を搭載。
- データフォーマット(JSON、YAML、TOML)はソースペインにパースエラーのガターマーカー付きで表示。ツリープレビューは入力に合わせてリアルタイム更新。Markdown 専用のメニューアクション(CJK フォーマット、ブロック挿入、段落フォーマット)は無効化されます。
- ビジュアルフォーマット(Mermaid、SVG、HTML)はソースペインにレンダリングビューが右ペインに表示(デバウンス付き)。
- コードフォーマットはシンタックスハイライト付きビューアで開きます。その場で編集に切り替えるか、外部エディタで開けます(下記参照)。
検索、保存、コンテンツ検索
- Cmd+O フィルター: 登録済みすべてのフォーマットをカバーする「すべてサポート済み」プリセット。名前を付けて保存フィルターとデフォルト保存拡張子は、アクティブなタブのフォーマットアダプターから導出されます。
.tomlファイルを保存すると、.tomlが拡張子として提案されます。 - ドラッグ&ドロップは登録済みのすべての拡張子を受け付けます。
- 名前を付けて保存フィルターとデフォルト拡張子は、アクティブなタブのフォーマットアダプターから導出されます。
- Cmd+Shift+H コンテンツ検索(「ファイル内を検索」)はすべてのテキスト系フォーマット(Markdown、txt、json、yaml、toml、html、svg、Mermaid)をインデックス化します。コードファイルはデフォルトで除外されます — コードビューアモードです。
HTML のセキュリティモデル
マルチフォーマット計画の ADR-4 に従い、HTML プレビューは 3 つの独立した防御レイヤーで構成されています:
<iframe sandbox="">空の許可リスト付き — スクリプトなし、同一オリジンなし、フォームなし、ポップアップなし。サンドボックスは iframe 属性のみで強制されます(MDN によると CSP の<meta>はサンドボックスではありません)。- DOMPurify サニタイゼーションが最初に実行 —
<script>、javascript:URL、インラインイベントハンドラ、base-href トリックを除去。 - CSP
<meta>インジェクション —default-src 'none'; img-src data:; style-src 'unsafe-inline'; font-src data:; base-uri 'none';— iframe 内のリソース読み込みを制限。
バリデーターはスクリプトタグ、javascript: URL、インラインイベントハンドラを警告として表示し、何がブロックされているか確認できます。
外部エディタで開く
コードファイルの場合、読み取り専用バナーの外部エディタで開くボタンは選択したエディタを起動します。解決順序:
- 設定 → フォーマット → 外部エディタ(GUI フィールド — 設定を参照)。macOS では
.appバンドル、Linux/Windows では実行ファイル、またはシェルで解決できるものを選択。 $VMARK_EXTERNAL_EDITOR(プロジェクトレベルの環境変数オーバーライド)$VISUAL$EDITOR- プラットフォームデフォルト(macOS では
open -t、Windows ではnotepad.exe、Linux ではxdg-open)
GUI 設定は環境変数より優先されます — 明示的なものが暗黙的なものに勝ちます。フィールドを空にすると、環境変数のフォールバックチェーンを使用します。
VMark はログインシェルの PATH を経由してルーティングするため、macOS GUI アプリから起動しても VS Code / Cursor / JetBrains ラッパーが正しく解決されます。
セキュリティゲート
open_in_external_editor Tauri コマンドは以下を拒否します:
- 存在しないパス
- ディレクトリおよびその他の非通常ファイル(ソケット、デバイス)
- 正規化された拡張子が VMark の登録済みフォーマットセットにないパス
- 正規のターゲットがいずれかのチェックに失敗するシンボリックリンク
侵害されたウェブビューは、このボタンを使用して任意のシステムファイル(パスワード、キーなど)で外部エディタを起動することはできません — VMark 自身が開くパスのみが対象です。
サポートされていないもの
計画の非目標に従い:
- コードエディタではありません。 LSP、オートコンプリート、リファクタリング、デバッガ、git ガターはありません。
- 「すべてのプレーンテキスト形式」ではありません。 上記の表を参照した制限されたスコープです。
- HTML スクリプトの実行はありません。 サンドボックスレンダリングのみです。
- v1 では Markdown 以外のフォーマットの印刷/エクスポート/HTML としてコピーはありません。
- コードビューアとしてまだサポートされていないもの: Zig、Swift、Kotlin、Java、Elixir、OCaml、および 12 拡張子セット外のその他の言語。判断ルールは「私たち自身が使用する言語」です — 追加を希望する場合は issue を提出してください。
一覧にないフォーマットで意図的に対象外でないものがあれば、issue を提出してください。