local M = {} function M.load() -- TODO: Make it work with buffer which don't have a filename yet vim.api.nvim_create_user_command('AddIncludeGuard', function(data) local bufnr = vim.api.nvim_get_current_buf() local name_pattern = data.fargs[1] or '%s_' local function formatName(filename) local parts = vim.split(filename, '[/\\]', { trimempty = true }) local last_part = parts[#parts] local ext = last_part:match '%.([^%.]+)$' local name = last_part:gsub('%.[^%.]+$', '') if ext == 'h' or ext == 'hpp' then name = name .. '_H' end return name_pattern:format(name:upper()) end local buf_filename = vim.api.nvim_buf_get_name(bufnr) local guard_name = formatName(buf_filename) vim.api.nvim_buf_set_lines(bufnr, 0, 0, false, { '#ifndef ' .. guard_name, '#define ' .. guard_name, '', }) vim.api.nvim_buf_set_lines(bufnr, -1, -1, false, { '', '#endif //' .. guard_name, }) end, { nargs = '?' }) end return M