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

Jump to content

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

From ArchWiki
< Vim (Русский)
Состояние перевода: На этой странице представлен перевод статьи 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[ссылка недействительна: package not found] из 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 %

Список доступных команд можно найти здесь[устаревшая ссылка 2025-08-16 ⓘ].

### 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

Аналогично.

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

- Страница на Github
- Домашняя страница проекта[устаревшая ссылка 2020-08-06 ⓘ]

Category:

- Text editors (Русский)

Hidden categories:

- Pages with broken package links
- Pages with dead links

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