Skip to content
| Marketplace
Sign in
Visual Studio Code>Programming Languages>Nifty Markdown: TOC, Lists, Shortcuts & PasteNew to Visual Studio Code? Get it now.
Nifty Markdown: TOC, Lists, Shortcuts & Paste

Nifty Markdown: TOC, Lists, Shortcuts & Paste

Nifty

| (0) | Free
Markdown editing that keeps up: table of contents, section numbers, smart lists and task toggles, formatting keys, image paste, link checks and completions, and math in the preview.
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

Nifty Markdown

Markdown editing that keeps up: table of contents, section numbers, smart lists and task toggles, formatting keys, image paste, link checks and completions, and math in the preview.

Maintained. No sign-in. No telemetry. Works in VS Code, Cursor, Windsurf, VSCodium and other editors that use Open VSX, and in the browser on vscode.dev and github.dev.

Features

A table of contents inserted under the Contents heading of a README

A release checklist typed with Enter, Tab and Shift+Tab: numbered items renumbered, a nested list, and a task list with one item ticked

A missing file and a mistyped heading anchor listed in the Problems panel

A chart pasted from the clipboard, saved in the images folder and linked from the README

Formulas from math blocks rendered with KaTeX in VS Code's Markdown preview

  • Table of contents. Create or Update Table of Contents puts a TOC at the cursor between <!-- toc --> and <!-- /toc -->, and it updates itself when you save. Pick the heading levels (2..6 by default), bullets or numbers, and override them per document in the marker: <!-- toc levels=2..3 ordered -->. Leave a heading out with <!-- omit from toc -->. The TOC's own title ("## Contents") is skipped. TOCs made by other tools (<!-- TOC -->, <!-- tocstop -->, or an unmarked list of heading links) are recognised and updated in place.
  • Anchors for your Git host. Heading links follow GitHub's rules by default, or GitLab, Azure DevOps or Bitbucket (nifty.markdown.slugStyle), including numbering of repeated headings (#usage, #usage-1). The TOC, completions and link checks all use the same rules.
  • Section numbers. Add 1., 1.1., 1.2. … to headings and take them off again; a lone # title isn't numbered. The TOC follows.
  • Lists that type themselves. Enter continues bullets, numbers, task lists (with a fresh [ ]) and blockquotes, and splits an item at the cursor. Enter on an empty item ends the list (or moves a nested item out one level). Tab / Shift+Tab indent and outdent an item together with everything nested under it, lined up under the text of the item above. Backspace right after a marker removes the checkbox, then the indent, then the marker.
  • Ordered lists stay numbered. Numbers are fixed after list edits and after pasting, deleting or moving lines inside a list. A list keeps its start number, nested lists count on their own, and 1. 1. 1. lists stay that way. Undo takes a renumbering back.
  • No typing lag. The list keys only reach the extension on list and quote lines (the editor tracks that with a context key), and each key looks at the lines around the cursor, not the whole file.
  • Formatting toggles for bold, italic, strikethrough, inline code, links and blockquotes. With nothing selected they work on the word at the cursor, and pressing again removes the markers. Toggle Link uses a URL from the clipboard when there is one, and unlinks when the cursor is in a link. Alt+C ticks and unticks task checkboxes on every selected line, and turns plain lines into tasks.
  • Paste Image (Shift+Alt+V) saves the clipboard image (a screenshot, or a copied image file) into images/ next to the Markdown file, named after the file and the time, and inserts ![…](https://github.com/get-nifty/feedback/raw/HEAD/images/…). Folder, name pattern and alt text are settings. On vscode.dev, github.dev and in remote windows a small paste panel opens instead: press Ctrl+V there or drop an image file on it.
  • Link checks. Relative links and images to files that don't exist, #anchors that match no heading (in this file or in the linked Markdown file), and [text][label] references without a definition show up in the Problems panel as you type. Check Links in Workspace checks every Markdown file. Skip targets with globs (nifty.markdown.validate.ignore).
  • Path and #heading completions in links and images, including the headings of other Markdown files (guide.md#), using your slug style.
  • Math in the preview. ```math blocks and $`…`$ (GitHub's syntax) render with KaTeX in VS Code's own Markdown preview, and so do $…$ / $$…$$ in editors without built-in math. \(…\) / \[…\] and KaTeX macros are settings.

Keyboard shortcuts

The shortcuts only apply in Markdown files with the cursor in the editor, and none of them replaces a VS Code default there. Ctrl+B (side bar) and Ctrl+I keep doing what they did.

Windows / Linux macOS Action
Enter Enter Continue the list or quote (on list and quote lines only)
Tab / Shift+Tab Tab / Shift+Tab Indent / outdent the list item (on list lines, when no suggestion or snippet is active)
Backspace Backspace Remove the marker before the cursor (only right after a list marker)
Alt+B Ctrl+Alt+B Toggle bold
Alt+I Ctrl+Alt+I Toggle italic
Alt+X Ctrl+Alt+X Toggle strikethrough
Alt+M Ctrl+Alt+M Toggle inline code
Alt+K Ctrl+Alt+K Toggle link
Shift+Alt+Q Ctrl+Alt+Q Toggle blockquote
Alt+C Ctrl+Alt+C Toggle task checkbox (while the Find widget is open, Alt+C still switches its case-sensitive option)
Shift+Alt+V Ctrl+Alt+V Paste image

Turn the list keys off with nifty.markdown.lists.keys, or change any shortcut in Preferences: Open Keyboard Shortcuts. The list keys stay out of Vim's normal mode.

Works with the rest of the family

Nifty Markdown leaves some Markdown jobs to other Nifty extensions instead of doing them twice:

  • Tables: Nifty Text formats Markdown tables (padding, alignment, CJK width). Format Table here runs it when it's installed.
  • Wrapping: Nifty Rewrap wraps and unwraps Markdown paragraphs (Alt+Q).
  • Diagrams: Nifty Mermaid renders ```mermaid blocks in the preview.
  • PDF: Nifty Print prints Markdown rendered, or saves it as PDF. Print or Save as PDF here runs it when it's installed.

It also stays out of the way of what VS Code already does well: pasting a URL over selected text makes a link, and paths are completed and links checked by VS Code itself. Nifty Markdown's completions switch on where VS Code's are off or where your Git host's anchors differ from GitHub's, and its link checks step aside if you turn on markdown.validate.enabled. Folding of headings, lists and code also comes from VS Code.

Commands

Command What it does
Nifty Markdown: Create or Update Table of Contents Insert a TOC at the cursor, or update the existing one
Nifty Markdown: Update Table of Contents Update the existing TOC
Nifty Markdown: Add Section Numbers / Remove Section Numbers Number headings (1., 1.1., …) or take the numbers off
Nifty Markdown: Toggle Bold / Italic / Strikethrough / Inline Code / Link / Blockquote Add or remove the formatting
Nifty Markdown: Toggle Task Checkbox Tick or untick tasks, or turn lines into tasks
Nifty Markdown: Make Heading Bigger (Remove #) / Make Heading Smaller (Add #) Change the heading level of the line
Nifty Markdown: Renumber Ordered List Renumber the list at the cursor
Nifty Markdown: Paste Image Save the clipboard image and insert a link to it
Nifty Markdown: Check Links in This File / Check Links in Workspace Check links now
Nifty Markdown: Format Table (with Nifty Text) Format the table at the cursor with Nifty Text
Nifty Markdown: Print or Save as PDF (with Nifty Print) Print the file with Nifty Print (desktop)

Settings

Setting Default What it does
nifty.markdown.toc.levels 2..6 Heading levels in the TOC
nifty.markdown.toc.listStyle - -, *, + or 1. for TOC entries
nifty.markdown.toc.updateOnSave true Update the TOC when saving
nifty.markdown.slugStyle github Anchors like github, gitlab, azure or bitbucket
nifty.markdown.sectionNumbers.levels (TOC levels) Heading levels to number
nifty.markdown.lists.keys true Enter, Tab, Shift+Tab and Backspace in lists
nifty.markdown.lists.renumber true Renumber ordered lists after list edits
nifty.markdown.lists.renumberOnEdit true Also renumber after pasting, deleting or moving lines in a list
nifty.markdown.boldMarker / italicMarker ** / * Markers the toggles use (__ / _ also possible)
nifty.markdown.image.folder images Folder for pasted images; relative to the file, or ${workspaceFolder}/…
nifty.markdown.image.fileName ${documentBasename}-${date}-${time} Name pattern for pasted images
nifty.markdown.image.askForName false Ask for a name on each paste
nifty.markdown.image.altText fileName Alt text from the file name, or empty
nifty.markdown.completion.enabled auto Path and #heading completions: auto, on, off
nifty.markdown.validate.enabled auto Link checks: auto (off only if VS Code's own are on), on, off
nifty.markdown.validate.ignore [] Globs of link targets not to check
nifty.markdown.validate.severity warning error, warning or information
nifty.markdown.math.enabled true ```math and $`…`$ in the preview
nifty.markdown.math.dollars auto $…$ / $$…$$: auto (when the editor has no built-in math), on, off
nifty.markdown.math.brackets false Also \(…\) and \[…\]
nifty.markdown.math.macros {} KaTeX macros

Coming from Markdown All in One

Most habits carry over. The differences: the formatting shortcuts are on Alt (Alt+B, Alt+I) so Ctrl+B keeps toggling the side bar; the TOC lives between <!-- toc --> markers (an existing unmarked TOC is still found and updated); <!-- omit from toc --> works the same; and $…$ math is left to VS Code's built-in support, with ```math blocks added.

Install

  • VS Code: search for "Nifty Markdown" in the Extensions view, or install from the Visual Studio Marketplace.
  • Cursor, Windsurf, VSCodium, Kiro, Antigravity: install from Open VSX.

Privacy

This extension collects no telemetry, needs no account and makes no network requests. Pasted images and math are handled on your machine.

More Nifty tools

  • Nifty Mermaid: Mermaid Diagram Preview & Export: Mermaid diagrams with no account: live preview beside .mmd files and Markdown, diagrams in the Markdown preview, syntax highlighting, and export to SVG or PNG. (Open VSX)
  • Nifty Rewrap: Hard-Wrap Comments & Markdown: Alt+Q rewraps the comment, docstring or Markdown paragraph at the cursor to your ruler, keeping comment markers, JSDoc tags and list indents. Optional auto-wrap while typing. (Open VSX)
  • Nifty SQL: SQL Formatter for 20 Dialects: Format SQL in 20 dialects, including dbt and Jinja templates, with your team's settings. (Open VSX)
  • Nifty XML: XPath, Formatter & XML to JSON: Evaluate XPath with namespaces, copy the XPath of any element, format, minify, check well-formedness and convert XML to JSON. (Open VSX)
  • Nifty YAML: Formatter, Validator & Converter: Format YAML without losing comments (Kubernetes-style indents), sort keys, lint with yamllint, copy the key path, and convert to and from JSON. (Open VSX)
  • Nifty Beautify: Format HTML in PHP, Blade & Twig: Format HTML inside PHP, Blade, Twig, Jinja, Handlebars, ERB and Liquid templates without breaking the template tags. (Open VSX)

See all 100+ Nifty extensions and web tools at https://getnifty.dev

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
  • Your Privacy Choices
  • Consumer Health Privacy
© 2026 Microsoft