init.lua 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. require('telescope').setup({
  2. defaults = {
  3. mappings = {
  4. i = {
  5. ['jj'] = 'close',
  6. ['<C-j>'] = 'move_selection_next',
  7. ['<C-k>'] = 'move_selection_previous',
  8. },
  9. },
  10. layout_config = {
  11. prompt_position = 'top',
  12. },
  13. sorting_strategy = 'ascending',
  14. },
  15. })
  16. require('telescope').load_extension('fzf')
  17. require('gitsigns').setup()
  18. require('mini.statusline').setup({
  19. content = {
  20. active = function()
  21. local mode, mode_hl = MiniStatusline.section_mode({ trunc_width = 120 })
  22. local git = MiniStatusline.section_git({ trunc_width = 75, icon = '' })
  23. local diagnostics = MiniStatusline.section_diagnostics({ trunc_width = 75, icon = '' })
  24. local filename = MiniStatusline.section_filename({ trunc_width = 140 })
  25. local fileinfo = MiniStatusline.section_fileinfo({ trunc_width = 120 })
  26. local location = MiniStatusline.section_location({ trunc_width = 75 })
  27. return MiniStatusline.combine_groups({
  28. { hl = mode_hl, strings = { mode } },
  29. { hl = 'MiniStatuslineDevinfo', strings = { git, diagnostics } },
  30. '%<', -- Mark general truncate point
  31. { hl = 'MiniStatuslineFilename', strings = { filename } },
  32. '%=', -- End left alignment
  33. { hl = 'MiniStatuslineFileinfo', strings = { fileinfo } },
  34. { hl = mode_hl, strings = { location } },
  35. })
  36. end
  37. },
  38. })
  39. require('mini.bufremove').setup()
  40. require('mini.indentscope').setup()
  41. require('nvim-treesitter.configs').setup {
  42. highlight = {
  43. enable = true,
  44. },
  45. }
  46. vim.diagnostic.config({
  47. virtual_text = { severity = { min = vim.diagnostic.severity.WARN } }
  48. })
  49. local opts = { noremap=true, silent=true }
  50. vim.api.nvim_set_keymap('n', '<space>e', '<cmd>lua vim.diagnostic.open_float()<CR>', opts)
  51. vim.api.nvim_set_keymap('n', '[d', '<cmd>lua vim.diagnostic.goto_prev()<CR>', opts)
  52. vim.api.nvim_set_keymap('n', ']d', '<cmd>lua vim.diagnostic.goto_next()<CR>', opts)
  53. vim.api.nvim_set_keymap('n', '<space>q', '<cmd>lua vim.diagnostic.setqflist({ severity = { min = vim.diagnostic.severity.WARN } })<CR>', opts)
  54. vim.api.nvim_set_keymap('n', '<Leader>q', '<cmd>lua MiniBufremove.delete()<CR>', opts)
  55. vim.api.nvim_set_keymap('n', '<C-P>', '<cmd>Telescope find_files<CR>', opts)
  56. vim.api.nvim_set_keymap('n', '<C-O>', '<cmd>Telescope buffers<CR>', opts)
  57. vim.api.nvim_set_keymap('n', '<Leader>ff', '<cmd>Telescope live_grep<CR>', opts)
  58. vim.api.nvim_set_keymap('n', '<Leader>fs', '<cmd>Telescope lsp_document_symbols<CR>', opts)
  59. -- Allow pressing enter to autocomplete
  60. vim.api.nvim_set_keymap('i', '<CR>', 'pumvisible() ? "\\<C-y>" : "\\<CR>"', { noremap = true, expr = true })
  61. function on_attach(client, bufnr)
  62. -- Enable completion triggered by <c-x><c-o>
  63. vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.MiniCompletion.completefunc_lsp')
  64. -- Mappings.
  65. -- See `:help vim.lsp.*` for documentation on any of the below functions
  66. vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gD', '<cmd>lua vim.lsp.buf.declaration()<CR>', opts)
  67. vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gd', '<cmd>lua vim.lsp.buf.definition()<CR>', opts)
  68. vim.api.nvim_buf_set_keymap(bufnr, 'n', 'K', '<cmd>lua vim.lsp.buf.hover()<CR>', opts)
  69. vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gi', '<cmd>lua vim.lsp.buf.implementation()<CR>', opts)
  70. vim.api.nvim_buf_set_keymap(bufnr, 'n', '<C-k>', '<cmd>lua vim.lsp.buf.signature_help()<CR>', opts)
  71. vim.api.nvim_buf_set_keymap(bufnr, 'n', '<space>wa', '<cmd>lua vim.lsp.buf.add_workspace_folder()<CR>', opts)
  72. vim.api.nvim_buf_set_keymap(bufnr, 'n', '<space>wr', '<cmd>lua vim.lsp.buf.remove_workspace_folder()<CR>', opts)
  73. vim.api.nvim_buf_set_keymap(bufnr, 'n', '<space>wl', '<cmd>lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))<CR>', opts)
  74. vim.api.nvim_buf_set_keymap(bufnr, 'n', '<space>D', '<cmd>lua vim.lsp.buf.type_definition()<CR>', opts)
  75. vim.api.nvim_buf_set_keymap(bufnr, 'n', '<space>rn', '<cmd>lua vim.lsp.buf.rename()<CR>', opts)
  76. vim.api.nvim_buf_set_keymap(bufnr, 'n', '<space>ca', '<cmd>lua vim.lsp.buf.code_action()<CR>', opts)
  77. vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gr', '<cmd>Telescope lsp_references<CR>', opts)
  78. vim.api.nvim_buf_set_keymap(bufnr, 'n', '<space>f', '<cmd>lua vim.lsp.buf.formatting()<CR>', opts)
  79. end
  80. require'nvim-treesitter.configs'.setup {
  81. highlight = {
  82. enable = true,
  83. },
  84. }
  85. require('mini.completion').setup({
  86. delay = {
  87. -- disable autocomplete
  88. completion = 100000000,
  89. info = 100,
  90. signature = 50,
  91. },
  92. lsp_completion = {
  93. source_func = 'omnifunc',
  94. auto_setup = false,
  95. },
  96. });
  97. local nvim_lsp = require('lspconfig')
  98. local null_ls = require('null-ls')
  99. local null_ls_sources = {}
  100. if vim.fn.executable("node_modules/.bin/eslint") == 1 then
  101. table.insert(null_ls_sources, null_ls.builtins.formatting.eslint_d)
  102. table.insert(null_ls_sources, null_ls.builtins.diagnostics.eslint_d)
  103. table.insert(null_ls_sources, null_ls.builtins.code_actions.eslint_d)
  104. end
  105. if vim.fn.executable("gofmt") == 1 then
  106. table.insert(null_ls_sources, null_ls.builtins.formatting.gofmt)
  107. end
  108. if vim.fn.executable("shellcheck") == 1 then
  109. table.insert(null_ls_sources, null_ls.builtins.diagnostics.shellcheck)
  110. table.insert(null_ls_sources, null_ls.builtins.code_actions.shellcheck)
  111. end
  112. if vim.fn.executable("deno") == 1 then
  113. nvim_lsp.denols.setup({
  114. capabilities = require('cmp_nvim_lsp').update_capabilities(vim.lsp.protocol.make_client_capabilities()),
  115. on_attach = on_attach,
  116. });
  117. table.insert(null_ls_sources, null_ls.builtins.formatting.deno_fmt);
  118. end
  119. if vim.fn.executable("node_modules/.bin/tsc") == 1 then
  120. local ts_utils = require("nvim-lsp-ts-utils")
  121. nvim_lsp.tsserver.setup({
  122. init_options = ts_utils.init_options,
  123. flags = {
  124. debounce_text_changes = 150,
  125. },
  126. on_attach = function(client, bufnr)
  127. client.resolved_capabilities.document_formatting = false
  128. client.resolved_capabilities.document_range_formatting = false
  129. on_attach(client, bufnr)
  130. ts_utils.setup({
  131. debug = false,
  132. disable_commands = false,
  133. enable_import_on_completion = true,
  134. -- import all
  135. import_all_timeout = 5000, -- ms
  136. -- lower numbers = higher priority
  137. import_all_priorities = {
  138. same_file = 1, -- add to existing import statement
  139. local_files = 2, -- git files or files with relative path markers
  140. buffer_content = 3, -- loaded buffer content
  141. buffers = 4, -- loaded buffer names
  142. },
  143. import_all_scan_buffers = 100,
  144. import_all_select_source = false,
  145. -- filter diagnostics
  146. filter_out_diagnostics_by_severity = {},
  147. filter_out_diagnostics_by_code = {},
  148. -- inlay hints
  149. auto_inlay_hints = false,
  150. inlay_hints_highlight = "Comment",
  151. -- update imports on file move
  152. update_imports_on_move = false,
  153. require_confirmation_on_move = false,
  154. watch_dir = nil,
  155. })
  156. -- required to fix code action ranges and filter diagnostics
  157. ts_utils.setup_client(client)
  158. end,
  159. })
  160. end
  161. null_ls.setup({
  162. sources = null_ls_sources,
  163. on_attach = function(client, bufnr)
  164. if client.resolved_capabilities.document_formatting then
  165. vim.cmd([[
  166. augroup LspFormatting
  167. autocmd! * <buffer>
  168. autocmd BufWritePre <buffer> lua vim.lsp.buf.formatting_sync()
  169. augroup END
  170. ]])
  171. end
  172. end,
  173. });