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見出し番号削除" })