Markdownで書いている時に、##で作成した見出し2に番号をふるのが面倒なので、関数を作って処理します。

手動で番号を付けていると、間に文章を差し込んだ時に番号がずれるのがストレス。だから、番号を付ける処理と消す処理をセットで作成して、keymapsにも登録。

これで、番号を付けたい時も付けたくない時も、らくらく処理できる。

lua/core/functions.lua

local M = {}

-- 1. 番号を振る関数
M.renumber_h2 = function()
  local bufnr = vim.api.nvim_get_current_buf()
  local lines = vim.api.nvim_buf_get_lines(bufnr, 0, -1, false)
  local count = 0
  
  for i, line in ipairs(lines) do
    if line:match("^##%s") then
      count = count + 1
      -- 既存の番号を削除してテキストを取得
      local clean_text = line:gsub("^##%s+%d+%.%s*", "## "):gsub("^##%s+", "")
      lines[i] = string.format("## %d. %s", count, clean_text)
    end
  end
  
  vim.api.nvim_buf_set_lines(bufnr, 0, -1, false, lines)
  print("Renumbered " .. count .. " headings.")
end

-- 2. 番号を消す関数
M.clear_h2 = function()
  local bufnr = vim.api.nvim_get_current_buf()
  local lines = vim.api.nvim_buf_get_lines(bufnr, 0, -1, false)
  
  for i, line in ipairs(lines) do
    if line:match("^##%s") then
      -- "## 1. テキスト" → "テキスト" を取得
      local text = line:match("^##%s+%d+%.%s*(.*)$")
      if text then
        lines[i] = "## " .. text
      else
        -- 番号がない場合はそのまま(既にクリアされている)
        lines[i] = line
      end
    end
  end
  
  vim.api.nvim_buf_set_lines(bufnr, 0, -1, false, lines)
  print("Cleared headings.")
end

return M

lua/core/keymaps.lua

local funcs = require("core.functions")

vim.keymap.set('n', '<leader>hn', funcs.renumber_h2, { desc = "Markdown見出し番号付与" })
vim.keymap.set('n', '<leader>hc', funcs.clear_h2, { desc = "Markdown見出し番号削除" })