init.lua 4.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. --Set highlight on search
  2. vim.o.hlsearch = false
  3. --Set statusbar
  4. vim.g.lightline = {
  5. colorscheme = 'onedark',
  6. active = { left = { { 'mode', 'paste' }, { 'gitbranch', 'readonly', 'filename', 'modified' } } },
  7. component_function = { gitbranch = 'fugitive#head' },
  8. }
  9. -- Highlight on yank
  10. vim.api.nvim_exec(
  11. [[
  12. augroup YankHighlight
  13. autocmd!
  14. autocmd TextYankPost * silent! lua vim.highlight.on_yank()
  15. augroup end
  16. ]],
  17. false
  18. )
  19. local capabilities = require('cmp_nvim_lsp').update_capabilities(vim.lsp.protocol.make_client_capabilities())
  20. local cmp = require'cmp'
  21. cmp.setup({
  22. mapping = {
  23. ["<C-e>"] = cmp.mapping.close(),
  24. ["<C-p>"] = cmp.mapping.select_prev_item(),
  25. ["<C-n>"] = cmp.mapping.select_next_item(),
  26. ["<C-d>"] = cmp.mapping.scroll_docs(-4),
  27. ["<C-f>"] = cmp.mapping.scroll_docs(4),
  28. ["<C-y>"] = cmp.mapping.confirm {
  29. behavior = cmp.ConfirmBehavior.Insert,
  30. select = true,
  31. },
  32. ["<C-space>"] = cmp.mapping.complete(),
  33. ["<Tab>"] = cmp.mapping(cmp.mapping.select_next_item(), { "i", "s" }),
  34. ["<S-Tab>"] = cmp.mapping(cmp.mapping.select_prev_item(), { "i", "s" }),
  35. },
  36. sources = {
  37. { name = "nvim_lsp" },
  38. { name = "path" },
  39. { name = "luasnip" },
  40. { name = "buffer", keyword_length = 5 },
  41. },
  42. snippet = {
  43. expand = function(args)
  44. require('luasnip').lsp_expand(args.body)
  45. end,
  46. },
  47. experimental = {
  48. native_menu = false
  49. }
  50. })
  51. local opts = { noremap=true, silent=true }
  52. vim.api.nvim_set_keymap('n', '<space>e', '<cmd>lua vim.diagnostic.open_float()<CR>', opts)
  53. vim.api.nvim_set_keymap('n', '[d', '<cmd>lua vim.diagnostic.goto_prev()<CR>', opts)
  54. vim.api.nvim_set_keymap('n', ']d', '<cmd>lua vim.diagnostic.goto_next()<CR>', opts)
  55. vim.api.nvim_set_keymap('n', '<space>q', '<cmd>lua vim.diagnostic.setloclist()<CR>', opts)
  56. local on_attach = function(client, bufnr)
  57. -- Enable completion triggered by <c-x><c-o>
  58. vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc')
  59. -- Mappings.
  60. -- See `:help vim.lsp.*` for documentation on any of the below functions
  61. vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gD', '<cmd>lua vim.lsp.buf.declaration()<CR>', opts)
  62. vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gd', '<cmd>lua vim.lsp.buf.definition()<CR>', opts)
  63. vim.api.nvim_buf_set_keymap(bufnr, 'n', 'K', '<cmd>lua vim.lsp.buf.hover()<CR>', opts)
  64. vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gi', '<cmd>lua vim.lsp.buf.implementation()<CR>', opts)
  65. vim.api.nvim_buf_set_keymap(bufnr, 'n', '<C-k>', '<cmd>lua vim.lsp.buf.signature_help()<CR>', opts)
  66. vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>wa', '<cmd>lua vim.lsp.buf.add_workspace_folder()<CR>', opts)
  67. vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>wr', '<cmd>lua vim.lsp.buf.remove_workspace_folder()<CR>', opts)
  68. vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>wl', '<cmd>lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))<CR>', opts)
  69. vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>D', '<cmd>lua vim.lsp.buf.type_definition()<CR>', opts)
  70. vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>rn', '<cmd>lua vim.lsp.buf.rename()<CR>', opts)
  71. vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>ca', '<cmd>lua vim.lsp.buf.code_action()<CR>', opts)
  72. vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gr', '<cmd>lua vim.lsp.buf.references()<CR>', opts)
  73. vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>f', '<cmd>lua vim.lsp.buf.formatting()<CR>', opts)
  74. end
  75. local servers = { 'gopls', 'clangd', 'jedi_language_server' , 'rust_analyzer', 'tsserver' }
  76. for _, lsp in pairs(servers) do
  77. require('lspconfig')[lsp].setup {
  78. on_attach = on_attach,
  79. flags = {
  80. -- This will be the default in neovim 0.7+
  81. debounce_text_changes = 150,
  82. }
  83. }
  84. end