An introduction to neocomplete

14,406 views

Published on

An introduction to neocomplete by DarkVim Master(暗黒美夢王)

Published in: Technology

An introduction to neocomplete

  1. 1. neocomplete.vim さぁ、補完の時間だ! Let's completion time! 暗黒美夢王(Shougo)
  2. 2. 注意事項 ● ● ● このスライドには暗黒美夢王成分が大量に含まれ ます。ネタをネタと分かる人だけが聞きましょう ネタがわからない人はいますぐ避難するんだ! 「はやくしろっ!! 間にあわなくなってもしらん ぞーーっ!!」
  3. 3. 我の名は…… ● あるときは、「Vimサポーターズ」 ● またあるときは「Vimネタ職人」 ● ● またあるときは「Vimプラグイン作者」「Vimキチ○イ」 「修正しました」「鋼のメンタルを持つ男」 しかしてその実態は……
  4. 4. 「きさま!? まさか!!」 「そう、そのまさかだ!!フハ ハハハ…」
  5. 5. 自己紹介(暗黒美夢王) ● ● ● クックック……我の名は暗黒美夢王(ダークビムマス ター) とあるVimmerが前回の勉強会を経て闇の力に覚醒 した存在である 特技:闇の力でVimを拡張する => 「闇のVim」、「Vimのカオス化」 ● 対義語:「光のVim」 プラグインに頼らないVimの構築術
  6. 6. neo-completeとは? ● neo-completeとはバトルエディターズに登場するVim専 用のプラグインのことである ● 暗黒美夢王が愛用するneoシリーズのプラグインの一つ ● 機能『ネオ・コンプリート・フラッシュ』 メモリ上のコマンドを一つトラッシュに送る。このターン終了まで、 このプラグインをインストールしたテキストエディタの戦闘力は1.5 倍となる。この機能は1 ターンに一度のみ適用可能である ● バトルエディターズ第二話でSublime Text3を粉砕した 超強力なプラグインだ(暗黒美夢王調べ)
  7. 7. neocompleteとは? ● neocompleteとはneocomplcacheの後継として 開発された自動補完プラグインのことである ● neocomplcacheは現在メンテナンスのみ ● 基本的な使用方法はneocomplcacheと同一 ● ただし、オプション名が異なっている ● 一部の機能が廃止されている ● neocomplcacheよりも高速化を実現 ● 残念ながら、neocomplcacheとのsource互換性 はない(重要)
  8. 8. なぜneocompleteを作ったの か? ● autocomplpopの開発が止まり、neocomplcache は長らくライバル不在 ● しかし YouCompleteMeが登場、センセーショナル なキャッチフレーズによりneocomplcacheの立場を 脅かすことでやる気になる ※:YouCompleteMe公式サイトより抜粋
  9. 9. neocompleteを使用するには ● neocompleteはif_luaを利用しているので、if_luaが 有効になったvimが必要(7.3.885以上) ● Windows: Kaoriya版のVimを使う ● Linux: 自分でコンパイルする ● Mac: brew を使う $ brew install macvim --with-cscope --with-lua --HEAD ● 詳しくはneocompleteのドキュメントを参照 – :help neocomplete-install
  10. 10. 既存のプラグインに対する 利点 ● 高い拡張性 ● YouCompleteMeほどではないが高速 ● neocomplcacheの機能をほぼすべて持つ ● 標準で曖昧マッチ ● キャッシュ機能の改良 ● filter機能 ● Unite.vimとのインタフェース親和性 etc...
  11. 11. neocomplete の 簡単な使用方法 NeoBundle “Shougo/neocomplete.vim” let g:neocomplete#enable_at_startup = 1 neobundle.vim経由で インストールする ● neobundle.vimについては 前回の発表を参照
  12. 12. neoocmplcacheとの違い わたし、気になります! ● ● ベースはneocomplcacheなので、大きく使用方法が 違うわけではない 一番違うのはオプションの指定方法 g:neocomplcache_enable_at_startup→ g:neocomplete#enable_at_startup ● 詳しくはこちらを参照: https://github.com/Shougo/neocomplete.vim/wiki/neocom plete-migration-guide
  13. 13. neocompleteのsourceにつ いて ● sourceとはneocompleteが補完する候補の種類で ある ● sourceはユーザーが任意に追加できる ● Unite.vimのsourceとほとんど同じ意味 ● neocomplcacheとは異なり、*_complete ではない
  14. 14. 代表的なneocompleteの source ● buffer バッファ補完 ● dictionary ディクショナリ補完 ● syntax シンタックス補完 ● include インクルード補完 ● tag タグ補完 ● vim Vim script補完 ● file ファイル名補完 ● omni オムニ補完
  15. 15. 曖昧マッチ機能 ● 補完テキストの途中が抜けていても補完ができる ● 標準で有効 ● ● ● ● 例: foobar を補完する時にfbのみ入力すれば候補に出 てくる 無効にすることもできる。無効化方法はneocompleteの FAQを参照 neocomplcacheにも似た機能はあったがオプション 曖昧マッチで代用できるため、camel case completion, underbar completion機能は廃止(重要)
  16. 16. 改良されたキャッシュ ● ● ● キャッシュの読み込みが高速化している さらに、neocomplcacheの時のようにスペルミスを いつまでたっても覚えていることが(ほぼ)ない! 動的にキャッシュした文字列がバッファに存在するか どうかチェックすることにより実現
  17. 17. omni sourceとforce omni ● g:neocomplete#omni#input_patternsで指定するomni sourceはneocompleteの一部 – – filters, 選択候補の学習 – ● neocompleteの機能が全て使用可能 Vimのオムに補完のエミュレーションなので、一部の補完関数との 相性が悪い(ruby_complete, clang_complete等) g:neocomplete#force_omni_input_patternsで指定する と、neocomplete経由ではなく、直接オムニ補完を呼び出す – 全てのオムニ補完が利用可能 – neocompleteの機能は全て無効になる
  18. 18. neocomplete-filters ● unite.vimと同様にfilterという機能を用いて拡張をす ることができる ● matcher 候補のマッチに使用する ● sorter 候補をソートする ● converter 候補を変換する ● 通常はmatcher,sorter,converterの順番 ● neocomplete#custom#source({source名}, {filters})でカスタマイズ可能
  19. 19. 代表的な filters ● matcher_fuzzy 曖昧マッチ(デフォルト) ● matcher_head 先頭マッチ ● sorter_rank 選択頻度によるソート(デフォルト) ● sorter_word アルファベット順ソート ● sorter_length 候補の長さによるソート ● converter_case 候補の大文字小文字自動変換(デフォルト) ● converter_abbr 長い候補の省略(デフォルト) ● converter_delimiter デリミタの省略(デフォルト) ● converter_remove_next_keyword 補完文字列の後ろを見た 候補変換(デフォルト)
  20. 20. 他のプラグインと neocompleteの連携 ● ぶっちゃけFAQを読むべきである ● clang_completeの設定例、jedi.vimの設定例等み んな載っている ● g:neocomplete#force_omni_input_patternsを 設定しなければならないことが多い
  21. 21. neocompleteのsource作成 ● 何、neocompleteのsourceを作りたい……だと? ● sourceの作り方はドキュメントを参照(英語) :help neocomplete-create-source ● sourceはneocomplcacheの時よりもunite.vimっ ぽくなっている ● 例:gather_candidates(), filterの存在, hookの指 定方法
  22. 22. まったく、if_luaは最高だぜ! ● if_luaはif_pythonと比較するとマイナー ● neocomplete, unite.vim等のプラグインがif_luaを優遇するこ とで、少しずつ知られてきた(クックック……計画通り) ● if_luaはif_pythonよりも高速、消費メモリ量も少ない、実行時 オーバーヘッドもほぼ無い ● Vim scriptと連携することで機能の少なさをカバー – Vim scriptの知識は無駄にならない、Vim scriptたんは可愛い(真理) ● if_pythonの場合、全てをPythonで書くことになりがち ● Vim scriptを愛する暗黒美夢王はif_luaを応援しています
  23. 23. YouCompleteMeとの違い わたし、気になります! ● YouCompleteMeはif_pythonに依存 ● if_pythonだけではなく、速度が必要な部分をC++モジュールで行 うために圧倒的な速度 ● 非同期補完機能 ● C/C++/ObjCの補完に特化 ● jedi.vimやUltisnipsとの連携機能 ● C++モジュールがあるので拡張するのが難しい ● ビルドが必須なのでインストールが難しい(特にWindows環境)
  24. 24. 今後のneocomplete ● 機能の実装はほぼ終わり ● 現在はたまに出てくる問題の解決がメイン ● 良いアイディアがあれば採用されるかも知れない ● そろそろ vim.org に公開? – しかし最近忙しいからな……
  25. 25. まとめ ● ● ● ● neocompleteはneocomplcacheがランクアップ したVim plugin あのバトルエディターズでもneocompleteは活躍 している if_lua 可愛いよ if_lua もっとみんな使おう そういえば、auto-complete.elはどうしたのだろう か……(遠い目)
  26. 26. 終わり? ● ● ● 何、「今回の歌はどうしたのか」だと? クックック……用意はしているが時間の都合上、懇 親会での披露を考えている 暗黒美夢王についてもっと知りたければ、下記ブロ グで連載中の「バトルエディターズ」をチェックする ことだ(現在第三話まで公開済み) http://vinarian.blogspot.jp/
  27. 27. 質問 ● さて、我の発表に対する質問があるだろうか?

×