VimでJSONファイルを100倍快適に作成する方法

  • 41
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

タイトルは釣りです.

JavaScriptを使った開発をしていると、とかくJSONによる設定ファイルが頻出しますよね.
NPMのpackage.jsonとか, Bower.json, .jshintrc, tsconfig.json等々です.

それぞれの設定ファイルについて, どのようなkeyが必要なのか, 値には何が書けるのか, 暗記していますか?
僕は覚えていません. 毎度毎度, ググったり, リファレンスページに行ったりしてました.

npm initbower init で雛型は生成してくれるものの, 全てのkeyが載っている訳ではないですし...
(JSONにコメントが許されないのが辛いですね).

そこでJSON Schemaです.
JSON Schemaを使えば, keyや値(と言ってもenum程度ですが)の補完情報を生成出来ます.
誰かがそういうVim pluginを作って無いかなと思って探したのですが, 見つからなかったので自分で作りました.
Quramy/vison .

visonはJSON Schema Store に登録されているschemaファイルを利用します.
冒頭で列挙したpackage.json(NPM), bower.json/bowerrc(Bower), .jshintrc(JSHint), tsconfig.json(TypeScript)等、よく使うようなschemaはSchema Storeに登録されているため, visonをインストールするだけで利用可能になります.

2015.07.15追記

JSON Schemaの本家公式サイトに、このpluginのリンクが記載されていました. 「公認」と言ってしまってよいのだろうか...?

Install

Schema StoreからJSONをDLする都合上, gitコマンドがインストールされていることが前提です.

僕はNeoBundle使いなので, NeoBundleでのインストール方法を書いておきます.
下記2行を書いて, :NeoBundleInstall を実行してください.

.vimrc
NeoBundle 'Shougo/unite.vim'
NeoBundle 'Quramy/vison'

uniteは必須ではありませんが, visonはuniteのsourceにもなっているので, あると便利です.

visonのインストールが完了したら, Vimから :VisonSetup コマンドを実行してください.
Schema StoreのJSONをvisonのキャッシュフォルダにダウンロードします.
(:VisonSetup は次回以降のVim起動時は実行不要です)

使い方

Schemaの適用

例えば, NPMのpackage.jsonを作成するとしましょう.
Vimでpackage.jsonを開いたら, :Vison package.json のコマンドを実行してください.
このコマンドにより, 編集中のバッファに対して, visonが管理しているschemaファイル"package.json"が適用されます.
バッファにschemaが適用されると, 補完(omni-complete)が使えるようになります.
keyの入力中に <Ctrl-x><Ctrl-o> をタイプすると, 入力可能なkeyが補完されます.
capt_comp.png

自動適用

.vimrcに下記のように記載することで, schemaを自動的に適用することができます.

.vimrc
autocmd BufRead,BufNewFile package.json Vison
autocmd BufRead,BufNewFile .bowerrc Vison bowerrc.json

:Vison コマンドはバッファのbasenameがschema名と一致している場合, 引数を省略できます. 上記のpackage.jsonに対するautocmdについては, 引数を省略しています.

Unite

uniteを使ってschemaを適用することも可能です. :Unite vison を実行すると, visonにキャッシュされたschemaファイルの一覧が表示されます.
選択してEnterをタイプすることで, :Visonコマンドと同様に, カレントバッファに選択したschemaを適用できます.
capt_unite.png

独自schemaの登録

自分でschemaファイルを作ったり, Schema Storeに存在しないshcemaファイルをダウンロードしたりした場合に, visonに登録することができます.
登録したいschemaファイルをVimで開き, :VisonRegisterSchema コマンドを実行してください.

そのschemaファイルのbasenameをschema名として, visonに登録されます. schema名を明示的に指定したい場合は, :VisonRegisterSchema スキーマ名 のように引数として指定してください.
一度登録したschemaは, Schema Storeからキャッシュしたファイルと同様に :Visonコマンドや Unite vison上から選択可能です.

なお, 現状, 自分で登録したschemaファイルを削除する仕組みがありません.
デフォルトでは, :VisonRegisterSchema で登録したファイルは ${HOME}/.cache/vison/default フォルダにコピーされます.
削除する場合は, このディレクトリからファイルを削除してください.

その他

  • 実は補完の仕組みはまだ完璧でなかったりします. anyOf のような複雑なschemaについてはfeature workということで...
  • もう少し細かい内容については, :help vison.txt でドキュメントを参照してください(こちらも書き掛けですけど...)