The Neovim plugin for Myriad-Dreamin/tinymist.
trimmed.mp4
- Low latency preview: preview your document instantly on type. The incremental rendering technique makes the preview latency as low as possible.
- Cross jump between code and preview. You can click on the preview to jump to the corresponding code location and have the preview follow your cursor in Neovim.
- curl
Lazy.nvim:
{
'chomosuke/typst-preview.nvim',
lazy = false, -- or ft = 'typst'
version = '1.*',
config = function()
require 'typst-preview'.setup {}
end,
}
Packer.nvim:
use {
'chomosuke/typst-preview.nvim',
tag = 'v1.*',
config = function()
require 'typst-preview'.setup {}
end,
}
vim-plug:
Plug 'chomosuke/typst-preview.nvim', {'tag': 'v1.*'}
Note: You can pin typst's minor version by pinning the minor version of this
plugin, i.e., v1.1.*
instead of v1.*
.
:TypstPreviewUpdate
orrequire 'typst-preview'.update()
:- Download the necessary binaries to
vim.fn.fnamemodify(vim.fn.stdpath 'data' .. '/typst-preview/', ':p')
. - This must be run before any other commands can be run.
- If you followed the installation instructions, your package manager should automatically run this for you.
- Download the necessary binaries to
:TypstPreview
:- Start the preview. Optionally, the desired preview mode can be specified:
:TypstPreview document
(default) or:TypstPreview slide
for slide mode.
- Start the preview. Optionally, the desired preview mode can be specified:
:TypstPreviewStop
:- Stop the preview.
:TypstPreviewToggle
:- Toggle the preview.
:TypstPreviewFollowCursor
orrequire 'typst-preview'.set_follow_cursor(true)
:- Scroll preview as cursor moves.
- This is on by default.
:TypstPreviewNoFollowCursor
orrequire 'typst-preview'.set_follow_cursor(false)
:- Don't scroll preview as cursor moves.
:TypstPreviewFollowCursorToggle
orrequire 'typst-preview'.set_follow_cursor(not init.get_follow_cursor())
.:TypstPreviewSyncCursor
orrequire 'typst-preview'.sync_with_cursor()
:- Scroll preview to the current cursor position. This can be used in combination with
:TypstPreviewNoFollowCursor
so that the preview only scroll to the current cursor position when you want it to.
- Scroll preview to the current cursor position. This can be used in combination with
This plugin should work out of the box with no configuration. However, calling
setup()
is required to ensure that the binaries that the plugin depends on are
downloaded and up to date.
require 'typst-preview'.setup {
-- Setting this true will enable printing debug information with print()
debug = false,
-- Custom format string to open the output link provided with %s
-- Example: open_cmd = 'firefox %s -P typst-preview --class typst-preview'
open_cmd = nil,
-- Setting this to 'always' will invert black and white in the preview
-- Setting this to 'auto' will invert depending if the browser has enable
-- dark mode
-- Setting this to '{"rest": "<option>","image": "<option>"}' will apply
-- your choice of color inversion to images and everything else
-- separately.
invert_colors = 'never',
-- Whether the preview will follow the cursor in the source file
follow_cursor = true,
-- Provide the path to binaries for dependencies.
-- Setting this will skip the download of the binary by the plugin.
-- Warning: Be aware that your version might be older than the one
-- required.
dependencies_bin = {
['tinymist'] = nil,
['websocat'] = nil
},
-- A list of extra arguments (or nil) to be passed to previewer.
-- For example, extra_args = { "--input=ver=draft", "--ignore-system-fonts" }
extra_args = nil,
-- This function will be called to determine the root of the typst project
get_root = function(path_of_main_file)
local root = os.getenv 'TYPST_ROOT'
if root then
return root
end
return vim.fn.fnamemodify(path_of_main_file, ':p:h')
end,
-- This function will be called to determine the main file of the typst
-- project.
get_main_file = function(path_of_buffer)
return path_of_buffer
end,
}
Set dependencies_bin
option to
dependencies_bin = { ['tinymist'] = 'tinymist' }
should point towards the
Mason installation of tinymist.
The author of Enter-tainer/typst-preview wrote a good comparison here.
- niuiic/typst-preview.nvim: Since niuiic/typst-preview.nvim uses
typst-lsp, it has similar advantages and
disadvantages of typst-lsp mentioned
here:
- Higher latency due to the PDF reader having a delay.
- Does not support cross jump between code and preview.
All PRs are welcome.
This plugin wouldn't be possible without the work of Enter-tainer/typst-preview and Myriad-Dreamin/tinymist. If you like this plugin enough to star it, please consider starring Enter-tainer/typst-preview and Myriad-Dreamin/tinymist as well.