vim-users.jp

Hack #89: 自動補完をさらに使いこなす

Posted at 2009/10/18
このエントリーをはてなブックマークに追加

[Hack #49: ]自動補完を活用する 後編ではneocomplcacheの基本的な特徴について解説しました。ここではneocomplcacheの良くある質問について簡単に回答しようと思います。設定の参考になれば幸いです。

neocomplcacheで辞書補完をするには?

辞書ファイルへのパスは、変数g:NeoComplCache_DictionaryFileTypeListsに格納されています。 パスを設定すれば、ファイルを開いたときに自動的に読み込まれます。 例えば、私は次のように設定しています。defaultはファイルタイプに関係なく参照される辞書ファイルです。

let g:NeoComplCache_DictionaryFileTypeLists = {
            \ 'default' : '',
            \ 'vimshell' : $HOME.'/.vimshell_hist',
            \ 'scheme' : $HOME.'/.gosh_completions'
            \ }

自動補完が重い

g:NeoComplCache_KeywordCompletionStartLengthの値を増やすか、g:NeoComplCache_SkipCompletionTimeを増やす(例えば’0.3′)と少しイライラが解消されるでしょう。あまりやりすぎると、なかなか自動補完の候補が出なくなります。基本的には自動補完は重い処理なので、あまり性能の低いPCで有効にするものではありません。

Insertmodeでカーソル移動すると補完されて大変

この現象は、autocomplpop.vimでも起こります。neocomplcacheやautocomplpopは挿入モードでのカーソル位置移動をトリガーとして、補完候補をポップアップするようになっているからです。計算中にキー入力が続くと、neocomplcacheは補完をスキップしますが、挿入モードでカーソルキーを使うこと自体、Vimの使用方法として間違っています。

neocomplcacheでスニペット補完を使用するには?

まずはスニペットの展開にKey-mappingを割り当ててください。初期状態ではどのキーにも割り当てられていません。 スニペットのトリガーを補完するか直接入力してから、割り当てたスニペットの展開キーを押すことで展開されます。 展開キーを連打すると、プレースホルダの移動になります。

imap <silent>L     <Plug>(neocomplcache_snippets_expand)
smap <silent>L     <Plug>(neocomplcache_snippets_expand)

オムニ補完が重い

オムニ補完のためのキーワード設定は、変数g:NeoComplCache_OmniPatternsに格納されています。 ファイルタイプをキーとしているので、無効にしたいファイルタイプの正規表現を空にするとオムニ補完が呼ばれなくなります。 例えば、htmlのオムニ補完を無効にするためには、次のようにします。

let g:NeoComplCache_OmniPatterns['html'] = ''

他のプログラミング言語にも対応させたい

補完するためのキーワードの設定は、変数g:NeoComplCache_KeywordPatternsに格納されています。 ファイルタイプをキーとして、キーワードにマッチする正規表現を設定すれば、任意のプログラミング言語に対応します。

Vimのファイル名補完やオムニ補完の呼び出しをneocomplcache組み込みのものに置き換えたい

neocomplcacheに組み込まれているファイル名補完やオムニ補完は、クイックマッチや補完スキップに対応するなど、細かな部分で改良されています。 Vim標準の補完呼び出しを置き換えるためには、次のようにKey-mappingを定義します。

inoremap <expr><C-x><C-f>  neocomplcache#manual_filename_complete()
inoremap <expr> <C-j>  &filetype == 'vim' ? "\<C-x>\<C-v>\<C-p>" : neocomplcache#manual_omni_complete()

Vimで巨大なファイルを開くと、キャッシュ生成で待たされる

neocomplcacheはファイル読み込みを監視し、新たなファイルを開くと、自動的にキーワードをキャッシュするようになっています。 巨大なファイルの場合、このキャッシュを生成する動作が邪魔になることがあります。g:NeoComplCache_CachingLimitFileSizeの値を調節することで、巨大なファイルはキャッシュしないように設定することが可能です。初期値は1000000となっているので、約1メガバイト以上のファイルはキャッシュしません。手動でキャッシュさせるには、:NeoComplCacheCachingBufferコマンドを使用します。

補完がおかしい、クイックマッチが効かない

completeoptに問題があるのだと思います。補完動作がおかしくなるので、longestやmenuは指定しないでください。お勧めはmenuoneを指定することです。クイックマッチが正しく動作するようになります。previewを追加するかどうかはお好みで。

Shougo

もどる
blog comments powered by Disqus