lsp.lua 3.2 KB

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