YouCompletteMe

15685 ワード

原文: http://blog.marchtea.com/archives/161#rd?sukey=fc78a68049a14bb2ba33c15948d34749e1eb616df07efe977573d59996ea9b63dc82be61d5771f948f5d8f01a917acd7
 
このプラグインを初めて聞いたのですが、偶然に他人のブログを見ました。このプラグインの名前を聞きました。訓練期間中にインストールを完成するつもりでしたが、ネットがあまり力がなくて、家に帰りました。準備作業を始めた時、このプラグインは簡単にインストールできないと分かりました。(この方面の内容については、他の記事を参照してください)しかし、総報酬があります。インストール後はこのプラグインを使います。
このプラグインの違いは何ですか?
 
YouCompletteMeの特別なところ
語義に基づいて補完する
周知のように、Vimはテキストエディタである。つまり、テキストの内容が何であるかにかかわらず、その基本的な作業はテキストを編集することである。Vimはプログラマによって使用された後、IDEと同じ作業を徐々に負担され、テキスト自動補完(e.acpomnicppcompleter)、コードチェック(Syntastic)などが行われる。
テキストの自動補完という機能には、主に二つの実現方法があります。
  • テキストに基づく
  • 私たちがよく使うomnicppcompleteracp、vimが持っているc-x, c-nの実現方式はテキストに基づいています。もっと分かりやすい言い方は、つまり1つの文字です。
    当てる
    テキストによる正規表現のマッチングは、生成されたtags(ctagsを用いて生成される)に基づいて自動的に補完される効果がある。
  • 語義に基づく
  • 名前の通り、ソースファイルを分析し、文法的に分析して補完します。ソースファイルを分析するので、意味に基づいた補完は正確にできます。しかし、これは明らかにvimではあり得ません。また、長年にわたって発展してきました。文法の解析が非常に難しいため、適切なツールが現れませんでした。clang/llvmYouCompleteMeに基づいて構築されている。
    統合は複数のプラグインを実現しました。
  • clangCommplete
  • AutoComppPop
  • スーパーtab
  • neocomplcache
  • Syntic(同様の機能は、c/c++/obj-cコードのみ)
  • サポート言語
  • c
  • c++
  • obj-c
  • python
  • 他の言語については、vim設定のclang/llvmを呼び出してマッチングさせるので、omnifuncphpなどの言語もサポートされている。
    既知の*javascript--同前for_vimがあります。 * ruby/java—eclim
    効果図を使う
    使用感
  • はIDEと同じで、自動補完します。
  • rubyのファイルに基づいて補完する
  • .悪くしなくてもtags
  • を生成します。
  • 補足は正確で、速度も速くて、遅延がないです。
  • は、tagsのようなジャンプをサポートしています。定義された場所にジャンプし、使用場所
  • にジャンプします。
  • エラーメッセージがスマートで、本当にシルクのように柔らかくて、入力しないでください。include強制検出
  • です。
    インストール
    多くのメリットを説明しました。インストールといえば、以前の他のvimプラグインとは違って、YCMはコンパイル型のプラグインです。ダウンロードが終わったら、手動でコンパイルしてから使えるようになります。他のプラグインに対応すると、Vimのファイルを該当フォルダに捨てるだけでいいです。YCMを使うのは難しいです。
    取り付け準備
  • 最新版のVim(7.3.5+)は、コンパイル時に+pythonフラグを追加します。
  • cmake(macはhomebrewによってインストールされ、:w、uuntuはvim --versionによってインストールされてもよい)
  • は、vimを管理するプラグイン
  • をインストールするvundleプラグインをインストールする。
    macでクイックインストールbrew install cmakeに下記のコードを追加します。sudo apt-get install cmake保存終了後にvimを開き、正常モードで入力します。.vimrcBundle 'Valloric/YouCompleteMe'を待ってYouCompletteMeをインストールしました。
    コンパイルインストールを行います。:BundleInstallc-familyの補完が必要でなければ、vundleを除去できます。cd ~/.vim/bundle/YouCompleteMe
    ./install --clang-completer
    の補完が必要ならば、--clang-completerを追加してください。
    通常、YCMはclangのカバンをダウンロードします。もしすでにあったら、システムc#を使ってもいいです。
    このようにインストールが完了しました。vimを開けて、もしYCMがコンパイルされていないというヒントがなかったら、インストールが成功したと説明します。
    手動でコンパイルしてインストールします
    インストールされたスクリプトはいつでも使いやすいというわけではなく、少なくとも私にとってはこのようなものです。インストールが終わったら問題が発生しました。issue铉809.--omnisharp-completerでインストールが完了または使用されています。--system-libclang最新の倉庫を取得し、:BundleInstallを使用して倉庫の完全性を確認した後、インストールプロセスを開始する。
  • 最新のclangバイナリファイルYCM要求git clone --recursive https://github.com/Valloric/YouCompleteMe.gitバージョン>3.2をダウンロードします。一般的には最新のダウンロード.
  • です。
  • python-devをインストールします。(uuntuではgit submodule update --init --recursiveを使用します。macではデフォルトで提供します。そうでなければcommand line toolsをインストールしてください。)
  • コンパイル
    cd ~ mkdir ycm_build cd ycm_build cmake -G "Unix Makefiles" -DPATH_TO_LLVM_ROOT=~/ycm_temp/llvm_root_dir . ~/.vim/bundle/YouCompleteMe/cpp make ycm_support_libs
  • ここで注意したいのは、~/ycmuutemp/llvmuroot udirに含まれているのは、第1のステップでダウンロードした圧縮パケットから解凍された内容(clangを含む)です。  sudo apt-get install python-devなどのファイル)
    このように完成して、YCMの提供する完全に見劣りがしないことを始めます。大型IDEの提供する自動補完機能に負けないでしょう。
    設定
    多くのvimプラグインと違って、YCMはまずコンパイルが必要です。また、配置が必要です。vimが起動した後、YCMは現在のパスと上位のパスのincludeを探します。
    一般的には、binディレクトリの下にデフォルトのテンプレートを置きます。その後、別の項目によって、現在のディレクトリの下に.ycm_extra_conf.pyをコピーします。
    # This file is NOT licensed under the GPLv3, which is the license for the rest # of YouCompleteMe. # # Here's the license text for this file: # # This is free and unencumbered software released into the public domain. # # Anyone is free to copy, modify, publish, use, compile, sell, or # distribute this software, either in source code form or as a compiled # binary, for any purpose, commercial or non-commercial, and by any # means. # # In jurisdictions that recognize copyright laws, the author or authors # of this software dedicate any and all copyright interest in the # software to the public domain. We make this dedication for the benefit # of the public at large and to the detriment of our heirs and # successors. We intend this dedication to be an overt act of # relinquishment in perpetuity of all present and future rights to this # software under copyright law. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. # IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR # OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR # OTHER DEALINGS IN THE SOFTWARE. # # For more information, please refer to <http://unlicense.org/> import os import ycm_core # These are the compilation flags that will be used in case there's no # compilation database set (by default, one is not set). # CHANGE THIS LIST OF FLAGS. YES, THIS IS THE DROID YOU HAVE BEEN LOOKING FOR. flags = [ '-Wall', '-Wextra', #'-Werror', #'-Wc++98-compat', '-Wno-long-long', '-Wno-variadic-macros', '-fexceptions', '-stdlib=libc++', # THIS IS IMPORTANT! Without a "-std=<something>" flag, clang won't know which # language to use when compiling headers. So it will guess. Badly. So C++ # headers will be compiled as C headers. You don't want that so ALWAYS specify # a "-std=<something>". # For a C project, you would set this to something like 'c99' instead of # 'c++11'. '-std=c++11', # ...and the same thing goes for the magic -x option which specifies the # language that the files to be compiled are written in. This is mostly # relevant for c++ headers. # For a C project, you would set this to 'c' instead of 'c++'. '-x', 'c++', '-I', '.', '-isystem', '/usr/include', '-isystem', '/usr/local/include', '-isystem', '/Library/Developer/CommandLineTools/usr/include', '-isystem', '/Library/Developer/CommandLineTools/usr/bin/../lib/c++/v1', ] # Set this to the absolute path to the folder (NOT the file!) containing the # compile_commands.json file to use that instead of 'flags'. See here for # more details: http://clang.llvm.org/docs/JSONCompilationDatabase.html # # Most projects will NOT need to set this to anything; you can just change the # 'flags' list of compilation flags. Notice that YCM itself uses that approach. compilation_database_folder = '' if os