Link Check
VMark は Markdown 内のローカルリンクと画像のターゲットがディスク上に実際に存在するかを検証します。Alt + Mod + V または 表示 → Markdown をチェック を実行すると、Markdown Lint エンジン と並行して動作します。
チェックされるもの
ドキュメント内のすべてのローカルリンクと画像について:
[text](./other.md)—./other.mdファイルが解決可能で存在するか— 画像ファイルが存在するか[text](./other.md#section)— ファイルが存在するか(アンカーチェックはlinkFragmentsルールが処理)
ターゲットが見つからない場合、Lint バッジと F2 / Shift + F2 ナビゲーションにエントリが追加されます。表示のされ方はモードによって異なります。ソースモードでは、リンクに CodeMirror の赤い診断用の下線が引かれます。WYSIWYG モードでは、リンクを含むブロック全体の左端に赤いバーが付き、薄く色付けされます — WYSIWYG モードの Lint マークはブロック単位で、インラインの下線にはなりません。
スキップされるもの
- フラグメントのみのリンク(
#anchor)—linkFragmentsルールが処理し、現在のドキュメントの見出しとマッチさせます - 外部 URL — あらゆる URI スキーム(
http:、https:、mailto:、obsidian:、vscode:など)と、プロトコル相対の//host/…URL。Windows のドライブ文字付きパス(C:\…、C:/…)は引き続きファイルパスとしてチェックされます - 無題のドキュメント — 保存されたファイルパスがない場合、相対 URL はどのディレクトリに対しても解決できません
- ネットワークパスとドライブ相対パス — UNC パス(
\\server\share\…)は決して参照されません。Windows でそれをチェックすると、ネットワーク越しにそのホストへ接続することになる(さらに Windows のサインイン資格情報を渡してしまう可能性がある)ためです。ドライブ相対のC:file.md(ドライブ文字の後にスラッシュがないもの)もスキップされます。これはドキュメントではなく、アプリの作業ディレクトリを基準とするためです
解決の仕組み
Link Check は相対パスをソースファイルのディレクトリを基準に解決し、絶対パスはそのパスが指すファイルとして扱います:
/repo/docs/intro.md 内のリンク | 解決先 |
|---|---|
[a](./other.md) | /repo/docs/other.md |
[a](../shared.md) | /repo/shared.md |
[a](images/logo.png) | /repo/docs/images/logo.png |
[a](/docs/intro.md) | /docs/intro.md(絶対パスはそのファイルを指します。Windows ではドキュメント自身のドライブ上のパスになります) |
ファイル検索の前にフラグメントは取り除かれます — [a](./other.md#section) は ./other.md のみをチェックします。
パフォーマンス
- 非同期 — 同期ルールと並列に実行され、結果は準備でき次第マージされます
- 重複排除 — 同じパスが何度リンクされていても、1 回のみチェックされます
- キーストロークではトリガーされない —
fs.existsをキーごとに呼ぶと過負荷になるため、明示的な Lint トリガー時のみ実行 - 運用エラーへの寛容性 —
fs.existsが例外(権限拒否、capability スコープ問題など)をスローした場合、結果はerror(スキップ)であり、missingではありません。誤判定よりサイレントに
診断コード
| コード | 重要度 | トリガー |
|---|---|---|
| M001 | エラー | 画像ファイルが解決済みのローカルパスに見つからない |
| M002 | エラー | リンク先のファイルが解決済みのローカルパスに見つからない |
関連項目
- Markdown Lint — 全ルールリファレンス
- 設定 → Markdown → Lint