lsp.lua 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. local lsp = require('lsp-zero')
  2. lsp.preset('recommended')
  3. lsp.ensure_installed({
  4. 'tsserver',
  5. 'gopls',
  6. 'rust_analyzer',
  7. 'clangd',
  8. 'lua_ls',
  9. })
  10. local capabilities = vim.lsp.protocol.make_client_capabilities()
  11. capabilities.textDocument.completion.completionItem.snippetSupport = true
  12. require 'lspconfig'.emmet_ls.setup ({
  13. capabilities = capabilities,
  14. filetypes = {"css", "html", "javascript"},
  15. init_options = {
  16. html = {
  17. options = {
  18. ["bem.enabled"] = true,
  19. },
  20. },
  21. }
  22. })
  23. require 'lspconfig'.lua_ls.setup {
  24. settings = {
  25. Lua = {
  26. runtime = {
  27. -- Tell the language server which version of Lua you're using (most likely LuaJIT in the case of Neovim)
  28. version = 'LuaJIT',
  29. },
  30. diagnostics = {
  31. -- Get the language server to recognize the `vim` global
  32. globals = { 'vim' },
  33. },
  34. workspace = {
  35. -- Make the server aware of Neovim runtime files
  36. library = vim.api.nvim_get_runtime_file("", true),
  37. },
  38. -- Do not send telemetry data containing a randomized but unique identifier
  39. telemetry = {
  40. enable = false,
  41. },
  42. },
  43. },
  44. }
  45. local cmp = require 'cmp'
  46. local cmp_select = { behavior = cmp.SelectBehavior.Select }
  47. cmp.setup({
  48. mapping = {
  49. ["<C-e>"] = cmp.mapping.close(),
  50. ["<C-p>"] = cmp.mapping.select_prev_item(cmp_select),
  51. ["<C-n>"] = cmp.mapping.select_next_item(cmp_select),
  52. ["<C-d>"] = cmp.mapping.scroll_docs(-4),
  53. ["<C-f>"] = cmp.mapping.scroll_docs(4),
  54. ["<C-y>"] = cmp.mapping.confirm {
  55. select = true,
  56. },
  57. ["<C-space>"] = cmp.mapping.complete(),
  58. ["<Tab>"] = cmp.mapping(cmp.mapping.select_next_item(), { "i", "s" }),
  59. ["<S-Tab>"] = cmp.mapping(cmp.mapping.select_prev_item(), { "i", "s" }),
  60. },
  61. sources = {
  62. { name = "nvim_lsp" },
  63. { name = "path" },
  64. { name = "luasnip" },
  65. { name = "buffer", keyword_length = 5 },
  66. },
  67. snippet = {
  68. expand = function(args)
  69. require('luasnip').lsp_expand(args.body)
  70. end,
  71. },
  72. experimental = {
  73. native_menu = false
  74. }
  75. })
  76. lsp.set_preferences({
  77. suggest_lsp_servers = false,
  78. sign_icons = {
  79. error = 'E',
  80. warn = 'W',
  81. hint = 'H',
  82. info = 'I'
  83. }
  84. })
  85. local opts = { noremap = true, silent = true }
  86. lsp.on_attach(function(client, bufnr)
  87. vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc')
  88. -- Mappings.
  89. -- See `:help vim.lsp.*` for documentation on any of the below functions
  90. vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gD', '<cmd>lua vim.lsp.buf.declaration()<CR>', opts)
  91. vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gd', '<cmd>lua vim.lsp.buf.definition()<CR>', opts)
  92. vim.api.nvim_buf_set_keymap(bufnr, 'n', 'K', '<cmd>lua vim.lsp.buf.hover()<CR>', opts)
  93. vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gi', '<cmd>lua vim.lsp.buf.implementation()<CR>', opts)
  94. vim.api.nvim_buf_set_keymap(bufnr, 'n', '<C-k>', '<cmd>lua vim.lsp.buf.signature_help()<CR>', opts)
  95. vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>wa', '<cmd>lua vim.lsp.buf.add_workspace_folder()<CR>', opts)
  96. vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>wr', '<cmd>lua vim.lsp.buf.remove_workspace_folder()<CR>', opts)
  97. vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>wl',
  98. '<cmd>lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))<CR>', opts)
  99. vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>D', '<cmd>lua vim.lsp.buf.type_definition()<CR>', opts)
  100. vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>rn', '<cmd>lua vim.lsp.buf.rename()<CR>', opts)
  101. vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>ca', '<cmd>lua vim.lsp.buf.code_action()<CR>', opts)
  102. vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gr', '<cmd>lua vim.lsp.buf.references()<CR>', opts)
  103. vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>e', '<cmd>lua vim.diagnostic.open_float()<CR>', opts)
  104. vim.keymap.set('n', '<space>f', function()
  105. vim.lsp.buf.format { async = true }
  106. end, opts)
  107. end)
  108. lsp.setup()
  109. vim.diagnostic.config({
  110. virtual_text = true
  111. })