neocomplete.vim
さぁ、補完の時間だ!
Let's completion time!
暗黒美夢王(Shougo)
注意事項
●

●

●

このスライドには暗黒美夢王成分が大量に含まれ
ます。ネタをネタと分かる人だけが聞きましょう
ネタがわからない人はいますぐ避難するんだ!
「はやくしろっ!! 間にあわなくなってもしらん
ぞーーっ!!」
我の名は……
●

あるときは、「Vimサポーターズ」

●

またあるときは「Vimネタ職人」

●

●

またあるときは「Vimプラグイン作者」「Vimキチ○イ」
「修正しました」「鋼のメンタルを持つ男」
しかしてその実態は……
「きさま!? まさか!!」

「そう、そのまさかだ!!フハ
ハハハ…」
自己紹介(暗黒美夢王)
●

●

●

クックック……我の名は暗黒美夢王(ダークビムマス
ター)
とあるVimmerが前回の勉強会を経て闇の力に覚醒
した存在である
特技:闇の力でVimを拡張する
=> 「闇のVim」、「Vimのカオス化」

●

対義語:「光のVim」
プラグインに頼らないVimの構築術
neo-completeとは?
●

neo-completeとはバトルエディターズに登場するVim専
用のプラグインのことである

●

暗黒美夢王が愛用するneoシリーズのプラグインの一つ

●

機能『ネオ・コンプリート・フラッシュ』
メモリ上のコマンドを一つトラッシュに送る。このターン終了まで、
このプラグインをインストールしたテキストエディタの戦闘力は1.5
倍となる。この機能は1 ターンに一度のみ適用可能である

●

バトルエディターズ第二話でSublime Text3を粉砕した
超強力なプラグインだ(暗黒美夢王調べ)
neocompleteとは?
●

neocompleteとはneocomplcacheの後継として
開発された自動補完プラグインのことである

●

neocomplcacheは現在メンテナンスのみ

●

基本的な使用方法はneocomplcacheと同一

●

ただし、オプション名が異なっている

●

一部の機能が廃止されている

●

neocomplcacheよりも高速化を実現

●

残念ながら、neocomplcacheとのsource互換性
はない(重要)
なぜneocompleteを作ったの
か?
●

autocomplpopの開発が止まり、neocomplcache
は長らくライバル不在

●

しかし YouCompleteMeが登場、センセーショナル
なキャッチフレーズによりneocomplcacheの立場を
脅かすことでやる気になる

※:YouCompleteMe公式サイトより抜粋
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
既存のプラグインに対する
利点
●

高い拡張性

●

YouCompleteMeほどではないが高速

●

neocomplcacheの機能をほぼすべて持つ

●

標準で曖昧マッチ

●

キャッシュ機能の改良

●

filter機能

●

Unite.vimとのインタフェース親和性
etc...
neocomplete の
簡単な使用方法
NeoBundle “Shougo/neocomplete.vim”
let g:neocomplete#enable_at_startup = 1
neobundle.vim経由で
インストールする
●

neobundle.vimについては
前回の発表を参照
neoocmplcacheとの違い
わたし、気になります!
●

●

ベースはneocomplcacheなので、大きく使用方法が
違うわけではない
一番違うのはオプションの指定方法

g:neocomplcache_enable_at_startup→
g:neocomplete#enable_at_startup
●

詳しくはこちらを参照:
https://github.com/Shougo/neocomplete.vim/wiki/neocom
plete-migration-guide
neocompleteのsourceにつ
いて
●

sourceとはneocompleteが補完する候補の種類で
ある

●

sourceはユーザーが任意に追加できる

●

Unite.vimのsourceとほとんど同じ意味

●

neocomplcacheとは異なり、*_complete ではない
代表的なneocompleteの

source
●

buffer バッファ補完

●

dictionary ディクショナリ補完

●

syntax シンタックス補完

●

include インクルード補完

●

tag タグ補完

●

vim Vim script補完

●

file ファイル名補完

●

omni オムニ補完
曖昧マッチ機能
●

補完テキストの途中が抜けていても補完ができる

●

標準で有効

●

●

●

●

例: foobar を補完する時にfbのみ入力すれば候補に出
てくる
無効にすることもできる。無効化方法はneocompleteの
FAQを参照

neocomplcacheにも似た機能はあったがオプション
曖昧マッチで代用できるため、camel case completion,
underbar completion機能は廃止(重要)
改良されたキャッシュ
●

●

●

キャッシュの読み込みが高速化している
さらに、neocomplcacheの時のようにスペルミスを
いつまでたっても覚えていることが(ほぼ)ない!
動的にキャッシュした文字列がバッファに存在するか
どうかチェックすることにより実現
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の機能は全て無効になる
neocomplete-filters
●

unite.vimと同様にfilterという機能を用いて拡張をす
ることができる

●

matcher 候補のマッチに使用する

●

sorter 候補をソートする

●

converter 候補を変換する

●

通常はmatcher,sorter,converterの順番

●

neocomplete#custom#source({source名},
{filters})でカスタマイズ可能
代表的な filters
●

matcher_fuzzy 曖昧マッチ(デフォルト)

●

matcher_head 先頭マッチ

●

sorter_rank 選択頻度によるソート(デフォルト)

●

sorter_word アルファベット順ソート

●

sorter_length 候補の長さによるソート

●

converter_case 候補の大文字小文字自動変換(デフォルト)

●

converter_abbr 長い候補の省略(デフォルト)

●

converter_delimiter デリミタの省略(デフォルト)

●

converter_remove_next_keyword 補完文字列の後ろを見た
候補変換(デフォルト)
他のプラグインと
neocompleteの連携
●

ぶっちゃけFAQを読むべきである

●

clang_completeの設定例、jedi.vimの設定例等み
んな載っている

●

g:neocomplete#force_omni_input_patternsを
設定しなければならないことが多い
neocompleteのsource作成
●

何、neocompleteのsourceを作りたい……だと?

●

sourceの作り方はドキュメントを参照(英語)
:help neocomplete-create-source

●

sourceはneocomplcacheの時よりもunite.vimっ
ぽくなっている

●

例:gather_candidates(), filterの存在, hookの指
定方法
まったく、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を応援しています
YouCompleteMeとの違い
わたし、気になります!
●

YouCompleteMeはif_pythonに依存

●

if_pythonだけではなく、速度が必要な部分をC++モジュールで行
うために圧倒的な速度

●

非同期補完機能

●

C/C++/ObjCの補完に特化

●

jedi.vimやUltisnipsとの連携機能

●

C++モジュールがあるので拡張するのが難しい

●

ビルドが必須なのでインストールが難しい(特にWindows環境)
今後のneocomplete
●

機能の実装はほぼ終わり

●

現在はたまに出てくる問題の解決がメイン

●

良いアイディアがあれば採用されるかも知れない

●

そろそろ vim.org に公開?
–

しかし最近忙しいからな……
まとめ
●

●

●
●

neocompleteはneocomplcacheがランクアップ
したVim plugin
あのバトルエディターズでもneocompleteは活躍
している

if_lua 可愛いよ if_lua もっとみんな使おう
そういえば、auto-complete.elはどうしたのだろう
か……(遠い目)
終わり?
●
●

●

何、「今回の歌はどうしたのか」だと?
クックック……用意はしているが時間の都合上、懇
親会での披露を考えている
暗黒美夢王についてもっと知りたければ、下記ブロ
グで連載中の「バトルエディターズ」をチェックする
ことだ(現在第三話まで公開済み)

http://vinarian.blogspot.jp/
質問
●

さて、我の発表に対する質問があるだろうか?

An introduction to neocomplete