Vim を未だに使いこなせていない初心者 Vimmer です。
色々プラグインは入れているのですが、使いやすくしようとキーバインドを追加した所、2つのプラグインの設定がコンフリクトしてたので解決方法です。まあ、今は Sublime Text 3 をprprしてるわけですが。
この2つのプラグインについて
文字数稼ぎのためにプラグインの紹介等を示します。
NeoComplete
このプラグインは入力補完を行ってくれます。
同ファイル中に過去に入力した語を補完してくれる、という機能です。スニペット挿入は NeoSnippet の仕事ですね。
このプラグインはこのように Lua & 新しいバージョンが必要なので、Mac の人は brew とかでやっちゃいましょう。
$ brew install vim --with-lua # Macにバンドルされている物とは別にVimをインストール$ brew reinstall vim --with-lua # 既に上のコマンドを実行済みの人はこれで再インストール
インストール後は PATH の設定もお忘れなく。例えば、brew の人は、
export PATH="/usr/local/bin":$PATH
をシェルの設定ファイルに書いておきましょう。
前身である NeoComplcache の設定も、neoomplcache
をneocomplete
に変えるだけでほとんどそのまま引き継げるのでいいですよね〜
SmartInput
これは、閉じ括弧の自動挿入及びインデント挿入を行ってくれるプラグインです。
inoremap { {}<Left>
とかやっている人は多いと思いますが(僕もこのプラグインを見つけるまではそうでした)、この設定じゃある条件下では望む動作をしてくれませんよね〜
これをいい感じにやってくれるのが本プラグインです。
そしてコンフリクトへ・・・
キーバインドコンフリクトまでの経緯
NeoComplete は補完候補の選択・確定のキー設定が面倒でした。なので、僕は Enter キーに候補決定を、Delete キー( Windows で言うところの BackSpace キー )にパレットクローズ&文字削除を、C-h にパレットクローズのみを割り当てました。
すると、なんということでしょう。SmartInput で入力後、インデントが効いてません。
注・コードがやけに見苦しいですがご了承ください。
どういう設定をしてたか
" <BS>で閉じて文字削除
imap <expr><BS> pumvisible() ?
\ neocomplete#smart_close_popup() . "\<BS>"
\ : "\<BS>"" <C-h> で閉じる
imap <expr><C-h>
\ neocomplete#smart_close_popup()" <CR> で候補選択、改行する" ポップアップがないときには改行する
imap <expr><CR> pumvisible() ?
\ neocomplete#close_popup()
\ : "\<CR>"
と言った設定です。コード的には(条件式) ? (条件式が真の時の動作) : (条件式が偽の時の動作)
で全く問題ないように思えますが、どうやら偽の時の動作<\CR>
や<\BS>
が上手く言っていない模様。
解決策
SmartInput にmap_to_trigger
という関数を発見。これを使って、.vimrcに以下の内容をNeoBundle
のcall neobundle#end()
の下に記述してください。
call smartinput#map_to_trigger('i','<Plug>(smartinput_BS)',
\ '<BS>',
\ '<BS>')call smartinput#map_to_trigger('i','<Plug>(smartinput_C-h)',
\ '<BS>',
\ '<C-h>')call smartinput#map_to_trigger('i','<Plug>(smartinput_CR)',
\ '<Enter>',
\ '<Enter>')
上から、delete、C-h、Enter 用の設定です。
ほんで、さっきの記述を次のように置き換える。
" <BS> で閉じて文字削除
imap <expr><BS>
\ neocomplete#smart_close_popup() . "\<Plug>(smartinput_BS)"" <C-h> で閉じる
imap <expr><C-h>
\ neocomplete#smart_close_popup()" <CR> で候補を選択し改行する" ポップアップがないときには改行する
imap <expr><CR> pumvisible() ?
\ neocomplete#close_popup() : "\<Plug>(smartinput_CR)"
参考にしたサイト
http://d.hatena.ne.jp/tacahiroy/20110927/1326981522
http://qiita.com/todashuta/items/bdad8e28843bfb3cd8bf