Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ```
- return {
- "neovim/nvim-lspconfig",
- event = { "BufReadPre", "BufNewFile" },
- dependencies = {
- "hrsh7th/cmp-nvim-lsp",
- { "antosha417/nvim-lsp-file-operations", config = true },
- { "folke/neodev.nvim", opts = {} },
- },
- config = function()
- -- Установка глобальной переменной ПЕРЕД загрузкой модулей
- vim.g.mason_disable_automatic_lsp_setup = true
- -- Импорт модулей
- local lspconfig = require("lspconfig")
- local cmp_nvim_lsp = require("cmp_nvim_lsp")
- local mr = require("mason-registry") -- Для ручной установки серверов
- -- Установка LSP серверов через Mason API
- local lsp_servers = {
- "lua_ls",
- "pyright",
- "html",
- "cssls",
- "ltex",
- "jdtls",
- "hls",
- "bashls",
- "jsonls",
- "yamlls",
- }
- {
- "neovim/nvim-lspconfig",
- event = { "BufReadPre", "BufNewFile" },
- dependencies = {
- "hrsh7th/cmp-nvim-lsp",
- { "antosha417/nvim-lsp-file-operations", config = true },
- { "folke/neodev.nvim", opts = {} },
- },
- config = function()
- -- Установка глобальной переменной ПЕРЕД загрузкой модулей
- vim.g.mason_disable_automatic_lsp_setup = true
- -- Импорт модулей
- local lspconfig = require("lspconfig")
- local cmp_nvim_lsp = require("cmp_nvim_lsp")
- local mr = require("mason-registry") -- Для ручной установки серверов
- -- Установка LSP серверов через Mason API
- local lsp_servers = {
- "lua_ls",
- "pyright",
- "html",
- "cssls",
- "ltex",
- "jdtls",
- "hls",
- "bashls",
- "jsonls",
- "yamlls",
- }
- for _, server in ipairs(lsp_servers) do
- if mr.is_installed(server) then
- vim.notify(server .. " already installed", vim.log.levels.INFO)
- else
- pcall(function()
- local pkg = mr.get_package(server)
- pkg:install()
- vim.notify("Installing " .. server, vim.log.levels.INFO)
- end)
- end
- end
- -- Ключевые привязки
- local keymap = vim.keymap
- -- Автокоманды для прикрепления LSP
- vim.api.nvim_create_autocmd("LspAttach", {
- group = vim.api.nvim_create_augroup("UserLspConfig", {}),
- callback = function(ev)
- local opts = { buffer = ev.buf, silent = true }
- -- Навигация по коду
- keymap.set("n", "gR", "<cmd>FzfLua lsp_references<CR>", opts)
- keymap.set("n", "gD", vim.lsp.buf.declaration, opts)
- keymap.set("n", "gd", "<cmd>FzfLua lsp_definitions<CR>", opts)
- keymap.set("n", "gi", "<cmd>FzfLua lsp_implementations<CR>", opts)
- keymap.set("n", "gt", "<cmd>FzfLua lsp_typedefs<CR>", opts)
- -- Действия с кодом
- keymap.set({ "n", "v" }, "<leader>ca", vim.lsp.buf.code_action, opts)
- keymap.set("n", "<leader>rn", vim.lsp.buf.rename, opts)
- -- Диагностика
- keymap.set("n", "<leader>D", "<cmd>FzfLua diagnostics_workspace<CR>", opts)
- keymap.set("n", "<leader>d", vim.diagnostic.open_float, opts)
- keymap.set("n", "[d", vim.diagnostic.goto_prev, opts)
- keymap.set("n", "]d", vim.diagnostic.goto_next, opts)
- -- Документация
- keymap.set("n", "K", vim.lsp.buf.hover, opts)
- -- Управление LSP
- keymap.set("n", "<leader>rs", ":LspRestart<CR>", opts)
- end,
- })
- -- Возможности автодополнения
- local capabilities = cmp_nvim_lsp.default_capabilities()
- capabilities.offsetEncoding = { "utf-16" } -- Для корректной работы с некоторыми серверами
- -- Значки диагностики
- local signs = { Error = " ", Warn = " ", Hint = " ", Info = " " }
- for type, icon in pairs(signs) do
- local hl = "DiagnosticSign" .. type
- vim.fn.sign_define(hl, { text = icon, texthl = hl, numhl = "" })
- end
- -- Конфигурация серверов
- local servers = {
- lua_ls = {
- capabilities = capabilities,
- settings = {
- Lua = {
- runtime = { version = "LuaJIT" },
- workspace = {
- checkThirdParty = false,
- library = vim.api.nvim_get_runtime_file("", true),
- },
- completion = { callSnippet = "Replace" },
- telemetry = { enable = false },
- diagnostics = {
- globals = { "vim" },
- disable = { "missing-fields" },
- },
- },
- },
- },
- pyright = {
- capabilities = capabilities,
- settings = {
- python = {
- analysis = {
- autoImportCompletions = true,
- useLibraryCodeForTypes = true,
- diagnosticSeverityOverrides = {
- reportUnusedVariable = "warning",
- },
- },
- },
- },
- },
- html = {
- capabilities = capabilities,
- filetypes = { "html", "htmldjango" },
- },
- cssls = {
- capabilities = capabilities,
- settings = {
- css = { validate = true },
- scss = { validate = true },
- less = { validate = true },
- },
- },
- ltex = {
- capabilities = capabilities,
- filetypes = { "markdown", "tex", "text" },
- },
- }
- -- Настройка серверов
- for server_name, config in pairs(servers) do
- lspconfig[server_name].setup(config)
- end
- -- Специальные конфигурации
- lspconfig.jdtls.setup({
- capabilities = capabilities,
- cmd = { "jdtls" },
- root_dir = lspconfig.util.root_pattern("build.gradle", "pom.xml", ".git"),
- filetypes = { "java" },
- })
- lspconfig.hls.setup({
- capabilities = capabilities,
- filetypes = { "haskell", "lhaskell" },
- settings = {
- haskell = {
- formattingProvider = "ormolu",
- plugin = {
- rename = { crossModule = true },
- },
- },
- },
- })
- -- Глобальные обработчики LSP
- vim.lsp.handlers["textDocument/hover"] = vim.lsp.with(vim.lsp.handlers.hover, {
- border = "rounded",
- })
- vim.lsp.handlers["textDocument/signatureHelp"] = vim.lsp.with(vim.lsp.handlers.signature_help, {
- border = "rounded",
- })
- -- Автокоманда для обновления серверов при изменении конфигурации
- vim.api.nvim_create_autocmd("BufWritePost", {
- pattern = "*.lua",
- callback = function()
- vim.schedule(function()
- vim.cmd("LspRestart")
- end)
- end,
- })
- end,
- ```
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement