Skip to content

Markdown Lint

VMark ships a built-in lint engine that catches correctness issues, not style preferences. Lint runs on demand (Cmd-Shift-L or Tools → Check Markdown) and surfaces results inline as gutter squiggles, with a status bar badge and F2 navigation between findings.

What lint is and isn't

VMark's lint is a correctness checker:

  • Broken cross-references
  • Undefined link / footnote references
  • Unclosed code fences
  • Tables with mismatched column counts
  • Heading levels that skip (h1 → h3)
  • Images without alt text
  • Empty link text or empty href

VMark's lint is not a style enforcer. It will not flag:

  • Line length
  • List marker style (- vs *)
  • Emphasis marker style (_ vs *)
  • Heading style (# vs underline)
  • Trailing whitespace

For style enforcement, use a separate tool like prettier --check outside VMark.

Rule Reference

Rule IDSeverityDescription
E01ErrorUndefined reference: [link][missing] points to a definition that doesn't exist
E02ErrorTable row has wrong column count (mismatch with header row)
E03ErrorReversed link — looks like (text)[url] instead of [text](url)
E04ErrorATX heading missing space after # (e.g., ##Heading should be ## Heading)
E05ErrorSpace inside emphasis markers — * word * won't render as italic
E06ErrorUnclosed fenced code block — file ends with an open ``` fence
E07ErrorDuplicate link reference definition (same [label]: appears twice)
E08ErrorEmpty link href[text]()
W01WarningHeading level skipped (h2 expected, found h3)
W02WarningImage missing alt text — accessibility
W03WarningUnused link reference definition (defined but never linked)
W04WarningAnchor fragment doesn't match any heading — #section for a section that doesn't exist
W05WarningEmpty link text — [](url)
M001ErrorImage file not found at the local path
M002ErrorLinked file not found at the local path
Y001ErrorYAML parse error (for YAML files)
Y002WarningYAML parse warning (for YAML files)

Triggering lint

TriggerAction
Cmd + Shift + L (macOS) / Ctrl + Shift + L (Win/Linux)Run lint on the active document
Tools → Check MarkdownSame as the shortcut
F2Jump to the next diagnostic
Shift + F2Jump to the previous diagnostic

For markdown files with file paths, link-existence checking runs automatically alongside the sync rules — see Link Check.

For YAML files, parse errors appear live in the gutter as you type, and the same Cmd-Shift-L shortcut populates the badge + F2 navigation.

Settings

The lint engine has a single user-facing toggle:

  • Settings → Markdown → Enable markdown lint — turn the engine on or off entirely

When disabled, the shortcut becomes a no-op and no diagnostics appear in the gutter.

See also