mappings.lua 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. local opts = { silent = true }
  2. -- ; as :
  3. vim.keymap.set({'n', 'v'}, ';', ':')
  4. -- leave insert mode via jj
  5. vim.keymap.set('i', 'jj', '<ESC>', opts)
  6. -- j/k with wraps
  7. vim.keymap.set({'n', 'v'}, 'j', 'gj', opts)
  8. vim.keymap.set({'n', 'v'}, 'k', 'gk', opts)
  9. -- leave insert mode with <ESC><ESC>
  10. vim.keymap.set('t', '<ESC><ESC>', '<C-\\><C-N>', opts)
  11. vim.keymap.set('t', '<C-[><C-[>', '<C-\\><C-N>', opts)
  12. -- select pasted text
  13. vim.keymap.set('n', 'gp', '`[v`]', opts)
  14. -- pickers
  15. vim.keymap.set('n', '<C-P>', '<cmd>lua project_files()<CR>', opts)
  16. vim.keymap.set('n', '<C-O>', '<cmd>Telescope buffers<CR>', opts)
  17. vim.keymap.set('n', '<Leader>fg', '<cmd>lua commit_files()<CR>', opts)
  18. vim.keymap.set('n', '<Leader>ff', '<cmd>Telescope live_grep<CR>', opts)
  19. vim.keymap.set('n', '<Leader>fr', '<cmd>Telescope resume<CR>', opts)
  20. vim.keymap.set('n', '<Leader>fp', '<cmd>Telescope pickers<CR>', opts)
  21. -- directory tree
  22. vim.keymap.set('n', '<Leader>ft', function() MiniFiles.open(MiniFiles.get_latest_path()) end, opts)
  23. vim.keymap.set('n', '<Leader>fc', function() MiniFiles.open(vim.api.nvim_buf_get_name(0)) end, opts)
  24. -- jumplist navigation
  25. vim.keymap.set('n', '[f', '<C-O>', opts)
  26. vim.keymap.set('n', ']f', '<C-I>', opts)
  27. -- conflicts navigation
  28. vim.keymap.set('n', '[x', '?^[<lt>=>]\\{7}<CR>', opts)
  29. vim.keymap.set('n', ']x', '/^[<lt>=>]\\{7}<CR>', opts)
  30. -- window navigation
  31. vim.keymap.set('n', '[w', '<C-w>W', opts)
  32. vim.keymap.set('n', ']w', '<C-w>w', opts)
  33. -- cursor display
  34. vim.keymap.set('n', '<Leader>c', '<cmd>set cursorline! cursorcolumn!<CR>', opts)
  35. -- notification history
  36. vim.keymap.set('n', '<Leader>n', require('mini.notify').show_history, opts)
  37. -- git
  38. -- open status in current split without special flag (so navigating away closes it)
  39. -- https://github.com/tpope/vim-fugitive/issues/1296
  40. vim.keymap.set('n', '<Leader>gs', '<cmd>Gedit :<CR>', opts)
  41. vim.keymap.set('n', '<Leader>gb', '<cmd>Telescope git_branches<CR>', opts)
  42. vim.keymap.set('n', '<Leader>gd', function() MiniDiff.toggle_overlay() end, opts)
  43. -- undotree
  44. vim.keymap.set('n', '<Leader>ut', '<cmd>UndotreeToggle<CR>', opts)
  45. -- opening terminals
  46. vim.keymap.set('n', '<Leader>tv', '<cmd>vertical term $SHELL<CR>', opts)
  47. vim.keymap.set('n', '<Leader>to', '<cmd>term $SHELL<CR>', opts)
  48. -- delete buffer
  49. vim.keymap.set('n', '<Leader>q', '<cmd>lua MiniBufremove.delete()<CR>', opts)
  50. vim.keymap.set('n', '<Leader>Q', '<cmd>lua MiniBufremove.delete(0, true)<CR>', opts)
  51. -- split/join
  52. vim.keymap.set('n', '<Leader>s', '<cmd>TSJSplit<CR>', opts)
  53. vim.keymap.set('n', '<Leader>j', '<cmd>TSJJoin<CR>', opts)
  54. -- diagnostics
  55. vim.keymap.set('n', '<space>e', function() vim.diagnostic.open_float() end, opts)
  56. vim.keymap.set('n', '[d', function() vim.diagnostic.jump({ count = -1, float = true, severity = vim.diagnostic.severity.ERROR }) end, opts)
  57. vim.keymap.set('n', ']d', function() vim.diagnostic.jump({ count = 1, float = true, severity = vim.diagnostic.severity.ERROR }) end, opts)
  58. vim.keymap.set('n', '[D', function() vim.diagnostic.jump({ count = -1, float = true }) end, opts)
  59. vim.keymap.set('n', ']D', function() vim.diagnostic.jump({ count = 1, float = true }) end, opts)
  60. vim.keymap.set('n', '<space>qe', function() vim.diagnostic.setqflist({ severity = vim.diagnostic.severity.ERROR }) end, opts)
  61. vim.keymap.set('n', '<space>qw', function() vim.diagnostic.setqflist({ severity = { min = vim.diagnostic.severity.WARN } }) end, opts)
  62. vim.keymap.set('n', '<space>qd', function() vim.diagnostic.setqflist({}) end, opts)
  63. vim.keymap.set('n', '<space>qc', '<cmd>cclose<CR>', opts)
  64. -- LSP-specific
  65. vim.api.nvim_create_autocmd('LspAttach', {
  66. callback = function(args)
  67. local client = vim.lsp.get_client_by_id(args.data.client_id)
  68. if client.name == 'dprint' or client.name == 'eslint' then
  69. -- mappings should have been attached by typescript and re-attaching can
  70. -- overwrite the typescript specific overrides
  71. return
  72. end
  73. local opts = { silent = true, buffer = args.buf }
  74. vim.keymap.set('n', 'gD', '<cmd>lua vim.lsp.buf.declaration()<CR>', opts)
  75. vim.keymap.set('n', 'gd', '<cmd>Telescope lsp_definitions<CR>', opts)
  76. vim.keymap.set('n', 'gri', '<cmd>Telescope lsp_implementations<CR>', opts)
  77. vim.keymap.set('n', '<space>D', '<cmd>Telescope lsp_type_definitions<CR>', opts)
  78. vim.keymap.set('n', 'grr', '<cmd>Telescope lsp_references<CR>', opts)
  79. vim.keymap.set('n', 'gO', '<cmd>Telescope lsp_document_symbols<CR>', opts)
  80. if client.name == 'ts_ls' then
  81. -- exclude import statements from reference search (may have false positives)
  82. vim.keymap.set('n', 'grr', '<cmd>Telescope lsp_references default_text=!import\\ <CR>', opts)
  83. vim.keymap.set('n', 'grA', '<cmd>LspTypescriptSourceAction<CR>', opts)
  84. end
  85. end,
  86. })