local M = {} local formatFx = function() require("conform").format({ async = true }) end local renameCurrentBuffer = function() local old_name = vim.fn.expand("%:p") local new_name = vim.fn.input("New name: ", vim.fn.expand("%:p:h") .. "/") if new_name == "" then print("No new name provided") return elseif new_name == old_name then return end vim.cmd("write") local success, err = os.rename(old_name, new_name) if not success then print("Error renaming file: " .. err) return end vim.cmd("edit " .. new_name) vim.cmd("bdelete " .. old_name) end -- 通用映射函数 local function apply_mappings(maps, prefix) for _, map in ipairs(maps) do local new_map = { keys = prefix .. map.keys, cmd = map.cmd, opts = map.opts, } table.insert(M, new_map) end end vim.api.nvim_create_user_command("Rename", renameCurrentBuffer, {}) local leader_mappings = { general = { { keys = "", cmd = ":Telescope find_files", opts = { desc = "Find Files" } }, { keys = "/", cmd = ":Telescope live_grep", opts = { desc = "Grep Files" } }, { keys = "-", cmd = ":split", opts = { desc = "Split to down" } }, { keys = "\\", cmd = ":vsplit", opts = { desc = "Split to right" } }, { keys = "|", cmd = ":vsplit", opts = { desc = "Split to right" } }, { keys = "h", cmd = "h", opts = { desc = "Left Window" } }, { keys = "n", cmd = "j", opts = { desc = "Down Window" } }, { keys = "e", cmd = "k", opts = { desc = "Up Window" } }, { keys = "i", cmd = "l", opts = { desc = "Right Window" } }, }, b = { -- +buffer { keys = "a", cmd = ":Alpha", opts = { desc = "Dashboard" } }, { keys = "b", cmd = ":Telescope buffers", opts = { desc = "List Buffers" } }, { keys = "d", cmd = ":bdelete", opts = { desc = "Delete Buffer" } }, { keys = "h", cmd = ":bprevious", opts = { desc = "Previous Buffer" } }, { keys = "i", cmd = ":bnext", opts = { desc = "Next Buffer" } }, { keys = "H", cmd = ":bfirst", opts = { desc = "First Buffer" } }, { keys = "I", cmd = ":blast", opts = { desc = "Last Buffer" } }, { keys = "0", cmd = ":bfirst", opts = { desc = "First Buffer" } }, { keys = "^", cmd = ":bfirst", opts = { desc = "First Buffer" } }, { keys = "$", cmd = ":blast", opts = { desc = "Last Buffer" } }, -- { keys = "s", cmd = ":Telescope buffers", opts = { desc = "Search buffers" } }, }, c = { -- +code/compile { keys = "r", cmd = ":RunCode", opts = { desc = "Run code" } }, { keys = "e", cmd = ":Telescope diagnostics", opts = { desc = "Navigate errors/warnings" } }, { keys = "f", cmd = formatFx, opts = { desc = "Format buffer" } }, { keys = "s", cmd = ":Telescope treesitter", opts = { desc = "Search symbols" } }, { keys = "S", cmd = ":Telescope grep_string", opts = { desc = "Search current symbol" } }, }, f = { -- +file/find { keys = "f", cmd = ":Telescope fd", opts = { desc = "Find Files" } }, { keys = "s", cmd = ":Telescope live_grep", opts = { desc = "Grep Files" } }, { keys = "b", cmd = ":Telescope buffers", opts = { desc = "List Buffers" } }, { keys = "e", cmd = ":NvimTreeToggle", opts = { desc = "Toggle File Explorer" } }, { keys = "t", cmd = ":FloatermToggle", opts = { desc = "toggle visibility of the float terminal" } }, { keys = "T", cmd = ":FloatermNew", opts = { desc = "Spawn a float terminal" } }, { keys = "h", cmd = ":Telescope oldfiles", opts = { desc = "Search history files" } }, { keys = "c", cmd = ":Telescope find_files cwd=~/.config/nvim", opts = { desc = "Search Config" } }, { keys = "o", cmd = ":!open %", opts = { desc = "Open file in default program" } }, { keys = "R", cmd = renameCurrentBuffer, opts = { desc = "Rename current file" } }, }, p = { -- +project { keys = "p", cmd = ":Telescope projects", opts = { desc = "List all Projects" } }, { keys = "g", cmd = ":Telescope projects", opts = { desc = "List all Git Projects" } }, { keys = "s", cmd = ":Telescope session-lens", opts = { desc = "List all sessions" } }, }, q = { -- +quit { keys = "q", cmd = ":q", opts = { desc = "Quit" } }, { keys = "Q", cmd = ":qa!", opts = { desc = "Force Quit" } }, { keys = "w", cmd = ":wq", opts = { desc = "Write and Quit" } }, { keys = "W", cmd = ":wall:qa!", opts = { desc = "Write all and Force Quit" } }, }, t = { -- +toggle { keys = "f", cmd = ":NvimTreeToggle", opts = { desc = "Toggle File Explorer" } }, { keys = "F", cmd = ":FormatToggle", opts = { desc = "Toggle autoformat-on-save" } }, { keys = "t", cmd = ":FloatermToggle", opts = { desc = "toggle visibility of the float terminal" } }, }, u = { -- +ui { keys = "i", cmd = ":Telescope colorscheme", opts = { desc = "Change colorscheme" } }, }, w = { -- +window { keys = "h", cmd = "h", opts = { desc = "Left Window" } }, { keys = "n", cmd = "j", opts = { desc = "Down Window" } }, { keys = "e", cmd = "k", opts = { desc = "Up Window" } }, { keys = "i", cmd = "l", opts = { desc = "Right Window" } }, { keys = "-", cmd = ":split", opts = { desc = "Split to down" } }, { keys = "|", cmd = ":vsplit", opts = { desc = "Split to right" } }, { keys = "c", cmd = "c", opts = { desc = "Close Window" } }, { keys = "o", cmd = "o", opts = { desc = "Close Other Windows" } }, { keys = "r", cmd = "r", opts = { desc = "Rotate Windows" } }, { keys = "R", cmd = "R", opts = { desc = "Reverse Rotate Windows" } }, { keys = "t", cmd = "T", opts = { desc = "Move Window to New Tab" } }, { keys = "H", cmd = ":vertical resize -5", opts = { desc = "Decrease Window Height" } }, { keys = "N", cmd = ":resize +5", opts = { desc = "Increase Window Height" } }, { keys = "E", cmd = ":vertical resize +5", opts = { desc = "Increase Window Width" } }, { keys = "I", cmd = ":resize -5", opts = { desc = "Decrease Window Width" } }, }, } for key, maps in pairs(leader_mappings) do if key == "general" then apply_mappings(maps, "") else apply_mappings(maps, "" .. key) end end return M