Если я вас правильно понимаю, у вас есть файл с несколькими документами JSON, каждый из которых соединен в одну строку, и теперь вы хотите красиво распечатать каждый такой документ в многострочный с отступом с jq .
То, что вы делаете с :g/^\s\+{/
, - это нахождение строк с документами JSON, а затем выполнение команды для него.Проблема в :!jq .
Как я написал, вы можете уже признать, что это :help :!cmd
, тогда как вы намеревались фильтровать текущую строку (документ JSON, распределенный по нескольким последовательным строкам, также будет работать, но требует диапазона).Команда фильтрации немного отличается;:help :range!
.
Итак, с :!jq .
Vim просто запускает внешний jq
с аргументом .
, но ничего из буфера ему не передает,Вот почему jq
просто сидит и ждет ввода, пока вы не прервете его (например, с помощью <C-c>
).
Команда :.!jq .
вместо этого передает текущую строку :.
как диапазон в команду jq
, а затем заменяет исходную строку на вывод команды, как вы хотите.Добавление этого одиночного .
исправляет вашу команду:
:g/^\s\+{/.!jq .