Skip to content

Markdown Lint ​

VMark ships a built-in lint engine that catches correctness issues, not style preferences. Lint runs on demand (Alt + Mod + V or View → Check Markdown) and surfaces results inline — a coloured bar down the side of each affected block in WYSIWYG mode, a wavy underline under the exact text in Source mode — 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 references (footnote references are not checked)
  • 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)
E05WarningSpace inside emphasis markers — * word * won't render as italic (arithmetic-shaped expressions such as 3 * 4 * 5 or x * y * z — short operands surrounding both stars — are treated as multiplication and not flagged)
E06ErrorEmpty link text — [](url)
E07ErrorDuplicate link reference definition (same [label]: appears twice)
E08ErrorUnclosed fenced code block — file ends with an open ``` fence
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 href — [text]()
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 ​

Mod = Cmd on macOS, Ctrl on Windows/Linux; Alt = Option on macOS.

TriggerAction
Alt + Mod + VRun lint on the active document
View → 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 Alt + Mod + V 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 editor.

See also ​