-- Create a mapping for compiling and running code vim.keymap.set('n', 'cr', CompileAndRun, { noremap = true, silent = false, desc = '[C]ompile and [R]un', }) -- emmet vim.api.nvim_set_keymap('i', '', '(emmet-expand-abbr)', { noremap = true, silent = true, }) -- "Copy Paste from OS Clipboard vim.keymap.set('v', '', '"+p:silent! %s/\\r//g', { desc = '[P]aste from system clipboard', noremap = true, silent = true, }) vim.keymap.set('n', '', '"+p:silent! %s/\\r//g', { desc = '[P]aste from system clipboard', noremap = true, silent = true, }) vim.keymap.set('i', '', '"+p:silent! %s/\\r//ga', { desc = '[P]aste from system clipboard', noremap = true, silent = true, }) vim.keymap.set('n', '', '"+p:silent! %s/\\r//g', { desc = '[P]aste from system clipboard', noremap = true, silent = true, }) vim.keymap.set('i', '', '*:silent! %s/\\r//g', { desc = '[P]aste from system clipboard', noremap = true, silent = true, }) vim.keymap.set('x', '', '"+y', { desc = '[Y]ank to system clipboard', noremap = true, silent = true, }) vim.keymap.set('x', '', '"+y', { desc = '[Y]ank to system clipboard', noremap = true, silent = true, }) -- Map Ctrl+S to save vim.keymap.set('n', '', ':w', { desc = '[^s] Save Current File', noremap = true, silent = true, }) vim.keymap.set('i', '', ':wa', { desc = '[^s] Save Current File', noremap = true, silent = true, }) -- "Toggle Wrap vim.keymap.set('n', 'ww', ':set wrap!', { desc = '[W]ord [W]rap', noremap = true, silent = true, }) -- -- "keep visual mode after indent vim.keymap.set('v', '>', '>gv', { desc = '', noremap = true, silent = true, }) vim.keymap.set('v', '<', '', '"_d', { desc = 'Black Hole Delete', noremap = true, silent = true, }) vim.keymap.set('x', '', '"_d', { desc = 'Black Hole Delete', noremap = true, silent = true, }) -- telescope keymap vim.keymap.set('n', '?', ':Telescope keymaps', { desc = 'Show Keymaps', noremap = true, silent = true, }) -- macos arrow navigation vim.api.nvim_set_keymap('', '', '', { noremap = true, }) vim.api.nvim_set_keymap('', '', '', { noremap = true, }) vim.api.nvim_set_keymap('i', '', 'b', { noremap = true, silent = false, }) vim.api.nvim_set_keymap('i', '', 'w', { noremap = true, silent = false, }) vim.api.nvim_set_keymap('x', '', 'b', { noremap = true, silent = false, }) vim.api.nvim_set_keymap('x', '', 'w', { noremap = true, silent = false, }) vim.api.nvim_set_keymap('n', '', 'b', { noremap = true, silent = false, }) vim.api.nvim_set_keymap('n', '', 'w', { noremap = true, silent = false, }) -- macos, neovide, alacritty terminal vim.api.nvim_set_keymap('i', '', '"*pa', { noremap = true, silent = false, }) vim.api.nvim_set_keymap('n', '', '"*p', { noremap = true, silent = false, }) vim.api.nvim_set_keymap('n', '', '', { noremap = true, silent = false, }) vim.api.nvim_set_keymap('n', '', '', { noremap = true, silent = false, }) vim.api.nvim_set_keymap('i', '', '', { noremap = true, silent = false, }) vim.api.nvim_set_keymap('i', '', '', { noremap = true, silent = false, }) vim.api.nvim_set_keymap('x', '', '', { noremap = true, silent = false, }) vim.api.nvim_set_keymap('x', '', '', { noremap = true, silent = false, }) vim.api.nvim_set_keymap('n', '', 'gg', { noremap = true, silent = false, }) vim.api.nvim_set_keymap('n', '', 'G', { noremap = true, silent = false, }) vim.api.nvim_set_keymap('i', '', 'gg', { noremap = true, silent = false, }) vim.api.nvim_set_keymap('i', '', 'G', { noremap = true, silent = false, }) vim.api.nvim_set_keymap('x', '', 'gg', { noremap = true, silent = false, }) vim.api.nvim_set_keymap('x', '', 'G', { noremap = true, silent = false, }) vim.keymap.set('n', '', ':w', { desc = '[^s] Save Current File', noremap = true, silent = true, }) vim.keymap.set('i', '', ':wa', { desc = '[^s] Save Current File', noremap = true, silent = true, }) -- npm / yarn operation vim.keymap.set('n', 'rb', function() RunCommandAndNotify 'npm run build' end, { noremap = true, silent = false, desc = '[R]un [B]uild', }) vim.keymap.set('n', 'rd', function() RunCommandInNewTab 'npm run dev' end, { noremap = true, silent = false, desc = '[R]un [D]ev', }) vim.keymap.set('n', 'ri', Npm_install, { noremap = true, silent = false, desc = '[R]un npm [I]nstall', }) vim.keymap.set('n', 'rl', function() RunCommandInNewTab 'five-server' end, { noremap = true, silent = false, desc = '[R]un npm [L]ive Server', }) -- clear highlight after search by pressing return vim.api.nvim_set_keymap('n', 'cl', ':noh:%s/\r//g', { noremap = true, silent = true, desc = '[C][l]ear Search and NewLine Character', }) -- cd to current directory vim.api.nvim_set_keymap('n', 'cd', ':cd %:p:h:pwd', { noremap = true, silent = false, desc = '[C]hange [D]irectory to current file', }) -- Session vim.api.nvim_set_keymap('n', 'sel', ":execute 'source ' . fnameescape(expand('~/' . fnamemodify(getcwd(), ':t') . '.vim'))", { noremap = true, silent = false, desc = '[Se]ssion [L]oad', }) vim.api.nvim_set_keymap('n', 'nq', ":execute 'mksession! ' . fnameescape(expand('~/' . fnamemodify(getcwd(), ':t') . '.vim')):qa!", { noremap = true, silent = false, desc = '[N]vim [Q]uit', }) -- vim signature help vim.keymap.set('n', 'k', vim.lsp.buf.signature_help, { noremap = true, silent = true, }) vim.keymap.set('n', 'sne', ':EditSnippets', { noremap = true, silent = false, desc = '[Sn]ippets [E]dit', }) -- "Snippet Format" vim.keymap.set('n', 'snf', function() local lines = vim.api.nvim_buf_get_lines(0, 0, -1, false) for i, line in ipairs(lines) do line = line:gsub('\\', '\\\\') -- escape backslashes line = line:gsub('"', '\\"') -- escape quotes line = line:gsub("%$", "\\\\$") line = line:gsub("\\\\\\\\", "\\\\\\\\\\\\") lines[i] = '"' .. line .. '",' end vim.api.nvim_buf_set_lines(0, 0, -1, false, lines) end, { desc = '[Sn]ippet [F]ormat', }) -- Noice Notification vim.keymap.set('n', 'snn', ':NoiceAll', { noremap = true, silent = false, desc = '[S]how [N]oice [N]otification', }) -- auto format vim.keymap.set('n', 'fmf', 'gg=G', { noremap = true, silent = false, desc = '[F]ormat [M]anual [F]ormat', }) -- Search and Replace vim.keymap.set('n', 'sar', ':%s///g', { noremap = true, silent = false, desc = '[S]earch [A]nd [R]eplace', }) -- Search and Replace vim.keymap.set('v', 'sar', '"zy:%s/z//g', { noremap = true, silent = false, desc = '[S]earch [A]nd [R]eplace', }) -- Search and Replace with Number of rows vim.keymap.set('v', 'san', function() -- Get the selected text vim.cmd 'normal! "zy' local selected = vim.fn.getreg 'z' -- Ask for number of rows local rows = vim.fn.input 'Number of rows to affect: ' if rows == '' then print 'Operation cancelled' return end -- Get current line number local current_line = vim.fn.line '.' local end_line = current_line + tonumber(rows) - 1 -- Generate the command but don't execute it local cmd = ':' .. current_line .. ',' .. end_line .. 's/' .. vim.fn.escape(selected, '/') .. '//g' vim.fn.feedkeys(cmd .. vim.api.nvim_replace_termcodes('', true, false, true)) end, { noremap = true, silent = false, desc = '[S]earch [A]nd Replace with [N]umber of rows starting from current line', }) -- Search and Visual Replace vim.keymap.set('v', 'svr', ':s/"//g', { noremap = true, silent = false, desc = '[S]earch And [V]isual [R]eplace', }) -- Search and Visual Replace vim.keymap.set('v', 'sk', ':s/\\(.*\\)/\\1/g', { noremap = true, silent = false, desc = '[S]earch [K]irby', }) vim.keymap.set('n', 'fnp', function() NextJSNewPage(vim.fn.input 'Enter Page Name: ') end, { noremap = true, silent = false, desc = 'New [P]age', }) vim.keymap.set('n', 'fnr', function() NextJSNewApiPost(vim.fn.input 'Enter Route Name: ') end, { noremap = true, silent = false, desc = 'New API [R]oute POST', }) vim.keymap.set('n', 'fng', function() NextJSNewApiGet(vim.fn.input 'Enter Route Name: ') end, { noremap = true, silent = false, desc = 'New [G]et Route', }) vim.keymap.set('n', 'fsp', function() SvelteKitNewPage(vim.fn.input 'Enter Page Name: ') end, { noremap = true, silent = false, desc = 'New [P]age', }) vim.keymap.set('n', 'fsr', function() SvelteKitNewAPIPost(vim.fn.input 'Enter Route Name: ') end, { noremap = true, silent = false, desc = 'New Post [R]oute', }) vim.keymap.set('n', 'fsg', function() SvelteKitNewAPIGet(vim.fn.input 'Enter Route Name: ') end, { noremap = true, silent = false, desc = 'New [G]et Route', }) vim.keymap.set( 'n', '', function() SearchAndReplace(vim.fn.input 'Enter Search Term: ', vim.fn.input 'Enter Replace Term: ') end, -- ":%s/vim.fn.input('Enter Search Term: ')/vim.fn.input('Enter Replace Term: ')/g", { noremap = true, silent = false, desc = '[S]earch and [R]eplace', } ) vim.keymap.set('n', 'sg', ':Telescope live_grep', { desc = '[S]earch by [G]rep', noremap = true, silent = false, }) vim.keymap.set('n', 'sc', customSearchGrep, { desc = '[S]earch by [G]rep [C]ustom', noremap = true, silent = false, }) -- close other windows except this one vim.keymap.set('n', 'x', ':on', { desc = 'Close all other windows', noremap = true, silent = true, }) vim.keymap.set('n', 'rr', ':e!', { noremap = true, silent = false, desc = '[R]eload [R]esource', }) vim.keymap.set('n', 'rp', ':LspRestart', { noremap = true, silent = false, desc = '[R]eload LS[P]', }) -- code companion vim.keymap.set('n', 'ct', ':CodeCompanionChat', { noremap = true, silent = false, desc = '[C]odeCompanion [T]alk', }) vim.keymap.set('n', 'cc', ':CodeCompanion #{buffer} ', { noremap = true, silent = false, desc = '[C]ode [C]ompanion', }) vim.keymap.set('v', 'cc', ':CodeCompanion ', { noremap = true, silent = false, desc = '[C]ode [C]ompanion', }) vim.keymap.set('n', 'fc', function() vim.fn.setreg('+', vim.fn.expand '%:p') print('Copied filename to clipboard: ' .. vim.fn.expand '%:p') end, { noremap = true, silent = true, desc = '[F]ile [C]opy current file path to clipboard', }) vim.keymap.set('n', 'fe', function() os.execute 'explorer.exe .' end, { noremap = true, silent = true, desc = '[F]ile [E]xplorer on current file folder', }) vim.keymap.set('n', 'gd', require('telescope.builtin').lsp_definitions, { noremap = true, silent = true }) -- Close all hidden/background buffers vim.keymap.set('n', 'bo', CloseHiddenBuffers, { noremap = true, silent = false, desc = '[B]uffer [O]nly - Close all hidden buffers', }) -- "Database Toggle UI" vim.keymap.set('n', 'db', ':DBUIToggle', { desc = '[D]ata[b]ase', noremap = true, silent = true, }) return {}