Vimを変態にしてみた
このエントリは、変態アドベントカレンダー2012の4日目です。一日目は@backpaper0さんの「ノムリッシュJavaで厨二プログラミング」でした。
いよいよ12月になりアドベントカレンダーシーズンに入りましたが、みなさんブログ書いてますか?
まだアドベントカレンダーに参加していない方は、是非参加しましょう。
自分の持ってる暗黙的なノウハウを外化する絶好の機会です。
とはいえ、ブログ記事を書くのって結構大変ですよね。
しかし、我々ITエンジニアは日々ソースコードを書きまくっている経験から、「記述を効率化する術」を持っているはずです。
そう、コード補完です!
今回は、協力な補完機能を提供してくれるvimプラグインのNeoCompleCacheとNeoSnippetを紹介しつつ、さらに変態アドベントカレンダー向けに補完設定を作ってみます。
Vimmerな変態の方も、変態なVimmerの方も、Vimmerでない変態の方も、ぜひご活用ください。
下準備
NeoCompleCacheとNeoSnippetはプレフィクスにNeoとついている事からわかるように、どちらもShougoさんによるVimプラグインです。
非常に強力な補完機能でvimによる作業を支援してくれます。
もともとはNeoCompleCacheだけだったのですが、バージョンを重ねるごとに機能が追加されていき、NeoCompleCacheのバージョン7からそれぞれ別のPluginに分割されました。
国産プラグインなので日本語のインストール手順はそろっているだろうと思ったら、あらまぁ無いじゃないですか!しかも、NeoCompleCacheとNeoSnippetでGitHubに書いてあるインストール手順がズレてる。もういっそ全部まとめてまるっと手順を書いちゃいます。
プラグインの取得
とりあえず、NeoSnippet公式のインストール方法に従って、NeoBundleをインストールして、NeoBundle経由でNeoCompleCacheとNeoSnippetをインストールします。
NeoBundleのインストール方法については、こちらにまとめました。
で、NeoBundleがインストールできてさえしまえば後は簡単です。
.vimrcに以下を追記して、
NeoBundle 'Shougo/neocomplcache.git' NeoBundle 'Shougo/neosnippet.git'
vimを立ち上げて次のコマンドを実行するだけ
:NeoBundleInstall
これで、NeoCompleCacheとNeoSnippetがインストールできます。
お手軽ですね。
設定
インストールできたら、それぞれの設定です。
次の内容を.vimrcに追記したらOKです。
本当はいろいろ設定できるのですが、とりあえず最低限の設定だけ。
"-------------------------------------------------------------------------- " neocomplcache let g:neocomplcache_enable_at_startup = 1 " Enable omni completion. Not required if they are already set elsewhere in .vimrc autocmd FileType css setlocal omnifunc=csscomplete#CompleteCSS autocmd FileType html,markdown setlocal omnifunc=htmlcomplete#CompleteTags autocmd FileType javascript setlocal omnifunc=javascriptcomplete#CompleteJS
"-------------------------------------------------------------------------- " neosnippet " Plugin key-mappings. imap <C-k> <Plug>(neosnippet_expand_or_jump) smap <C-k> <Plug>(neosnippet_expand_or_jump) " SuperTab like snippets behavior. imap <expr><TAB> neosnippet#expandable() ? "\<Plug>(neosnippet_expand_or_jump)" : pumvisible() ? "\<C-n>" : "\<TAB>" smap <expr><TAB> neosnippet#expandable() ? "\<Plug>(neosnippet_expand_or_jump)" : "\<TAB>" " For snippet_complete marker. if has('conceal') set conceallevel=2 concealcursor=i endif
いよいよvimを変態にする
VimにHentaiファイルタイプを認識させる
では、ブログ記事作成を便利にするsnipet作成に入りましょう。
今回は、textファイルを補完するために、.txtの拡張子のファイルをhentaiファイルタイプとして扱います。
ファイルタイプをvimに登録するには、.vim以下にftdetectフォルダを作り、そこにファイルタイプ判別のvimスクリプトを追加します。
今回は、下記のファイルを追加しました。
これで、vimは.txtを拡張子に持つファイルを開いたときにファイルタイプをhentaiファイルタイプとして認識してくれます。
vimにHentai辞書を追加する
NeoCompleCacheは、ユーザ定義の辞書ファイルを追加する事ができ、追加した辞書ファイルを元に単語補完を行う事が出来ます。
今回は、適当に変態アドベントカレンダーに登場しそうな単語と変態アドベントカレンダー参加者の名前を登録したhentai.dictを作りました。
辞書ファイルのパスは自由に設定出来るので、今回はとりあえず.vim以下にdictフォルダを作成し、その中に保存しました。
僕がatndから抜き出すタイミングで名前が載ってない人がいるかもしれません。
別に、変態認定してないわけではないです。
この変態辞書を NeoCompleCache に読み込ませるために.vimrcに下記を追記します。
"辞書の登録 let g:neocomplcache_dictionary_filetype_lists = { \ 'default' : '', \ 'hentai' : $HOME.'/.vim/dict/hentai.dict', \ }
これでvimを起動すると、変態辞書による補完が有効になります。
hを入力して
vimに変態Snippetを登録する
さらに、vimを変態アドベントカレンダー向けにカスタマイズしていきましょう。
NeoSnippet を利用する事で、スニペット補完が出来るようになります。
スニペット補完とは、よく書く定型文のひな形を用意しておいて、その一部だけを書き換える事で記述効率をあげる補完手法です。
Snippetについてはこちらの記事が詳しいです。
Vimのsnippetについてあまり知らなかったので設定してみたら便利過ぎてつらい
今回は、変態アドベントカレンダーのテンプレートを登録するために、hentai.snipファイルを作成します。
.vimフォルダ以下にsnippetsフォルダを作って、このhentai.snipファイルを保存します。
このファイルを読み込むための.vimrcの設定はこちら
" スニペットファイルの保存ディレクトリのパスを登録 let g:neosnippet#snippets_directory='~/.vim/bundle/snipmate-snippets/snippets'
これで、変態アドベントカレンダーのひな形が登録出来ました。
haと入力して
更に、