remap.lua 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. nmap("<Space>", "")
  2. vim.g.mapleader = " "
  3. vim.g.maplocalleader = " "
  4. nmap("Y", "yy")
  5. nmap("<leader><leader>", "<c-^>", { desc = "Switch to last buffer" })
  6. nmap("<M-h>", ":vertical resize +3<CR>", { desc = "Resize window" })
  7. nmap("<M-l>", ":vertical resize -3<CR>", { desc = "Resize window" })
  8. nmap("<M-k>", ":resize +3<CR>", { desc = "Resize window" })
  9. nmap("<M-j>", ":resize -3<CR>", { desc = "Resize window" })
  10. vim.cmd([[
  11. nnoremap <silent> <C-j> <C-d>
  12. nnoremap <silent> <C-k> <C-u>
  13. ]])
  14. nmap("n", "nzz", { desc = "Move to next search match" })
  15. nmap("N", "Nzz", { desc = "Move to previous search match" })
  16. nmap("*", "*zz", { desc = "Move to next search match" })
  17. nmap("#", "#zz", { desc = "Move to previous search match" })
  18. nmap("g*", "g*zz", { desc = "Move to next search match" })
  19. nmap("g#", "g#zz", { desc = "Move to previous search match" })
  20. -- stay in indent mode
  21. vmap("<", "<gv", { desc = "Indent left" })
  22. vmap(">", ">gv", { desc = "Indent right" })
  23. -- keep register after paste
  24. map("x", "p", [["_dP]])
  25. map({ "n", "o", "x" }, "<s-h>", "^", { desc = "Move to first non-blank character" })
  26. map({ "n", "o", "x" }, "<s-l>", "g_", { desc = "Move to last non-blank character" })
  27. nmap("<leader>q", ":q<CR>", { desc = "Quit" })
  28. nmap("<leader>Q", function()
  29. vim.api.nvim_command("bd!|qall!")
  30. end, { desc = "Quit all" })
  31. -- create a user command to save without formatting :noa w
  32. vim.api.nvim_create_user_command("W", function()
  33. if vim.fn.empty(vim.fn.expand("%:t")) == 1 then
  34. Snacks.notifier.notify("Buffer is empty, not saving", vim.log.levels.ERROR)
  35. return
  36. end
  37. vim.api.nvim_command("noa w")
  38. end, { nargs = 0, desc = "Save without formatting" })
  39. -- move lines
  40. vmap("J", ":m '>+1<CR>gv=gv", { desc = "Move lines down" })
  41. vmap("K", ":m '<-2<CR>gv=gv", { desc = "Move lines up" })
  42. -- undo tree
  43. nmap("<leader>u", vim.cmd.UndotreeToggle)
  44. -- nnoremap yl :let @" = expand("%:p")<cr>
  45. nmap("yl", function()
  46. local file = vim.fn.expand("%")
  47. vim.fn.setreg("+", file)
  48. end, { desc = "Copy file path to clipboard" })
  49. nmap("<Leader>x", "<cmd>!chmod +x %<cr>", { desc = "Make file executable" })
  50. vim.g.user_emmet_leader_key = ","
  51. nmap("<leader>gp", "<CMD>Git push<CR>", { desc = "Git push" })
  52. -- reset cmdheight
  53. nmap("<leader>ch", function()
  54. vim.o.cmdheight = 1
  55. end, { desc = "Reset cmdheight" })
  56. nmap("<leader>w", function()
  57. vim.api.nvim_command("w")
  58. end, { desc = "Save" })
  59. nmap("<leader>W", function()
  60. vim.api.nvim_command("wa")
  61. end, { desc = "Save all" })
  62. -- format json using jq
  63. nmap("<leader>jq", ":%!jq '.'<CR>", { desc = "Format json using jq" })
  64. vmap("<leader>jq", ":!jq '.'<CR>", { desc = "Format json using jq" })
  65. -- Navigate quickfix list
  66. nmap("qj", "<cmd>cnext<cr>", { desc = "Next quickfix item" })
  67. nmap("qk", "<cmd>cprev<cr>", { desc = "Previous quickfix item" })
  68. nmap("<Esc>", "<cmd>nohlsearch<CR>", { desc = "Clear search highlights" })
  69. -- Restore 's' key functionality (Mini.surround overrides it by default)
  70. nmap("s", "cl", { desc = "Delete character and enter insert mode" })
  71. -- Launch lazygit in a new tmux pane, exits when done
  72. nmap("<leader>lg", "<cmd>!tmux new-window -c " .. vim.fn.getcwd() .. " -- lazygit <CR><CR>", { desc = "LazyGit" })