正直に言うとgo
は私をだめにしています。 go
を使用すると、編集者(vim)によって実施されている厳格なフォーマット標準に慣れ、ほとんど受け入れられ、チームおよび世界中のすべての人がそれに続きます。
同じ方法で保存時にJSONファイルをフォーマットしたかった。
質問:vimで保存時にjsonファイルを自動フォーマット/インデント/ lintする方法。
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>
1つのコマンドで、これを試してください:
execute '%!python -m json.tool' | w
その後、独自のキーバインディングを追加して、より簡単なキーストロークにすることができます。もちろん、これが機能するためには、Pythonをマシンにインストールする必要があります。
外部ツールの使用に熱心で、jsonで作業をしている場合は、jq
を使用することをお勧めします。
https://stedolan.github.io/jq/
次に、vim内で:%!jq .
を実行して、現在のバッファーをjqの出力に置き換えます。
_%!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ファイルを使用できるより
Vim.orgでJSONプラグインを検索すると、次の結果が返されました。
説明には次のものがあります。
gqaj
"pretty prints"(ラップ/インデント/キーのソート/その他のクリーンアップ)カーソルの下のJSONコンストラクト。
期待どおりの書式設定が行われている場合は、autocmd BufWritePre
保存時にフォーマットします。
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
「vim-json-line-format」プラグインを検索し、_Normal mode
_でファイルを開き、json行にカーソルを移動し、_<leader>pj
_を使用して書式設定されたjsonを印刷して表示し、_<leader>wj
_は、テキストを書式設定されたjsonに変更できます。無効なJSONはフォーマットできません!
これが私の解決策です。 exactly "on save"の質問部分に対処しませんが、保存する前にこのアクションを実行するとエラーが出力され、保存する前に修正できます。
また、Unix Shell JSON処理ツールのゴールドスタンダードになった外部ツールjq
-のみに依存しています。そして、おそらく既にインストール済みです(macOSおよびLinux/Unixのみ。WindowsでのIDKの動作)
基本的に、それはただ:
ggVG!jq '.'
これにより、JSONドキュメント全体が強調表示され、jq
を介して実行され、正確性を解析して再フォーマット(インデントの修正など)が行われ、出力がVimエディターに戻されます。
ドキュメントの一部のみを解析する場合は、v
またはV
を押してその部分を手動で強調表示してから実行します
!jq '.'
ここでの利点は、この方法でドキュメントのサブセクションを修正できることです。