Hatena::ブログ(Diary)

kanonjiの日記 RSSフィード

2012-02-23

neocomplcacheと補完の種類についての不完全なメモ

Vimの補完を快適にするneocomplcacheプラグインを導入した - kanonjiの日記でneocomplcacheプラグインを入れてみて、Vimの補完がかなり便利になりました。元々Vimが持つ補完も、なんだか色んな種類があってよく分かってないんですが、よく分かってないままneocomplcacheが出す補完を使ってると、ずっと理解する事がなさそうなので、ちょっと調べてみました。

補足

コメントで間違いを教えてもらっています。Vimの補完を利用してるのかと思ったけど、neocomplcacheの補完はユーザ定義補完を使って、全て自前で実装していて、Vim標準の組み込み補完とは関係が無いという点が、大きく間違っていたところです。

エントリーにも追記/修正してますが、そのせいで見にくくなっちゃいました。各補完がどういう動きをするのかも、まだ良く分かってないので、その辺が分かったら改めて別エントリーに書き直したい。

f:id:kanonji:20120213023547p:image

neocomplcacheが補完候補を出す際[S]の様な、補完の種類を表してそうなシンボルがついてます。シンボルは割と色々ありますが、neocomplcache/README.md at master ? Shougo/neocomplcache ? GitHubなどから何となく分かったのと、分かってないのとがあります。全部分かるまで調べようとすると、何時まで立ってもエントリー書けずに、そのうち全部忘れちゃいそうなので、分かる範囲で書いておきます。

Vimやneocomplcacheに詳しい方、助言やヒントなどコメント貰えると助かります。

分かった補完

neocomplcacheの補完時に出るシンボル対応するVimの補完補完の種類Vim本来の補完Vim標準の組み込み補完で近い補完のコマンド
[F]ファイル補完Ctrl-X Ctrl-F or Ctrl-X Ctrl-K
[O]オムニ補完Ctrl-X Ctrl-O
[V]Vimコマンドライン補完Ctrl-X Ctrl-V
[I]インクルード補完Ctrl-X Ctrl-I

コメントなどで教えてもらった補完

neocomplcacheの補完時に出るシンボル補完の種類
[B]バッファ補完
[S]シンタックス補完
[FI]インクルードファイル補完
<Snip>スニペット補完(neocomplcacheのREADMEではRegister completionとなっている)
[Snip]スニペット補完で、プレースホルダの無いもの。逆に<Snip>はプレースホルダがあるもの

分からない補完

neocomplcacheの補完時に出るシンボル対応するVimの補完
<Snip>不明(neocomplcacheのREADMEではRegister completionとなっている)
[B]不明
[S]不明
[FI]不明
Vim本来の補完コマンド

1. 行全体 |i_CTRL-X_CTRL-L|

2. 現在のファイルのキーワード |i_CTRL-X_CTRL-N|

3. 'dictionary'のキーワード |i_CTRL-X_CTRL-K|

4. 'thesaurus'のキーワード, thesaurus-style |i_CTRL-X_CTRL-T|

5. 編集中と外部参照しているファイルのキーワード |i_CTRL-X_CTRL-I|

6. タグ |i_CTRL-X_CTRL-]|

7. ファイル名 |i_CTRL-X_CTRL-F|

8. 定義もしくはマクロ |i_CTRL-X_CTRL-D|

9. Vimのコマンドライン |i_CTRL-X_CTRL-V|

10. ユーザ定義補完 |i_CTRL-X_CTRL-U|

11. オムニ補完 |i_CTRL-X_CTRL-O|

12. スペリング補完 |i_CTRL-X_s|

13. 'complete'のキーワード |i_CTRL-N|

https://sites.google.com/site/vimdocja/insert-html#ins-completion

Vim本来の補完はCtrl-xを押してから、使いたい補完に対応したキーを、Ctrlと一緒に押して使います。分かってる[F], [O], [V]は、このキーと一致していたので、最初はneocomplcacheのシンボルはそういう事なのかと思いました。[B], [S], [FI]というシンボルに対応するキーがありません。[FI]はそもそも2文字だし<Snip>は何か括弧が違います。が、コメントにて教えて貰いましたが、neocomplcacheは補完機能を自前で実装していて、Vim標準の組み込み補完とは関係が無いそうです。

環境

vim7.3.146 (KaoriYa 20110330)
neocomplcachehttps://github.com/Shougo/neocomplcache/commit/d42d90d13ea54a1af3af27f0bb25f93ed7a1fa4e

thincathinca 2012/02/24 12:43 まず、neocomplcache は Vim 標準の組み込み補完は使っていません。ユーザ定義補完を使って、全て自前で実装しています。
なのでVimの補完と対応させようとするのは間違いです。
<Snip>は snippets_complete (最新版では独立したプラグインに分離されています https://github.com/Shougo/neocomplcache-snippets-complete )
[B] はバッファ補完
[S] はシンタックス補完
[FI] はインクルードファイル補完
です。<Snip>だけカッコが違うのがなぜかは私も知りません。

ShougoShougo 2012/02/24 13:44 こんにちは。neocomplcacheの作者です。
はい。Vim標準の組み込み補完とは全く関係がないです。

snippets_completeは<Snip>とは別に[Snip]というパターンも持っています。
両者の違いは、<Snip>はプレースホルダあり、[Snip]はプレースホルダなしです。
つまり、snippetの展開後、プレースホルダの展開が必要になるsnippetなのかを表しているのです。

kanonjikanonji 2012/02/24 17:26 thincaさん、Shougoさんコメントどうもです。

Vim標準の組み込み補完とは無関係だったんですね。
そのVimの補完について殆ど知らない上に、[F]とか[O]が対応してる風だったので、早合点しちゃいました。
ちょっと用事があるので、後で頂いたコメントを元にエントリーを修正してみます。

あと、作者の方からコメントを貰えると思ってなかったので驚きました。
neocomplcacheのお陰でVimがかなり使いやすくなりました。ありがとうございます。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/kanonji/20120223/1329982889