diff options
Diffstat (limited to '.config/nvim/after/ftplugin/markdown.lua')
| -rw-r--r-- | .config/nvim/after/ftplugin/markdown.lua | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/.config/nvim/after/ftplugin/markdown.lua b/.config/nvim/after/ftplugin/markdown.lua new file mode 100644 index 0000000..755b9aa --- /dev/null +++ b/.config/nvim/after/ftplugin/markdown.lua @@ -0,0 +1,80 @@ +local function format(callback) + local view = vim.fn.winsaveview() + local buf_str = "" + for _, v in ipairs(vim.api.nvim_buf_get_lines(0, 0, -1, false)) do + buf_str = buf_str .. v .. "\n" + end + local tempname = vim.fn.tempname() + local tempfile = assert(io.open(tempname, "w"), "Could not open temporary file") + tempfile:write(buf_str) + tempfile:close() + + local r_check = vim.system({ + "mdformat", + "--number", + "--extensions", + "tables", + "--extensions", + "frontmatter", + "--wrap", + tostring(vim.bo.textwidth), + "--check", + tempname, + }):wait() + if r_check.code == 0 then + return + elseif r_check.code ~= 1 then + vim.notify("mdformat failed (" .. r_check.code .. "):\n" .. r_check.stderr) + end + local r_format = vim.system({ + "mdformat", + "--number", + "--extensions", + "tables", + "--extensions", + "frontmatter", + "--wrap", + tostring(vim.bo.textwidth), + tempname, + }):wait() + if r_format.code ~= 0 then + vim.notify("mdformat failed (" .. r_format.code .. "):\n" .. r_format.stderr) + end + local formatted_lines = {} + for line in io.lines(tempname) do + formatted_lines[#formatted_lines + 1] = line + end + vim.api.nvim_buf_set_lines(0, 0, -1, false, formatted_lines) + + vim.fn.winrestview(view) + if callback then + callback() + end +end + +vim.opt_local.tabstop = 2 -- CommonMark expects two spaces for indentation +vim.opt_local.shiftwidth = 0 +vim.opt_local.softtabstop = -1 +vim.opt_local.expandtab = true -- Change tabs to spaces +-- Nothing in the gutter, except sign columns if necessary +vim.opt_local.number = false +vim.opt_local.relativenumber = false +vim.opt_local.signcolumn = "auto" +vim.opt_local.foldcolumn = "0" +-- +vim.opt_local.textwidth = 120 -- gw wraps at this value +vim.opt_local.colorcolumn = "+1" -- Highlight one column after 'textwidth' +vim.opt_local.foldlevel = 1 +-- Replace concealed text with a character from `'listchars'` +-- With `'foldmethod'` set to `expr` and `'foldlevel'` set to 2 fenced code blocks are concealed and completely invisible +-- I guess that's a TODO for later, find a way to use `'conceallevel'` = 2 but with folded fenced code blocks visible +vim.opt_local.conceallevel = 1 +vim.opt_local.complete = { + "o", -- 'omnifunc' + ".", -- current buffer +} +-- Visible link labels +vim.api.nvim_set_hl(0, "@markup.link.label.markdown_inline", { underline = true, update = true }) + +vim.b.autoformat = true +vim.b.format_func = format |
