add all md updates to nvim
This commit is contained in:
parent
59c54d3afd
commit
710d723d46
|
|
@ -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", {
|
vim.api.nvim_create_autocmd("FileType", {
|
||||||
pattern = "templ",
|
pattern = "templ",
|
||||||
callback = function()
|
callback = function()
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
},
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue