Vim (Русский)/YouCompleteMe (Русский)

From ArchWiki
Состояние перевода: На этой странице представлен перевод статьи Vim/YouCompleteMe. Дата последней синхронизации: 27 декабря 2019. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

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.

  1. Установите eclimAUR из AUR (Русский).
  2. Добавьте следующие строки в ваш ~/.vimrc:
    ~/.vimrc
    let g:EclimCompletionMethod = 'omnifunc'
  3. Запустите скрипт eclimd в отдельном терминале:
    $ /usr/lib/eclipse/plugins/org.eclim_$pkgver/bin/eclimd
  4. Создайте файл .project в той же директории, где находятся Ваши Java-файлы и добавьте в этот файл следующее содержимое:
    .project
    <projectDescription>
        <name>PROJECTNAME</name>
    </projectDescription>
    
  5. Откройте Ваш Java-файл в Vim и выполните:
    :ProjectCreate . -n java

Для компиляции проекта выполните:

:ProjectBuild

Для запуска проекта выполните:

:Java

Чтобы запустить только текущий файл, выполните:

:Java %

Список доступных команд можно найти здесь.

C#

Перед началом работы с проектом на C# убедитесь, что в системе установлен пакет mono-msbuild, так как он является обязательной зависимостью Omnisharp Roslyn — движка автодополнения для C#, используемого YouCompleteMe. Более подробная информация доступна в README репозитория Omnisharp Roslyn и в данном issue на GitHub.

Примечание: Для автодополнения C# "из коробки", достаточно создать пустой файл .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

Аналогично.

Смотрите также