web-dev-qa-db-ja.com

Vimで保存時にJSONを自動フォーマットする方法

正直に言うとgoは私をだめにしています。 goを使用すると、編集者(vim)によって実施されている厳格なフォーマット標準に慣れ、ほとんど受け入れられ、チームおよび世界中のすべての人がそれに続きます。

同じ方法で保存時にJSONファイルをフォーマットしたかった。

質問:vimで保存時にjsonファイルを自動フォーマット/インデント/ lintする方法。

44
Ali

MMontuとJose Bに感謝します。これが私がやったことです。

[〜#〜] warning [〜#〜]これはバッファを上書きします。したがって、すでに構文エラーのあるjsonファイルを開くと、ファイル全体が失われます(または失われる可能性があります)。

この行を~/.vimrcに追加します

" ALi: to indent json files on save
autocmd FileType json autocmd BufWritePre <buffer> %!python -m json.tool

もちろん、マシンにpythonが必要です。

編集:この次のものは、jsonにエラーがある場合、バッファを上書きしません。それが正しい答えになりますが、私はそのことに関してVimスクリプトやシェルをよく把握していないので、幸運を感じているなら試してみることのできる実験的なものとして提示します。シェルにも依存する場合があります。警告されます。

" ALi: to indent json files on save
autocmd FileType json autocmd BufWritePre <buffer> %!python -m json.tool 2>/dev/null || echo <buffer>
8
Ali

1つのコマンドで、これを試してください:

execute '%!python -m json.tool' | w  

その後、独自のキーバインディングを追加して、より簡単なキーストロークにすることができます。もちろん、これが機能するためには、Pythonをマシンにインストールする必要があります。

70
Jose B

外部ツールの使用に熱心で、jsonで作業をしている場合は、jqを使用することをお勧めします。

https://stedolan.github.io/jq/

次に、vim内で:%!jq .を実行して、現在のバッファーをjqの出力に置き換えます。

35
Kyr

_%!python -m json.tool_

または

%!python -c "import json, sys, collections; print json.dumps(json.load(sys.stdin, object_pairs_hook=collections.OrderedDict), ensure_ascii=False, indent=4)"

これをvimrcに追加できます:

_com! FormatJSON %!python -m json.tool_

_:FormatJson_形式のjsonファイルを使用できるより

12
Pegasus

Vim.orgでJSONプラグインを検索すると、次の結果が返されました。

jdaddy.vim:JSON操作とプリティ印刷

説明には次のものがあります。

gqaj "pretty prints"(ラップ/インデント/キーのソート/その他のクリーンアップ)カーソルの下のJSONコンストラクト。

期待どおりの書式設定が行われている場合は、autocmd BufWritePre保存時にフォーマットします。

6
mMontu

Vim Autoformat

https://github.com/Chiel92/vim-autoformat

このVimプラグインは、複数の自動フォーマットおよびインデントスキームをサポートし、ファイルタイプごとにカスタムフォーマッターで拡張します。

https://github.com/Chiel92/vim-autoformat#default-formatprograms

注:

js-beautifyはこれらをデフォルトの外部ツールとして使用するため、nodejsおよびvim-autoformatをインストールする必要があります。

npm install -g js-beautify

3
Josh Peak

「vim-json-line-format」プラグインを検索し、_Normal mode_でファイルを開き、json行にカーソルを移動し、_<leader>pj_を使用して書式設定されたjsonを印刷して表示し、_<leader>wj_は、テキストを書式設定されたjsonに変更できます。無効なJSONはフォーマットできません!

0
zzuse

これが私の解決策です。 exactly "on save"の質問部分に対処しませんが、保存する前にこのアクションを実行するとエラーが出力され、保存する前に修正できます。

また、Unix Shell JSON処理ツールのゴールドスタンダードになった外部ツールjq-のみに依存しています。そして、おそらく既にインストール済みです(macOSおよびLinux/Unixのみ。WindowsでのIDKの動作)

基本的に、それはただ:

ggVG!jq '.'

これにより、JSONドキュメント全体が強調表示され、jqを介して実行され、正確性を解析して再フォーマット(インデントの修正など)が行われ、出力がVimエディターに戻されます。

ドキュメントの一部のみを解析する場合は、vまたはVを押してその部分を手動で強調表示してから実行します

!jq '.'

ここでの利点は、この方法でドキュメントのサブセクションを修正できることです。

0
JDS