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

Как исправить отступы JSON в vim?

В vim отступ по умолчанию для JSON:

{
    "employees": [
    { "firstName":"John" , "lastName":"Doe" }, 
    { "firstName":"Anna" , "lastName":"Smith" }, 
    { "firstName":"Peter" , "lastName":"Jones" }
    ]
}

Но я ожидаю:

{
    "employees": [
        { "firstName":"John" , "lastName":"Doe" }, 
        { "firstName":"Anna" , "lastName":"Smith" }, 
        { "firstName":"Peter" , "lastName":"Jones" }
    ]
}

Я сделал google и пробовал некоторые плагины vim-json, но никто из них не исправил эту проблему.

4b9b3361

Ответ 1

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

  1. Сделать выбор
  2. Тип :!python -m json.tool

Ответ 2

Рекомендация

romainl - это предпочтительный способ, но иногда вам нужен довольно текст JSON с отступом внутри некоторого буфера, который не имеет типа файла json. Я использую эту приятную команду:

command! -range -nargs=0 -bar JsonTool <line1>,<line2>!python -m json.tool

Просто запустите :JsonTool, и он будет довольно печатать текущую строку. Он также может иметь диапазон:

:JsonTool
:'<,'>JsonTool
:10,25JsonTool

Если у вас нет питона или вы предпочитаете чистое решение vim, вам может быть интересен плагин Tim Pope jdaddy. Jdaddy предоставляет текстовые объекты JSON: aj и ij, а также форматирование JSON для печати печати, например. gqaj.

Ответ 3

В качестве примера вы можете отправить внешнему инструменту, если у вас есть python, вы можете отправить контент в инструмент python json, используя:

:%!python -m json.tool

Ответ 4

python -m json.tool переупорядочивает положение свойств объекта JSON, если у вас установлено node, вы можете просто использовать эту функцию:

function FormatJSON(...) 
  let code="\"
        \ var i = process.stdin, d = '';
        \ i.resume();
        \ i.setEncoding('utf8');
        \ i.on('data', function(data) { d += data; });
        \ i.on('end', function() {
        \     console.log(JSON.stringify(JSON.parse(d), null, 
        \ " . (a:0 ? a:1 ? a:1 : 2 : 2) . "));
        \ });\""
  execute "%! node -e " . code 
endfunction

Отображается на f-j в .vimrc

nmap fj :<C-U>call FormatJSON(v:count)<CR>

Вы также можете передать количество пробелов для вкладки, 2 - по умолчанию, если вы не указали.

4fj

Мой полный .vimrc находится здесь https://github.com/botverse/.dotfiles/blob/master/.vimrc

Ответ 5

gg=G - это то, что вам нужно, если вы используете vim.

Ответ 7

Если у вас есть jq (источник), вы можете использовать в командном режиме:

:%!jq .