My NeoComplete settings
普段 NeoComplete にとてもお世話になっているので、自分の設定を晒そうと思います。
参考にしてくれる人がいれば嬉しいです。
Plugins
Shougo/neocomplete.vim · GitHub
言わずと知れた補完ブラグイン。 今回の主題
NeoBundle 'Shougo/neocomplete' if neobundle#tap('neocomplete') call neobundle#config({ \ 'depends': ['Shougo/context_filetype.vim', 'ujihisa/neco-look', 'pocke/neco-gh-issues', 'Shougo/neco-syntax'], \ }) " 起動時に有効化 let g:neocomplete#enable_at_startup = 1 " 大文字が入力されるまで大文字小文字の区別を無視する let g:neocomplete#enable_smart_case = 1 " _(アンダースコア)区切りの補完を有効化 let g:neocomplete#enable_underbar_completion = 1 let g:neocomplete#enable_camel_case_completion = 1 " ポップアップメニューで表示される候補の数 let g:neocomplete#max_list = 20 " シンタックスをキャッシュするときの最小文字長 let g:neocomplete#sources#syntax#min_keyword_length = 3 " 補完を表示する最小文字数 let g:neocomplete#auto_completion_start_length = 2 " preview window を閉じない let g:neocomplete#enable_auto_close_preview = 0 AutoCmd InsertLeave * silent! pclose! let g:neocomplete#max_keyword_width = 10000 if !exists('g:neocomplete#delimiter_patterns') let g:neocomplete#delimiter_patterns= {} endif let g:neocomplete#delimiter_patterns.ruby = ['::'] if !exists('g:neocomplete#same_filetypes') let g:neocomplete#same_filetypes = {} endif let g:neocomplete#same_filetypes.ruby = 'eruby' if !exists('g:neocomplete#force_omni_input_patterns') let g:neocomplete#force_omni_input_patterns = {} endif let g:neocomplete#force_omni_input_patterns.cpp = '[^.[:digit:] *\t]\%(\.\|->\)\w*\|\h\w*::\w*' let g:neocomplete#force_omni_input_patterns.typescript = '[^. \t]\.\%(\h\w*\)\?' " Same as JavaScript let g:neocomplete#force_omni_input_patterns.go = '[^. \t]\.\%(\h\w*\)\?' " Same as JavaScript let s:neco_dicts_dir = $HOME . '/dicts' if isdirectory(s:neco_dicts_dir) let g:neocomplete#sources#dictionary#dictionaries = { \ 'ruby': s:neco_dicts_dir . '/ruby.dict', \ 'javascript': s:neco_dicts_dir . '/jquery.dict', \ } endif let g:neocomplete#data_directory = $HOME . '/.vim/cache/neocomplete' call neocomplete#custom#source('look', 'min_pattern_length', 1) call neobundle#untap() endif
Vim には preview window という、関数定義などを表示する小さなウィンドウを出す便利な機能があります。
後述する tern_for_vim などの補完プラグインではこれが活用されています。
しかし、NeoCompleteのデフォルト設定だと、これがぴょこぴょこ出たり消えたりして鬱陶しいです。
そのため、preview window を閉じない
と書いてあるところで、一々閉じないように設定し、またずっと表示させておくのも邪魔なので、インサートモードを抜けた時に閉じるようにしています。
g:neocomplete#sources#dictionary#dictionaries
では、RubyとjQuery用の辞書ファイルを定義しています。
pocke/dicts · GitHub
定義されているメソッドとかが補完候補に出るので便利。
Shougo/context_filetype.vim · GitHub
なんだか忘れたけど入れておくと便利になるやつ。
確かMarkdownとかで他の言語が埋め込まれてる時に便利になるやつだった気がする。
ujihisa/neco-look · GitHub
英単語を補完してくれるめっちゃ便利なやつ。
めっちゃ便利なので絶対に入れるべきプラグイン。
英語でコミットメッセージ書くのとかがめっちゃ楽になる。めっちゃ便利(大切だから3回言った)
pocke/neco-gh-issues · GitHub
GitHub の Issue 番号を補完してくれる便利なやつ。
作ってみたけど、 rhysd/github-complete.vim · GitHub っていう更に便利そうなのが出ているのでそちらに乗り換えようかと思っている。
Shougo/neco-syntax · GitHub
Syntax ファイルから補完候補を抽出してくれるプラグイン。
とりあえず入れておくと便利。
osyo-manga/vim-marching · GitHub
C/C++ 用のオムニ補完ブラグイン。
C/C++ 書くことがあったので入れたのだけど、最近全く書かないので殆ど使ってない。
NeoBundleLazy 'osyo-manga/vim-marching' if neobundle#tap('vim-marching') call neobundle#config({ \ 'autoload': { \ 'filetypes': ['c', 'cpp'] \ }, \ 'depends': ['Shougo/vimproc.vim', 'osyo-manga/vim-reunions'] \ }) let g:marching_enable_neocomplete = 1 call neobundle#untap() endif
Shougo/neosnippet.vim · GitHub
スニペット補完ブラグイン。めっちゃ便利。
NeoBundle 'Shougo/neosnippet' NeoBundle 'pocke/neosnippet-snippets' NeoBundleFetch 'tekkoc/PHPSnippetsCreator' NeoBundle 'pocke/neosnippet-incomment' if neobundle#tap('neosnippet') "http://kazuph.hateblo.jp/entry/2013/01/19/193745 " <TAB>: completion. inoremap <expr><S-TAB> pumvisible() ? "\<C-p>" : "\<S-TAB>" " Plugin key-mappings. imap <silent><C-k> <Esc>:let g:neosnippet_expanding_or_jumpping = 1<CR>a<Plug>(neosnippet_expand_or_jump) smap <C-k> <Plug>(neosnippet_expand_or_jump) " SuperTab like snippets behavior. imap <expr><TAB> pumvisible() ? "\<C-n>" : neosnippet#jumpable() ? "\<Plug>(neosnippet_expand_or_jump)" : "\<TAB>" smap <expr><TAB> neosnippet#jumpable() ? "\<Plug>(neosnippet_expand_or_jump)" : "\<TAB>" " For snippet_complete marker. if has('conceal') set conceallevel=2 concealcursor=i endif " Enable snipMate compatibility feature. let g:neosnippet#enable_snipmate_compatibility = 1 let g:neosnippet#snippets_directory='~/dotfiles/snippets' AutoCmd InsertLeave * syntax clear neosnippetConcealExpandSnippets AutoCmd FileType php NeoSnippetSource ~/.vim/bundle/PHPSnippetsCreator/dist/php_functions.snip call neobundle#untap() endif
imap <C-K>
で :let g:neosnippet_expanding_or_jumpping = 1
とか変なことをしているのは、他のプラグインとの兼ね合いで NeoSnippet のジャンプ中かどうかを判定したいからです。
pocke/neosnippet-snippets · GitHub
NeoSnippet のスニペット定義レポジトリ。
本家は Shougo/neosnippet-snippets · GitHub だけど、不要なスニペットを削除するために Fork して使っている。
@p_ck_ 残念ながら、ないです。というのはどういうことかというと、スニペットは個別に読み込まれて後から統合されるので、一部を無効にできないのです。同一スニペットファイルの中でなら削除できるんですけど。
— 暗黒美夢王(deoplete dev) (@ShougoMatsu) 2015, 10月 1
tekkoc/PHPSnippetsCreator · GitHub
PHP で定義されているグローバル関数のスニペットを用意してくれるプラグイン。
PHP 書いてた時に関数多すぎてイライラしてきたので入れた。
今は幸運にも PHP を書かずに済んでいるので殆ど使っていない。
pocke/neosnippet-incomment · GitHub
// TODO:
みたいなスニペットを、言語ごとに適切なコメントの形で出してくれるプラグイン。
あったら便利かなーと思って作ってみたけど、あまりつかってない。
marijnh/tern_for_vim · GitHub
JavaScript の補完がちょっとだけ強くなるやつ。
動的型付け言語の補完の限界を感じることが出来る。
NeoBundleLazy 'marijnh/tern_for_vim' if neobundle#tap('tern_for_vim') call neobundle#config({ \ 'build': { \ 'others': 'npm install' \ }, \ 'autoload': { \ 'functions': ['tern#Complete', 'tern#Enable'], \ 'filetypes': ['javascript'] \ }, \ 'commands': [ \ 'TernDef', 'TernDoc', 'TernType', 'TernRefs', 'TernRename' \ ] \ }) let g:tern_map_keys = 0 call neobundle#untap() endif
Quramy/tsuquyomi · GitHub
NeoBundleLazy 'Quramy/tsuquyomi'
TypeScript のオムニ補完プラグイン。
これなしでTypeScript書くのはしんどい。
ちなみに、TypeScript1.5系だと激重だけどTypeScript1.6系だとめっちゃ快適になるので、1.6系と合わせて使うことをおすすめする。
以上。ブログの記事を書いているとすぐに飽きて雑になってくるので、コードを書くだけでブログ記事が出来上がるようなジェネレータをだれか作って欲しい。