-- Personal keymaps (original workflow) local keymap = vim.keymap -- ============================================================================= -- PERSONAL KEYMAPS (ORIGINAL WORKFLOW) -- ============================================================================= keymap.set("n", "u", function() vim.cmd("normal! ggVG$") end, { desc = "Select the whole file" }) keymap.set("n", "4", function() -- Copy current line and paste below vim.cmd("normal! yy") vim.cmd("normal! p") end, { desc = "Copy the entire line and paste just below" }) -- file management keymap.set("n", "w", ":w", { desc = "Save the current file" }) keymap.set("n", "xa", ":xa", { desc = "Save and close all the files" }) keymap.set("n", "q", ":q", { desc = "Quit" }) keymap.set("n", "Q", ":q!", { desc = "Force quit" }) keymap.set("n", "so", ":source %", { desc = "Reload nvim" }) keymap.set("n", "no", ":noh ", { desc = "Reset search a word" }) -- increment/decrement numbers keymap.set("n", "+", "", { desc = "Increment number" }) -- increment keymap.set("n", "-", "", { desc = "Decrement number" }) -- decrement -- Window management keymaps are centralized in lua/cargdev/core/keymaps/window.lua -- sintax fixer keymap.set("n", "sy", "gg=G", { desc = "Format current file" }) keymap.set("n", "", "10", { noremap = true, silent = true }) keymap.set("n", "", "10", { noremap = true, silent = true }) -- Buffer management with safe close (confirms if unsaved changes) -- Closes only the current buffer, switches to another buffer instead of quitting local function close_buffer(force) local current_buf = vim.api.nvim_get_current_buf() local buffers = vim.tbl_filter(function(buf) return vim.api.nvim_buf_is_valid(buf) and vim.bo[buf].buflisted end, vim.api.nvim_list_bufs()) if #buffers > 1 then -- Switch to previous buffer before closing vim.cmd("bprevious") if force then vim.cmd("bdelete! " .. current_buf) else vim.cmd("bdelete " .. current_buf) end else -- Last buffer: quit Neovim vim.cmd(force and "q!" or "q") end end keymap.set("n", "bd", function() if vim.bo.modified then vim.ui.select({ "Save & Close", "Discard & Close", "Cancel" }, { prompt = "Buffer has unsaved changes:", }, function(choice) if choice == "Save & Close" then vim.cmd("w") close_buffer(false) elseif choice == "Discard & Close" then close_buffer(true) end end) else close_buffer(false) end end, { desc = "Buffer: Close (safe)" }) -- Force close buffer without confirmation keymap.set("n", "bD", function() close_buffer(true) end, { desc = "Buffer: Force close" }) -- Set buftabline mappings keymap.set("n", "", ":bnext", { noremap = true, silent = true }) keymap.set("n", "", ":bprev", { noremap = true, silent = true }) -- Coding hacks keymap.set( "n", "re", "ggOimportReactfrom'react';0", { desc = "Type import react from 'react' at the top of the file" } ) keymap.set("n", ",", "$a,", { desc = "Adding ',' at the end of the line" }) keymap.set("n", ";", "$a;", { desc = "Adding ';' at the end of the line" }) keymap.set("n", "xr", ":!node %", { desc = "Run file with node" }) -- Resize splits keymaps are centralized in lua/cargdev/core/keymaps/window.lua -- Run and Debug Project keymap.set("n", "pr", ":RunProject", { desc = "Run Project" }) keymap.set("n", "pd", ":DebugProject", { desc = "Debug Project" }) -- Copilot Chat (all Copilot keymaps moved to lua/cargdev/core/keymaps/copilot.lua) keymap.set("v", "zn", ":CopilotChatRename", { desc = "Rename variable (Copilot Chat)" }) keymap.set("n", "zc", ":CopilotChat", { desc = "Open Copilot Chat" }) keymap.set("v", "ze", ":CopilotChatExplain", { desc = "Explain code (Copilot Chat)" }) keymap.set("v", "zr", ":CopilotChatReview", { desc = "Review code (Copilot Chat)" }) keymap.set("v", "zf", ":CopilotChatFix", { desc = "Fix code issues (Copilot Chat)" }) keymap.set("v", "zo", ":CopilotChatOptimize", { desc = "Optimize code (Copilot Chat)" }) keymap.set("v", "zd", ":CopilotChatDocs", { desc = "Generate docs (Copilot Chat)" }) -- Paste HTML as Markdown using pandoc keymap.set("n", "p", function() vim.cmd("read !pbpaste -Prefer html | pandoc -f html -t gfm") end, { desc = "Paste HTML clipboard as Markdown" }) -- ============================================================================= -- QUICKFIX NAVIGATION (under x for Trouble/Diagnostics group) -- ============================================================================= keymap.set("n", "xn", ":cnextzz", { desc = "Quickfix: Next item" }) keymap.set("n", "xp", ":cprevzz", { desc = "Quickfix: Previous item" }) keymap.set("n", "xo", ":copen", { desc = "Quickfix: Open list" }) keymap.set("n", "xq", ":cclose", { desc = "Quickfix: Close list" }) keymap.set("n", "xf", ":cfirstzz", { desc = "Quickfix: First item" }) keymap.set("n", "xl", ":clastzz", { desc = "Quickfix: Last item" }) -- Location list navigation keymap.set("n", "ln", ":lnextzz", { desc = "Location: Next item" }) keymap.set("n", "lp", ":lprevzz", { desc = "Location: Previous item" }) keymap.set("n", "lo", ":lopen", { desc = "Location: Open list" }) keymap.set("n", "lq", ":lclose", { desc = "Location: Close list" })