lsp.lua 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. local lsp = require('lsp-zero')
  2. lsp.preset('recommended')
  3. lsp.ensure_installed({
  4. 'tsserver',
  5. 'eslint',
  6. 'sumneko_lua',
  7. 'gopls',
  8. 'rust_analyzer',
  9. 'clangd',
  10. 'jedi_language_server'
  11. })
  12. -- Fix Undefined global 'vim'
  13. lsp.configure('sumneko_lua', {
  14. settings = {
  15. Lua = {
  16. diagnostics = {
  17. globals = { 'vim' }
  18. }
  19. }
  20. }
  21. })
  22. local cmp = require'cmp'
  23. local cmp_select = {behavior = cmp.SelectBehavior.Select}
  24. cmp.setup({
  25. mapping = {
  26. ["<C-e>"] = cmp.mapping.close(),
  27. ["<C-p>"] = cmp.mapping.select_prev_item(cmp_select),
  28. ["<C-n>"] = cmp.mapping.select_next_item(cmp_select),
  29. ["<C-d>"] = cmp.mapping.scroll_docs(-4),
  30. ["<C-f>"] = cmp.mapping.scroll_docs(4),
  31. ["<C-y>"] = cmp.mapping.confirm {
  32. select = true,
  33. },
  34. ["<C-space>"] = cmp.mapping.complete(),
  35. ["<Tab>"] = cmp.mapping(cmp.mapping.select_next_item(), { "i", "s" }),
  36. ["<S-Tab>"] = cmp.mapping(cmp.mapping.select_prev_item(), { "i", "s" }),
  37. },
  38. sources = {
  39. { name = "nvim_lsp" },
  40. { name = "path" },
  41. { name = "luasnip" },
  42. { name = "buffer", keyword_length = 5 },
  43. },
  44. snippet = {
  45. expand = function(args)
  46. require('luasnip').lsp_expand(args.body)
  47. end,
  48. },
  49. experimental = {
  50. native_menu = false
  51. }
  52. })
  53. local opts = { noremap=true, silent=true }
  54. lsp.on_attach(function(client, bufnr)
  55. vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc')
  56. -- Mappings.
  57. -- See `:help vim.lsp.*` for documentation on any of the below functions
  58. vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gD', '<cmd>lua vim.lsp.buf.declaration()<CR>', opts)
  59. vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gd', '<cmd>lua vim.lsp.buf.definition()<CR>', opts)
  60. vim.api.nvim_buf_set_keymap(bufnr, 'n', 'K', '<cmd>lua vim.lsp.buf.hover()<CR>', opts)
  61. vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gi', '<cmd>lua vim.lsp.buf.implementation()<CR>', opts)
  62. vim.api.nvim_buf_set_keymap(bufnr, 'n', '<C-k>', '<cmd>lua vim.lsp.buf.signature_help()<CR>', opts)
  63. vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>wa', '<cmd>lua vim.lsp.buf.add_workspace_folder()<CR>', opts)
  64. vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>wr', '<cmd>lua vim.lsp.buf.remove_workspace_folder()<CR>', opts)
  65. vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>wl', '<cmd>lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))<CR>', opts)
  66. vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>D', '<cmd>lua vim.lsp.buf.type_definition()<CR>', opts)
  67. vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>rn', '<cmd>lua vim.lsp.buf.rename()<CR>', opts)
  68. vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>ca', '<cmd>lua vim.lsp.buf.code_action()<CR>', opts)
  69. vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gr', '<cmd>lua vim.lsp.buf.references()<CR>', opts)
  70. vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>f', '<cmd>lua vim.lsp.buf.formatting()<CR>', opts)
  71. vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>e', '<cmd>lua vim.diagnostic.open_float()<CR>', opts)
  72. end)
  73. lsp.setup()