Вопрос или проблема
Я следовал этим инструкциям:
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: Установка необходимых компонентов
-
Убедитесь, что у вас установлены Neovim и Mason. Если вы еще не установили эти компоненты, следуйте инструкциям на странице kickstart.nvim.
-
Установите clangd через Mason:
Включитеclangd
в конфигурацию вашегоinit.lua
, как показано ниже:local servers = { clangd = {}, -- Включите clangd, оставив пустую таблицу для стандартной конфигурации ... }
-
Запустите 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: Проверьте правильность установленного окружения
-
Проверьте, установлен ли clangd: Откройте терминал и выполните команду
clangd --version
, чтобы убедиться, что сервер LSP установлен и работает. -
Использование clangd: В Neovim откройте проект C++, чтобы
clangd
мог автоматически начать анализировать код. -
Ошибки и их решение: Если вы сталкиваетесь с ошибками, связанными с отсутствующими заголовочными файлами, убедитесь, что все пути корректны и все зависимости установлены. Иногда может помочь добавление дополнительных флагов в команду
clangd
.
Заключение
Установка clangd
с использованием kickstart.nvim
на Windows требует правильного указания путей к библиотекам и настройки конфигурации в Neovim. Следуя шагам, описанным в этом руководстве, вы сможете настроить окружение так, чтобы clangd
работал корректно и эффективно для вашего проекта C++. В случае возникновения трудностей, рассмотрите возможность использования альтернативных конфигураций или средств, таких как WSL, для упрощения работы с проектами на C++.