Подтвердить что ты не робот

Как автоматически форматировать JSON при сохранении в Vim

Честно говоря, go испортил меня. С go я привык иметь строгий стандарт форматирования, который исполняется моим редактором (vim), и его почти принимают и сопровождают все остальные в команде и во всем мире.

Я хотел форматировать файлы JSON, чтобы сохранить тот же путь.

Вопрос: Как автоматически форматировать/отступы/lint json файлы при сохранении в vim.

4b9b3361

Ответ 1

Спасибо mMontu и Jose B, вот что я в итоге сделал:

ПРЕДУПРЕЖДЕНИЕ, это перезапишет ваш буфер. Поэтому, если вы открываете json файл, который уже имеет синтаксическую ошибку, вы потеряете весь файл (или можете его потерять).

Добавьте эту строку в свой ~/.vimrc

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

вам нужно иметь python на вашей машине, конечно.

РЕДАКТИРОВАТЬ: этот следующий не должен перезаписывать ваш буфер, если у вашего json есть ошибка. Это делает правильный ответ, но поскольку я не очень хорошо разбираюсь в Vim script или оболочке, я представляю его как экспериментальную вещь, которую вы можете попробовать, если вам повезет. Это может зависеть и от вашей оболочки. Вас предупреждают.

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

Ответ 2

В одной команде попробуйте следующее:

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

Затем вы можете добавить собственное связывание ключей, чтобы сделать его более простым нажатием клавиши. Конечно, для этого вам необходимо установить Python на вашем компьютере.

Ответ 3

Если вы заинтересованы в использовании внешнего инструмента и выполняете некоторую работу с json, я бы предложил использовать jq:

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

Затем вы можете выполнить :%!jq . внутри vim, который заменит текущий буфер с выводом jq.

Ответ 4

%!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

чем вы можете использовать json файлы формата :FormatJson

Ответ 5

Поиск плагинов JSON на vim.org дал следующее:

jdaddy.vim: манипулирование JSON и красивая печать

В описании есть следующее:

gqaj "pretty prints" (wraps/indents/sorts keys/otherwise cleans up) the JSON construct under the cursor.

Если он выполняет ожидаемое форматирование, вы можете создать autocmd BufWritePre для форматирования при сохранении.

Ответ 6

Vim Autoformat

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

Существует этот плагин Vim, который поддерживает несколько автоматических форматов и отступов, а также расширяет пользовательские форматы для каждого типа файлов.

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

Примечание:

Вам нужно будет иметь nodejs и js-beautify, установленные как vim-autoformat, используемые в качестве внешнего инструмента по умолчанию.

npm install -g js-beautify

Ответ 7

вы можете найти плагин "vim-json-line-format", открыть файл в Normal mode, переместить курсор на строку json, использовать <leader>pj, чтобы отобразить форматированный json, напечатав его, используйте <leader>wj может изменить текст на форматированный json. Неверный json не может форматироваться!

Ответ 8

Вот мое решение. Он не совсем соответствует части вопроса "при сохранении", но если вы выполните это действие перед сохранением, он выдаст ошибки, которые можно исправить перед сохранением.

Кроме того, это зависит только от одного внешнего инструмента - jq - который стал золотым стандартом инструментов обработки JSON в оболочке Unix. И который вы, вероятно, уже установили (только для MacOS и Linux/Unix; узнайте, как это будет вести себя в Windows)

В основном это просто:

ggVG!jq '.'

Это выделит весь документ JSON, а затем пропустит его через jq, который просто проанализирует его на предмет корректности, переформатирует его (например, исправит любые отступы и т.д.) И выведет результат обратно в редактор Vim.

Если вы хотите проанализировать только часть документа, вы можете выделить эту часть вручную, нажав v или V, а затем запустить

!jq '.'

Преимущество в том, что вы можете исправить подразделы вашего документа таким образом.