読者です 読者をやめる 読者になる 読者になる

JavaScriptでもvim-endwiseのように補完する

Vim JavaScript

rubyでif文やメソッド定義のdefを使うときにendを補完してくれるvimプラグインvim-endwiseをとても重宝していた.

JavaScriptでif文を書く時に

f:id:alice345:20140301225332p:plain

となってしまうのがとても億劫で嫌だった(<CR>押して,上に戻って更にtabを押す手間にイライラしていた)ので解決方法を探したところ

Vim で Ruby の def end とかを自動入力する vim-endwise を vim-smartinput で実装してみた - 反省はしても後悔はしない

上記のブログがHITしたので,説明してあるとおりにvimrcを設定した

1. vimrcに以下を記述

NeoBundle "kana/vim-smartinput"
NeoBundle "cohama/vim-smartinput-endwise"

call smartinput_endwise#define_default_rules()

また,この時

NeoBundle "tpope/vim-endwise"

の記述がある場合はその部分を削除する

2.NeoBundleInstall

vimで以下のコマンドを入力

NeoBundleInstall

これでjsでruby同様,いい感じの括弧補完とインデントになる.

f:id:alice345:20140301230950p:plain

【以下,私のハマったところ】

このような設定にするので重要なところが

  • vim-endwiseを使用しない

という点.参考にさせて頂いたブログにもあるように,vim-endwiseはvim-smartinputと競合してしまうようなので,その解決策としてid:cohamaさんがvim-smartinput-endwiseというプラグインを作成した模様.

私の場合,vimrcからvim-endwiseの部分の記述を削除したにも関わらず思い通りに動作しなくて「!???!?!!!?!?」となっていたのだが,どうも私の場合NeoBundleを導入する前にすでにvim-endwiseをプラグインとして使用していたせいでNeoBundle "tpope/vim-endwise"を削除したにも関わらず競合が起こってしまうという状況だった.

もし上記の手順のようにしたにも関わらず競合が起こってしまった場合は,.vim/pluginフォルダにvim-endwiseプラグイン無いかどうか確かめてみると良いかもしれない.そのためにvim上で

scriptnames

とコマンドを使うとvimがロードしているプラグイン一覧が見ることができる.

f:id:alice345:20140301232031p:plain

 

このことを教えてくれたやままさん(@int_remain)ありがとうございました〜