add all md updates to nvim

This commit is contained in:
Walter Jenkins 2026-02-19 14:40:20 -06:00
parent 59c54d3afd
commit 710d723d46
2 changed files with 192 additions and 0 deletions

View File

@ -60,6 +60,56 @@ vim.opt.foldlevel = 99 -- Keep folds open by default
-- Markdown: enable concealment for render-markdown.nvim rendering
vim.api.nvim_create_autocmd("FileType", {
pattern = "markdown",
callback = function()
vim.opt_local.conceallevel = 2
vim.opt_local.wrap = true
vim.opt_local.linebreak = true
vim.opt_local.spell = true
vim.opt_local.spelllang = "en_us"
-- ]e/[e and ]w/[w navigate spell errors (mirrors diagnostic nav in code files)
vim.keymap.set("n", "]e", "]s", { buffer = true, remap = true, desc = "Next spell error" })
vim.keymap.set("n", "[e", "[s", { buffer = true, remap = true, desc = "Prev spell error" })
vim.keymap.set("n", "]w", "]s", { buffer = true, remap = true, desc = "Next spell error" })
vim.keymap.set("n", "[w", "[s", { buffer = true, remap = true, desc = "Prev spell error" })
-- K: spell suggestions picker when on a misspelled word, fallback to LSP hover
vim.keymap.set("n", "K", function()
local bad = vim.fn.spellbadword()
if bad[1] ~= "" then
local word = bad[1]
local suggestions = vim.fn.spellsuggest(word, 10)
local items = {}
for _, s in ipairs(suggestions) do
table.insert(items, s)
end
table.insert(items, "── dictionary ──")
table.insert(items, "Add to dictionary: " .. word)
table.insert(items, "Mark as bad: " .. word)
vim.ui.select(items, {
prompt = "Spell: '" .. word .. "'",
}, function(choice)
if not choice or choice == "── dictionary ──" then return end
if choice == "Add to dictionary: " .. word then
vim.cmd("normal! zg")
elseif choice == "Mark as bad: " .. word then
vim.cmd("normal! zw")
else
vim.cmd("normal! ciw" .. choice)
end
end)
return
end
-- fallback: LSP hover (e.g. if marksman is installed later)
pcall(vim.lsp.buf.hover)
end, { buffer = true, desc = "Spell suggestions / hover" })
end,
})
vim.api.nvim_create_autocmd("FileType", {
pattern = "templ",
callback = function()

142
lua/plugins/markdown.lua Normal file
View File

@ -0,0 +1,142 @@
-- lua/plugins/markdown.lua
return {
-- In-buffer markdown rendering: styled headers, bullet symbols, visual checkboxes
{
"MeanderingProgrammer/render-markdown.nvim",
dependencies = { "nvim-treesitter/nvim-treesitter", "nvim-tree/nvim-web-devicons" },
ft = { "markdown" },
opts = {
render_modes = { "n", "c" }, -- render in normal and command mode only (not insert)
heading = {
enabled = true,
sign = false, -- no sign column icons
icons = { "󰲡 ", "󰲣 ", "󰲥 ", "󰲧 ", "󰲩 ", "󰲫 " },
},
bullet = {
enabled = true,
icons = { "", "", "", "" },
},
checkbox = {
enabled = true,
unchecked = { icon = "󰄱 " },
checked = { icon = "󰱒 " },
},
code = {
enabled = true,
sign = false,
style = "full",
},
pipe_table = { enabled = true },
},
},
-- Auto-continue lists: press Enter at end of a list item to get the next bullet/number
{
"gaoDean/autolist.nvim",
ft = { "markdown" },
config = function()
require("autolist").setup()
-- Scope all keymaps to markdown buffers only
vim.api.nvim_create_autocmd("FileType", {
pattern = "markdown",
callback = function()
local map = function(mode, lhs, rhs, desc)
vim.keymap.set(mode, lhs, rhs, { buffer = true, desc = desc })
end
-- Continue list on Enter / new line
map("i", "<CR>", "<CR><cmd>AutolistNewBullet<cr>", "Continue list")
map("n", "o", "o<cmd>AutolistNewBullet<cr>", "New list item below")
map("n", "O", "O<cmd>AutolistNewBulletBefore<cr>", "New list item above")
-- Toggle checkbox
map("n", "<CR>", "<cmd>AutolistToggleCheckbox<cr>", "Toggle checkbox")
-- Recalculate numbered list after reordering/deleting
map("n", "<leader>mr", "<cmd>AutolistRecalculate<cr>", "Recalculate list numbers")
-- Indent/dedent list item in insert mode
map("i", "<Tab>", "<cmd>AutolistTab<cr>", "Indent list item")
map("i", "<S-Tab>", "<cmd>AutolistShiftTab<cr>", "Dedent list item")
end,
})
end,
},
-- Full Obsidian-like note-taking
{
"epwalsh/obsidian.nvim",
version = "*",
ft = "markdown",
dependencies = { "nvim-lua/plenary.nvim" },
opts = {
-- Default vault; new notes always land in the current working directory
workspaces = {
{
name = "default",
path = "~/notes",
},
},
new_notes_location = "current_dir",
-- Note naming: use the title as filename
note_id_func = function(title)
local suffix = ""
if title ~= nil then
suffix = title:gsub(" ", "-"):gsub("[^A-Za-z0-9-]", ""):lower()
else
for _ = 1, 4 do
suffix = suffix .. string.char(math.random(65, 90))
end
end
return suffix
end,
-- wiki-link style [[...]]
preferred_link_style = "wiki",
-- Let render-markdown.nvim handle rendering
ui = { enable = false },
-- Open URLs with macOS `open`
follow_url_func = function(url)
vim.fn.jobstart({ "open", url })
end,
-- nvim-cmp completion for wiki links
completion = {
nvim_cmp = true,
min_chars = 2,
},
mappings = {
-- Follow link or create note under cursor
["gf"] = {
action = function() return require("obsidian").util.gf_passthrough() end,
opts = { noremap = false, expr = true, buffer = true, desc = "Follow link" },
},
-- Toggle checkbox
["<CR>"] = {
action = function() return require("obsidian").util.toggle_checkbox() end,
opts = { buffer = true, desc = "Toggle checkbox" },
},
},
},
config = function(_, opts)
require("obsidian").setup(opts)
-- <leader>m prefix for markdown/notes commands
vim.keymap.set("n", "<leader>mn", "<cmd>ObsidianNew<cr>", { desc = "New note" })
vim.keymap.set("n", "<leader>mf", "<cmd>ObsidianSearch<cr>", { desc = "Find/search notes" })
vim.keymap.set("n", "<leader>mo", "<cmd>ObsidianOpen<cr>", { desc = "Open in Obsidian app" })
vim.keymap.set("n", "<leader>mb", "<cmd>ObsidianBacklinks<cr>", { desc = "Backlinks" })
vim.keymap.set("n", "<leader>ml", "<cmd>ObsidianLinks<cr>", { desc = "Links in note" })
vim.keymap.set("n", "<leader>md", "<cmd>ObsidianToday<cr>", { desc = "Daily note" })
vim.keymap.set("n", "<leader>mt", "<cmd>ObsidianTags<cr>", { desc = "Search by tag" })
vim.keymap.set("n", "<leader>mp", "<cmd>ObsidianPasteImg<cr>", { desc = "Paste image" })
vim.keymap.set("n", "<leader>mk", "<cmd>ObsidianLinkNew<cr>", { desc = "Create link from selection" })
end,
},
}