vim.api.nvim_create_user_command("CopyPath", function(context) local full_path = vim.fn.glob("%:p") local file_path = nil if context["args"] == "nameonly" then file_path = vim.fn.fnamemodify(full_path, ":t") end if context["args"] == "relative" then local project_marker = { ".git", "pyproject.toml" } local project_root = vim.fs.root(0, project_marker) if project_root == nil then vim.print("can't find project root") return end file_path = vim.fn.substitute(full_path, project_root, "", "g") end if context["args"] == "absolute" then file_path = full_path end vim.fn.setreg("+", file_path) vim.print("Filepath copied to clipboard!") end, { bang = false, nargs = 1, force = true, desc = "Copy current file path to clipboard", complete = function() return { "nameonly", "relative", "absolute" } end, }) vim.api.nvim_create_user_command("JSONFormat", function(context) local range = context["range"] local line1 = context["line1"] local line2 = context["line2"] if range == 0 or range == 2 then local cmd_str = string.format("%s,%s!python -m json.tool", line1, line2) vim.fn.execute(cmd_str) else local msg = string.format("unsupported range: %s", range) vim.api.nvim_echo({ { msg } }, true, { err = true }) end end, { desc = "Format JSON", range = "%", })