Upload
shougo
View
9.679
Download
1
Embed Size (px)
DESCRIPTION
An introduction to neocomplete by DarkVim Master(暗黒美夢王)
Citation preview
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/neocomplete-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の一部
– neocompleteの機能が全て使用可能
– filters, 選択候補の学習
– 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/
質問
● さて、我の発表に対する質問があるだろうか?