はじめに
JSON文字列を整形して表示するというエントリを見て、quickrun
を使わなくてももっと手軽な方法があるのでは、と思ったのが発端。
試してみたらあっさりと成功したので共有したい。
quickrun
を使わずに整形する方法
1. 'equalprog'
と={motion}
を使う
={motion}
は整形をするためのコマンドだと思われがちだが、ヘルプを読めば分かるが外部プログラムでフィルタするためのコマンドである。
{motion}
で指定した範囲を'equalprog'
に指定したプログラムでフィルタし、{motion}
で指定した範囲をプログラムの実行結果で置き換えてくれる。
グローバルに設定してしまうと少し困ることになるので、setlocal
でバッファローカルに設定する。
:setl equalprog=jq\ \".\"
jq
に渡す引数まで含めるためにエスケープが必要となる。
その後バッファ全体を整形したいのであればgg=G
、指定範囲だけjq
で整形したければビジュアルモードで整形したい範囲を選択し、=
するとjq
で整形される。
JSファイルやjsonファイルを編集中に有効としたい場合は vimrc
にこう書くとよい。
au FileType javascript setl ep=jq\ \".\"
au FileType json setl ep=jq\ \".\"
問題
quickrun
と違い、jq
に任意のオプションを渡すことが出来ない。
渡したければ都度'equalprog'
の設定をする必要がある。
2. !{motion}{filter}
を使う
こちらは設定すら不要である。
バッファ全体を整形したいのであればgg!G
、指定範囲だけ整形したければビジュアルモードで整形したい範囲を選択して!
とすると、フォーカスがコマンドラインに移るのでjq "."
と入力してEnterするとjq
で整形される。
都度jq
コマンドを入力するのでコマンド一発とはならないがこちらであればjq
に任意の引数を渡すことも出来る。