Skip to content

thesignumt/mkcmt.nvim

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

51 Commits
 
 
 
 
 
 

Repository files navigation

mkcmt.nvim

📝 A simple Neovim plugin to create decorative comment blocks around headers.

mkcmt.nvim lets you quickly generate centered, bordered comment blocks with customizable headers. It integrates with vim.ui.input for prompts, respects your buffer's commentstring, and can be configured to match your coding style.

Note

i haven't fully finished the oneline feature so expect some bugs reason: i don't have the motivation and courage to finish it 😢


🎥 Demo

2025-09-19.21-34-13.mp4

✨ Features

  • Create neat, bordered comment blocks.
  • Center headers with configurable padding.
  • Supports uppercasing headers.
  • Respects buffer commentstring (#, //, --, etc.).
  • Optional :MkCmt user command.
  • Works with visual selections (replaces last selection with comment block).
  • Oneline mode: render a single-line divider instead of a block.
  • Custom fill character: override the oneline divider character with oneline_char.
  • Recommended for enhanced vim.ui.input visuals: requires snacks.nvim with its input feature enabled. Otherwise it will fallback to vim.fn.input

Dependencies:

-- Lazy.nvim example
{
  "thesignumt/mkcmt.nvim",
  dependencies = { "folke/snacks.nvim" },
  opts = {},
  config = function(_, opts)
    require("mkcmt").setup(opts)
  end,
}

Make sure snacks.nvim is installed and its input feature is enabled for a better prompt experience.


📦 Installation

Use your favorite plugin manager:

{
  "thesignumt/mkcmt.nvim",
  dependencies = { "folke/snacks.nvim" },
  opts = {},
  config = function(_, opts)
    require("mkcmt").setup(opts)
  end,
}
use {
  "thesignumt/mkcmt.nvim",
  requires = { "folke/snacks.nvim" },
  config = function()
    require("mkcmt").setup {}
  end,
}

vim.pack

vim.pack.add({
  'https://github.com/thesignumt/mkcmt.nvim'
})
vim.pack.add({
  'https://github.com/folke/snacks.nvim'
})
local add = MiniDeps.add
add({
  source = "https://github.com/thesignumt/mkcmt.nvim",
  dependencies = { "folke/snacks.nvim" },
})

⚙️ Configuration

Default setup:

require("mkcmt").setup({
  default_header = "HELLO WORLD",  -- fallback header when prompt is empty
  cmd = true,                      -- create :MkCmt user command
  min_width = 60,                  -- minimum block width
  padding = 10,                    -- spacing around header
  border = "+-+[]+-+",             -- border characters
  oneline = false,                 -- render a single-line divider
  oneline_char = nil,              -- optional custom divider character
})

🔑 Keymaps Example

local mkcmt = require("mkcmt")

-- simple mappings
vim.keymap.set({ "n", "v" }, "<leader>cc", function()
  mkcmt.comment({ put_after = true, uppercase = false })
end, { desc = "MkCmt after cursor" })

vim.keymap.set({ "n", "v" }, "<leader>cC", function()
  mkcmt.comment({ put_after = false, uppercase = false })
end, { desc = "MkCmt before cursor" })

vim.keymap.set({ "n", "v" }, "<leader>cx", function()
  mkcmt.comment({ put_after = true, uppercase = true })
end, { desc = "MkCmt after cursor (uppercase)" })

vim.keymap.set({ "n", "v" }, "<leader>cX", function()
  mkcmt.comment({ put_after = false, uppercase = true })
end, { desc = "MkCmt before cursor (uppercase)" })

🖊️ Usage

  • :MkCmt → prompts for a header, inserts a comment block.
  • require("mkcmt").comment(opts) accepts:
Option Type Description
put_after boolean Insert after cursor (true) or before (false).
uppercase boolean Uppercase the header text.
header string Provide a header directly, skipping the prompt.
border string Override border style, e.g., "+-+[]+-+".
oneline boolean Render a single-line divider instead of a block.
oneline_char string Override the character used in oneline mode.

Example:

:lua require("mkcmt").comment({ header = "Section", put_after = true })

Oneline example:

:lua require("mkcmt").comment({ oneline = true, put_after = true, oneline_char = "-" })

📜 License

MIT

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages