Как настроить clangd с kickstart.nvim

Вопрос или проблема

Я следовал этим инструкциям:

https://github.com/nvim-lua/kickstart.nvim
https://youtu.be/m8C0Cq9Uv9o?feature=shared

Я использую Windows с gcc. И я использую Microsoft Terminal (cmd) (доступен в Microsoft Store) в качестве своего терминала. Почти всё работает хорошо, за исключением LSP clangd. Просто раскомментирование clangd={} и установка его через mason при следующем запуске не указывает clangd, где находятся библиотечные файлы, и он не может распознать <iostrem> или <bits\stdc++.h>. И я не могу понять, как правильно настроить это в этих условиях в Windows. Если кто-то ранее настраивал это с lazy.nvim с lua в Windows, любая помощь была бы замечательной. Я мог бы работать с WSL, но хотел сохранить это на нативной Windows, чтобы редактировать файлы Windows также без проблем.

Вот соответствующий код в init.lua из проекта kickstart.nvim:

      local capabilities = vim.lsp.protocol.make_client_capabilities()
      capabilities = vim.tbl_deep_extend('force', capabilities, require('cmp_nvim_lsp').default_capabilities())

      -- Включить следующие языковые серверы
      --  Вы можете добавлять/удалять любые LSP, которые хотите здесь. Они будут установлены автоматически.
      --
      --  Добавьте любую дополнительную конфигурацию переопределения в следующие таблицы. Доступные ключи:
      --  - cmd (table): Переопределение команды по умолчанию, используемой для запуска сервера
      --  - filetypes (table): Переопределение списка связанных типов файлов для сервера
      --  - capabilities (table): Переопределение полей в возможностях. Может быть использовано для отключения определенных функций LSP.
      --  - settings (table): Переопределение настроек по умолчанию, передаваемых при инициализации сервера.
      --        Например, чтобы увидеть параметры для `lua_ls`, вы можете перейти по адресу: https://luals.github.io/wiki/settings/
      local servers = {
        clangd = {},
        -- gopls = {},
        pyright = {},
        -- rust_analyzer = {},
        -- ... и так далее. Смотрите `:help lspconfig-all` для списка всех преднастроенных LSP
        --
        -- Некоторые языки (как typescript) имеют целые плагины для языков, которые могут быть полезны:
        --    https://github.com/pmizio/typescript-tools.nvim
        --
        -- Но для многих настроек LSP (`ts_ls`) будет работать отлично
        -- ts_ls = {},
        --

        lua_ls = {
          -- cmd = {...},
          -- filetypes = { ...},
          -- capabilities = {},
          settings = {
            Lua = {
              completion = {
                callSnippet="Replace",
              },
              -- Вы можете переключить ниже, чтобы игнорировать шумные предупреждения `missing-fields` от Lua_LS
              -- diagnostics = { disable = { 'missing-fields' } },
            },
          },
        },
      }

      -- Убедитесь, что вышеупомянутые серверы и инструменты установлены
      --  Чтобы проверить текущее состояние установленных инструментов и/или вручную установить
      --  другие инструменты, вы можете запустить
      --    :Mason
      --
      --  Вы можете нажать `g?` для получения справки в этом меню.
      require('mason').setup()

      -- Вы можете добавить сюда другие инструменты, которые вы хотите, чтобы Mason установил
      -- для вас, чтобы они были доступны из Neovim.
      local ensure_installed = vim.tbl_keys(servers or {})
      vim.list_extend(ensure_installed, {
        'stylua', -- Используется для форматирования кода Lua
      })
      require('mason-tool-installer').setup { ensure_installed = ensure_installed }

      require('mason-lspconfig').setup {
        handlers = {
          function(server_name)
            local server = servers[server_name] or {}
            -- Это обрабатывает переопределение только значений, явно переданных
            -- конфигурацией сервера выше. Полезно при отключении
            -- определенных функций LSP (например, отключение форматирования для ts_ls)
            server.capabilities = vim.tbl_deep_extend('force', {}, capabilities, server.capabilities or {})
            require('lspconfig')[server_name].setup(server)
          end,
        },
      }
    end,
  },

Я попробовал добавить путь к необходимым библиотечным файлам с помощью

set CPLUS_INCLUDE_PATH=C:\ProgramData\mingw64\mingw64\lib\gcc\x86_64-w64-mingw32\13.2.0;C:\ProgramData\mingw64\mingw64\lib\gcc\x86_64-w64-mingw32\13.2.0\include;C:\ProgramData\mingw64\mingw64\lib\gcc\x86_64-w64-mingw32\13.2.0\include\c++;C:\ProgramData\mingw64\mingw64\lib\gcc\x86_64-w64-mingw32\13.2.0\include\c++\x86_64-w64-mingw32

Но я получал различные ошибки, такие как: Ошибка изображение

Ответ или решение

Установка clangd с kickstart.nvim на Windows

Установка clangd в окружении на базе kickstart.nvim может вызвать определенные трудности, особенно на Windows с использованием компилятора GCC. В этом руководстве мы подробно рассмотрим шаги, необходимые для правильной конфигурации clangd, а также решение проблем с распознаванием стандартных библиотек C++.

Шаг 1: Установка необходимых компонентов

  1. Убедитесь, что у вас установлены Neovim и Mason. Если вы еще не установили эти компоненты, следуйте инструкциям на странице kickstart.nvim.

  2. Установите clangd через Mason:
    Включите clangd в конфигурацию вашего init.lua, как показано ниже:

    local servers = {
       clangd = {},  -- Включите clangd, оставив пустую таблицу для стандартной конфигурации
       ...
    }
  3. Запустите Neovim и выполните команду :Mason. Это позволит вам установить clangd и другие необходимые серверы.

Шаг 2: Указание путей к библиотекам

При использовании clangd на Windows важно правильно настроить пути к библиотекам. Вам необходимо указать CPLUS_INCLUDE_PATH, чтобы clangd мог находить необходимые заголовочные файлы. Откройте командную строку (cmd) и выполните следующую команду:

set CPLUS_INCLUDE_PATH=C:\ProgramData\mingw64\mingw64\lib\gcc\x86_64-w64-mingw32\13.2.0;C:\ProgramData\mingw64\mingw64\lib\gcc\x86_64-w64-mingw32\13.2.0\include;C:\ProgramData\mingw64\mingw64\lib\gcc\x86_64-w64-mingw32\13.2.0\include\c++;C:\ProgramData\mingw64\mingw64\lib\gcc\x86_64-w64-mingw32\13.2.0\include\c++\x86_64-w64-mingw32

Обратите внимание: пути могут отличаться в зависимости от вашей конфигурации системы и версии компилятора. Убедитесь, что указанные пути соответствуют установленной версии MinGW.

Шаг 3: Настройка clangd в init.lua

Для дальнейшей настройки clangd, вы можете добавить параметры в init.lua в блоке servers. Например:

clangd = {
    cmd = { "clangd", "--header-insertion=never" },  -- Настройте команду запуска clangd
    filetypes = { "c", "cpp", "objc", "objcpp" },
    root_dir = require('lspconfig.util').root_pattern(".git", "compile_commands.json", "compile_flags.txt"),
},

Шаг 4: Проверьте правильность установленного окружения

  1. Проверьте, установлен ли clangd: Откройте терминал и выполните команду clangd --version, чтобы убедиться, что сервер LSP установлен и работает.

  2. Использование clangd: В Neovim откройте проект C++, чтобы clangd мог автоматически начать анализировать код.

  3. Ошибки и их решение: Если вы сталкиваетесь с ошибками, связанными с отсутствующими заголовочными файлами, убедитесь, что все пути корректны и все зависимости установлены. Иногда может помочь добавление дополнительных флагов в команду clangd.

Заключение

Установка clangd с использованием kickstart.nvim на Windows требует правильного указания путей к библиотекам и настройки конфигурации в Neovim. Следуя шагам, описанным в этом руководстве, вы сможете настроить окружение так, чтобы clangd работал корректно и эффективно для вашего проекта C++. В случае возникновения трудностей, рассмотрите возможность использования альтернативных конфигураций или средств, таких как WSL, для упрощения работы с проектами на C++.

Оцените материал
Добавить комментарий

Капча загружается...