*preview.txt* Async document compilation for Neovim Author: Barrett Ruth License: MIT ============================================================================== INTRODUCTION *preview.nvim* preview.nvim is an extensible framework for compiling documents asynchronously in Neovim. It provides a unified interface for any compilation workflow — LaTeX, Typst, Markdown, or anything else with a CLI compiler. The plugin ships with opt-in presets for common tools (Typst, LaTeX, Pandoc, AsciiDoc, PlantUML, Mermaid, Quarto) and supports fully custom providers. See |preview-presets|. ============================================================================== CONTENTS *preview-contents* 1. Introduction ............................................. |preview.nvim| 2. Requirements ..................................... |preview-requirements| 3. Install ............................................... |preview-install| 4. Configuration ........................................... |preview-config| 5. Presets ............................................... |preview-presets| - Math rendering ....................................... |preview-math| 6. Commands ............................................. |preview-commands| 7. Lua API ................................................... |preview-api| 8. Events ............................................... |preview-events| 9. Health ............................................... |preview-health| 10. FAQ ..................................................... |preview-faq| 11. SyncTeX ............................................. |preview-synctex| ============================================================================== REQUIREMENTS *preview-requirements* - Neovim >= 0.11.0 - A compiler binary for each configured provider (e.g. `typst`, `latexmk`) ============================================================================== INSTALL *preview-install* Install with lazy.nvim: >lua { 'barrettruth/preview.nvim' } < No `setup()` call is needed. The plugin loads automatically when |vim.g.preview| is set. See |preview-config|. ============================================================================== CONFIGURATION *preview-config* Configure by setting |vim.g.preview| to a table where keys are preset names or filetypes. For each key `k` with value `v` (excluding `debug`): - If `k` is a preset name and `v` is `true`, the preset is registered as-is under its filetype. - If `k` is a preset name and `v` is a table, it is deep-merged with the preset and registered under the preset's filetype. - If `k` is not a preset name and `v` is a table, it is registered directly as a custom provider keyed by filetype `k`. - If `v` is `false`, the entry is skipped (no-op). See |preview-presets| for available preset names. *preview.ProviderConfig* Provider fields: ~ {cmd} (string[]) Compiler command (required). {args} (string[]|function) Additional arguments. If a function, receives a |preview.Context| and returns a string[]. {extra_args} (string[]|function) Appended to {args} after evaluation. Useful for adding flags to a preset without replacing its defaults. {cwd} (string|function) Working directory. If a function, receives a |preview.Context|. Default: git root or file directory. {env} (table) Environment variables. {output} (string|function) Output file path. If a function, receives a |preview.Context|. {error_parser} (function) Receives (output, |preview.Context|) and returns vim.Diagnostic[]. {errors} (false|'diagnostic'|'quickfix') How parse errors are reported. `false` suppresses error handling. `'quickfix'` populates the quickfix list and opens it. Default: `'diagnostic'`. {clean} (string[]|function) Command to remove build artifacts. If a function, receives a |preview.Context|. {open} (boolean|string[]) Open the output file after the first successful compilation in toggle/watch mode. `true` uses |vim.ui.open()|. A string[] is run as a command with the output path appended. When a string[] is used the viewer process is tracked and sent SIGTERM when the buffer is deleted. `true` and single-instance apps (e.g. Chrome) do not support auto-close. {reload} (boolean|string[]|function) Reload the output after recompilation. `true` uses a built-in SSE server for HTML files. A string[] is run as a command. If a function, receives a |preview.Context| and returns a string[]. {detach} (boolean) When `true`, the viewer process opened via a string[] `open` command is not sent SIGTERM when the buffer is deleted. Has no effect when `open` is `true`. Default: `false`. *preview.Context* Context fields: ~ {bufnr} (integer) Buffer number. {file} (string) Absolute file path. {root} (string) Project root (git root or file directory). {ft} (string) Filetype. {output} (string?) Resolved output file path (set after `output` is evaluated, available to `args` functions). Global options: ~ {debug} (boolean|string) Enable debug logging. A string value is treated as a log file path. Default: `false`. Example enabling presets: >lua vim.g.preview = { typst = true, latex = true, github = true } < Example overriding a preset field: >lua vim.g.preview = { typst = { open = { 'sioyek', '--new-instance' } }, } < Example overriding the output path (e.g. latexmk `$out_dir`): >lua vim.g.preview = { latex = { output = function(ctx) return 'build/' .. vim.fn.fnamemodify(ctx.file, ':t:r') .. '.pdf' end, }, } < Example with a fully custom provider (key is not a preset name): >lua vim.g.preview = { rst = { cmd = { 'rst2html' }, args = function(ctx) return { ctx.file } end, output = function(ctx) return ctx.file:gsub('%.rst$', '.html') end, }, } < ============================================================================== PRESETS *preview-presets* Built-in provider configurations. Enable with `preset_name = true` or override individual fields by passing a table instead: >lua vim.g.preview = { typst = true, latex = true, github = true } < `typst` typst compile → PDF `latex` latexmk -pdf → PDF (with clean support) `pdflatex` pdflatex → PDF (single pass, no latexmk) `tectonic` tectonic → PDF (Rust-based LaTeX engine) `markdown` pandoc → HTML (standalone, KaTeX math) `github` pandoc → HTML (GitHub-styled, `-f gfm`, KaTeX math) `asciidoctor` asciidoctor → HTML (AsciiDoc with SSE reload) `plantuml` plantuml → SVG (UML diagrams, `.puml`) `mermaid` mmdc → SVG (Mermaid diagrams, `.mmd`) `quarto` quarto render → HTML (scientific publishing) Math rendering (pandoc presets): ~ *preview-math* The `markdown` and `github` presets use `--katex` by default, which inserts a `