YouCompleteMe (сокращённо YCM) — это плагин для автодополнения в Vim (Русский). YCM поддерживает следующие языки программирования:
- C/C++/Objective-C/Objective-C++
- Python
- C#
- Go
- Rust
- Java
- JavaScript
- TypeScript
- Другие языки (Ruby, PHP и т.д.) посредством использования omnicompletion.
Установка
Установите пакет vim-youcompleteme-gitAUR из AUR (Русский). Для ручной установки Вы можете воспользоваться официальной инструкцией.
В качестве альтернативы, можно поместить файл compile_commands.json в корневую директорию проекта.
Настройка
C/C++
YCM использует скрипт .ycm_extra_conf.py для установки параметров проекта, необходимых для автодополнения и проверки синтаксиса. Ниже приводится краткое описание основной конфигурации. Подробности и расширенные параметры смотрите в официальной документации.
Структура файла конфигурации
Пример файла .ycm_extra_conf.py может быть найден в [1]. Вы должны сохранить копию этого файла в папке проекта и настроить его в соответствие своим потребностям.
Наиболее важными параметрами (в минимальной конфигурации) являются опции -x и --std, которые соответственно указывают язык, используемый в проекте, и следуемый стандарт. -x может быть установлен для C и C++, а общими значениями для --std являются --std=c89, --std=c99, --std=c11, --std=c14 и их соответствующие версии в C++. Стандартный параметр определяет предупреждения и ошибки при синтаксической проверке (например, строка, закомментированная с помощью // будет отмечена как неразрешенная в C89, но не в следующих версиях стандарта.
Сторонний скрипт и vim-плагин для автоматического создания .ycm_extra_conf.py доступен в данном репозитории.
Расположение файла конфигурации
YCM выполняет поиск файла .ycm_extra_conf.py в каталоге исходного файла и в его родительских директориях. Если файл конфигурации не найден, то функции YCM не будут доступны. Глобальный файл настроек, используемый, когда локальный файл не был найден, может быть выбран путём добавления в ~/.vimrc следующих строк:
~/.vimrc
let g:ycm_global_ycm_extra_conf = '/путь/до/файла'
Так как .ycm_extra_conf.py является python-скриптом, то в целях безопасности каждый раз будет запрашиваться разрешение на его выполнение. Такое поведение можно отключить, добавив следующие строки в ~/.vimrc:
~/.vimrc
let g:ycm_confirm_extra_conf = 0
Для более безопасного решения, при включённом подтверждении можно определить белый/чёрный список с помощью шаблонов, назначаемых в переменной ycm_extra_conf_globlist. Файл попадает в чёрный список, если соответствует шаблону, начинающемуся с !. Если файл соответствует шаблону не начинающемуся с восклицательного знака, то он попадает в белый список. Запрос на подтверждение выполнения файла конфигурации возникает если файл не соответствует ни одному из шаблонов. Правила (шаблоны) сопоставляются в порядке очереди и применяется первое совпадение. Возможно использование следующих масок в шаблонах:
- * — любые символы
- ? — любой один символ
- [последовательность] — любой символ в последовательности
- [!последовательность] — любой символ не входящий в последовательность
Пример:
~/.vimrc
let g:ycm_extra_conf_globlist = ['~/dev/*','!~/*']
Любой файл в каталоге ~/dev попадает в белый список, любой файл в каталоге ~/ попадает в чёрный список. И, согласно очереди приоритетности шаблонов, любой файл в каталоге ~/, кроме каталога ~/dev, попадёт в чёрный список.
Java
У YCM есть встроенная поддержка сервера jdt.ls, который можно установить с помощью опции --java-completer при запуске install.py.
Java (альтернативный вариант)
Для автодополнения Java должен присутствовать файл проекта и активен headless-сервер Eclim.
- Установите eclimAUR из AUR (Русский).
-
Добавьте следующие строки в ваш
~/.vimrc:~/.vimrc
let g:EclimCompletionMethod = 'omnifunc'
-
Запустите скрипт
eclimdв отдельном терминале:$ /usr/lib/eclipse/plugins/org.eclim_$pkgver/bin/eclimd
-
Создайте файл
.projectв той же директории, где находятся Ваши Java-файлы и добавьте в этот файл следующее содержимое:.project
<projectDescription> <name>PROJECTNAME</name> </projectDescription> -
Откройте Ваш Java-файл в Vim и выполните:
:ProjectCreate . -n java
Для компиляции проекта выполните:
:ProjectBuild
Для запуска проекта выполните:
:Java
Чтобы запустить только текущий файл, выполните:
:Java %
Список доступных команд можно найти здесь.
C#
Перед началом работы с проектом на C# убедитесь, что в системе установлен пакет mono-msbuild, так как он является обязательной зависимостью Omnisharp Roslyn — движка автодополнения для C#, используемого YouCompleteMe. Более подробная информация доступна в README репозитория Omnisharp Roslyn и в данном issue на GitHub.
.sln в текущем или родительском каталоге. Далее описывается, как вручную создать полноценный рабочий проект C#.Самый простой способ создать проект — установить monodevelop-stableAUR[ссылка недействительна: package not found]. В остальной части раздела объясняется, как вручную создать проект C#, который также может быть создан из командной строки с помощью xbuild.
Сперва создайте файл .sln. Части кода, выделенные полужирным курсивом, замените на свои названия.
SOLUTION.sln
Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
Project("{00000000-0000-0000-0000-000000000000}") = "PROJECT", "PROJECT\PROJECT.csproj", "{11111111-1111-1111-1111-111111111111}"
EndProject
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x86 = Debug|x86
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{11111111-1111-1111-1111-111111111111}.Debug|x86.ActiveCfg = Debug|x86
{11111111-1111-1111-1111-111111111111}.Debug|x86.Build.0 = Debug|x86
{11111111-1111-1111-1111-111111111111}.Release|x86.ActiveCfg = Release|x86
{11111111-1111-1111-1111-111111111111}.Release|x86.Build.0 = Release|x86
EndGlobalSection
EndGlobal
Затем создайте директорию PROJECT и там создайте файл с названием PROJECT.csproj:
PROJECT/PROJECT.csproj
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
<ProductVersion>10.0.0</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{11111111-1111-1111-1111-111111111111}</ProjectGuid>
<OutputType>Exe</OutputType>
<RootNamespace>PROJECT</RootNamespace>
<AssemblyName>PROJECT</AssemblyName>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug</OutputPath>
<DefineConstants>DEBUG;</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<ConsolePause>false</ConsolePause>
<PlatformTarget>x86</PlatformTarget>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
<DebugType>full</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release</OutputPath>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<ConsolePause>false</ConsolePause>
<PlatformTarget>x86</PlatformTarget>
</PropertyGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<ItemGroup>
<Compile Include="HelloWorld.cs" />
<Compile Include="CSharpFile1.cs" />
<Compile Include="CSharpFile2.cs" />
</ItemGroup>
</Project>
Поместите свои C#-файлы в директорию PROJECT и не забудьте вручную добавить их в конец файла PROJECT/PROJECT.csproj.
Теперь YouCompleteMe должен работать для файлов C# в этом каталоге и вы можете собирать проект. Чтобы скомпилировать проект из Vim, выполните следующую команду:
:!xbuild
Решение проблем
Помните, что для создания списка завершения строк YouCompleteMe может потребоваться некоторое время.
Для диагностики доступны следующие команды:
-
:messages— показывает предыдущие сообщения об ошибках в Vim :YcmDiags:YcmDebugInfo
E764: Option 'omnifunc' is not set
Если это происходит, то Вы забыли поместить следующие строки в ~/.vimrc:
~/.vimrc
let g:EclimCompletionMethod = 'omnifunc'
Нет автодополнения в Java-файлах
Убедитесь, что служба eclimd запущена:
$ ps -ax|grep eclimd
и что у Вас есть файлы проекта.
URLError: <urlopen error [Errno 111] Connection refused>
Эта ошибка появляется, когда у Вас нет файла .sln в текущей или родительской директориях.
RuntimeError: Error starting OmniSharp server: no solutionfile found
Аналогично.
Смотрите также
- Страница на Github
- Домашняя страница проекта[устаревшая ссылка 2020-08-06 ⓘ]