keymappings.lua 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. local utils = require "utils"
  2. local opts = {
  3. nnoremap = { noremap = true, silent = true },
  4. inoremap = { noremap = true, silent = true },
  5. vnoremap = { noremap = true, silent = true },
  6. xnoremap = { noremap = true, silent = true },
  7. generic = { silent = true },
  8. }
  9. local default_keys = {
  10. insert_mode = {
  11. -- I hate escape
  12. { "jk", "<ESC>" },
  13. { "kj", "<ESC>" },
  14. { "jj", "<ESC>" },
  15. -- Move current line / block with Alt-j/k ala vscode.
  16. { "<A-j>", "<Esc>:m .+1<CR>==gi" },
  17. { "<A-k>", "<Esc>:m .-2<CR>==gi" },
  18. -- navigation
  19. { "<A-Up>", "<C-\\><C-N><C-w>h" },
  20. { "<A-Down>", "<C-\\><C-N><C-w>j" },
  21. { "<A-Left>", "<C-\\><C-N><C-w>k" },
  22. { "<A-Right>", "<C-\\><C-N><C-w>l" },
  23. },
  24. normal_mode = {
  25. -- Better window movement
  26. { "<C-h>", "<C-w>h" },
  27. { "<C-j>", "<C-w>j" },
  28. { "<C-k>", "<C-w>k" },
  29. { "<C-l>", "<C-w>l" },
  30. -- Resize with arrows
  31. { "<C-Up>", ":resize -2<CR>" },
  32. { "<C-Down>", ":resize +2<CR>" },
  33. { "<C-Left>", ":vertical resize -2<CR>" },
  34. { "<C-Right>", ":vertical resize +2<CR>" },
  35. -- Tab switch buffer
  36. -- { "<TAB>", ":bnext<CR>" },
  37. -- { "<S-TAB>", ":bprevious<CR>" },
  38. -- Move current line / block with Alt-j/k a la vscode.
  39. { "<A-j>", ":m .+1<CR>==" },
  40. { "<A-k>", ":m .-2<CR>==" },
  41. -- QuickFix
  42. { "]q", ":cnext<CR>" },
  43. { "[q", ":cprev<CR>" },
  44. { "<C-q>", ":call QuickFixToggle()<CR>" },
  45. -- {'<C-TAB>', 'compe#complete()', {noremap = true, silent = true, expr = true}},
  46. },
  47. term_mode = {
  48. -- Terminal window navigation
  49. { "<C-h>", "<C-\\><C-N><C-w>h" },
  50. { "<C-j>", "<C-\\><C-N><C-w>j" },
  51. { "<C-k>", "<C-\\><C-N><C-w>k" },
  52. { "<C-l>", "<C-\\><C-N><C-w>l" },
  53. },
  54. visual_mode = {
  55. -- Better indenting
  56. { "<", "<gv" },
  57. { ">", ">gv" },
  58. -- { "p", '"0p', { silent = true } },
  59. -- { "P", '"0P', { silent = true } },
  60. },
  61. visual_block_mode = {
  62. -- Move selected line / block of text in visual mode
  63. { "K", ":move '<-2<CR>gv-gv" },
  64. { "J", ":move '>+1<CR>gv-gv" },
  65. -- Move current line / block with Alt-j/k ala vscode.
  66. { "<A-j>", ":m '>+1<CR>gv-gv" },
  67. { "<A-k>", ":m '<-2<CR>gv-gv" },
  68. },
  69. }
  70. if vim.fn.has "mac" == 1 then
  71. -- TODO: fix this
  72. default_keys.normal_mode[5][1] = "<A-Up>"
  73. default_keys.normal_mode[6][1] = "<A-Down>"
  74. default_keys.normal_mode[7][1] = "<A-Left>"
  75. default_keys.normal_mode[8][1] = "<A-Right>"
  76. end
  77. if lvim.leader == " " or lvim.leader == "space" then
  78. vim.g.mapleader = " "
  79. else
  80. vim.g.mapleader = lvim.leader
  81. end
  82. local function get_user_keys(mode)
  83. if lvim.keys[mode] == nil then
  84. return default_keys[mode]
  85. else
  86. return lvim.keys[mode]
  87. end
  88. end
  89. utils.add_keymap_normal_mode(opts.nnoremap, get_user_keys "normal_mode")
  90. utils.add_keymap_insert_mode(opts.inoremap, get_user_keys "insert_mode")
  91. utils.add_keymap_visual_mode(opts.vnoremap, get_user_keys "visual_mode")
  92. utils.add_keymap_visual_block_mode(opts.xnoremap, get_user_keys "visual_block_mode")
  93. utils.add_keymap_term_mode(opts.generic, get_user_keys "term_mode")
  94. -- navigate tab completion with <c-j> and <c-k>
  95. -- runs conditionally
  96. vim.cmd 'inoremap <expr> <C-j> pumvisible() ? "\\<C-n>" : "\\<C-j>"'
  97. vim.cmd 'inoremap <expr> <C-k> pumvisible() ? "\\<C-p>" : "\\<C-k>"'