Files
nixos/home/sam/nvim/lua/sam/plugins/markdown.lua

76 lines
2.8 KiB
Lua
Executable File

return {
-- Enhanced Markdown editing (only for .md)
{
"godlygeek/tabular",
ft = "markdown",
},
{
"plasticboy/vim-markdown",
ft = "markdown",
dependencies = { "godlygeek/tabular" },
config = function()
-- Core settings
vim.g.vim_markdown_folding_disabled = 0
vim.g.vim_markdown_conceal = 1
vim.g.vim_markdown_toc_autofit = 1
vim.g.vim_markdown_strikethrough = 1
-- Prose-friendly wrapping + Pandoc exports (MD only)
vim.api.nvim_create_autocmd("FileType", {
pattern = "markdown",
callback = function()
-- Wrapping
vim.opt_local.wrap = true
vim.opt_local.linebreak = true
vim.opt_local.list = false
-- HTML preview/export
vim.keymap.set("n", "<leader>mh", function()
local input = vim.fn.expand("%")
local output = "/tmp/" .. vim.fn.fnamemodify(input, ":t:r") .. ".html"
vim.fn.system("pandoc " .. vim.fn.shellescape(input) .. " -o " .. vim.fn.shellescape(output) .. " --standalone --self-contained")
vim.fn.system("open " .. vim.fn.shellescape(output))
end, { desc = "Markdown to HTML Preview", buffer = true })
-- PDF export
vim.keymap.set("n", "<leader>mp", function()
local input = vim.fn.expand("%")
local output = vim.fn.fnamemodify(input, ":r") .. ".pdf"
vim.fn.system("pandoc " .. vim.fn.shellescape(input) .. " -o " .. vim.fn.shellescape(output) .. " --pdf-engine=pdflatex")
end, { desc = "Markdown to PDF", buffer = true })
-- TOC preview
vim.keymap.set("n", "<leader>mt", ":!pandoc % --toc -o /tmp/toc.html && open /tmp/toc.html<CR>", { desc = "Generate TOC Preview", buffer = true })
end,
})
end,
},
-- Live browser preview (MD + HTML)
{
"brianhuster/live-preview.nvim",
dependencies = { "nvim-telescope/telescope.nvim" },
ft = { "markdown", "html" }, -- Load for both
lazy = false,
opts = {
usage_title = "Usage: <leader>lp to start preview",
picker_title = "Select file to preview",
templates = { -- Basic MD render (for .md); HTML serves raw
md = {
command = "pandoc % -o /tmp/preview.html --standalone --self-contained", -- Use Pandoc for MD
extension = "html"
},
html = {
command = "echo 'Serving raw HTML'", -- No-op; serves file directly
extension = "html"
}
},
debounce = 300, -- Refresh delay post-save
},
keys = {
{ "<leader>lp", "<cmd>LivePreview start<cr>", desc = "Start Live Preview", ft = { "markdown", "html" } },
{ "<leader>ls", "<cmd>LivePreview stop<cr>", desc = "Stop Live Preview", ft = { "markdown", "html" } },
},
},
}