:enew
lets me create a new buffer and :.!
lets me dump the output of an external command to that buffer. Can I combine the tw
:vnew | read !<command>
Execute the command and place the output in a new vertically split buffer. Use #
to pass the path of the current buffer to the command. e.g.
:vnew | read !python -m json.tool #
Using python's JSON module to format the working JSON file.
Alternatively, the AsyncCommand plugin can be used to "run any program and load results in a split" buffer asynchronously.
Additional reading:
:h new
:h read
'|' is used to chain commands together in vim. so
:enew | .! <command>
should do what you want
:.!
actually pipes the current line through the external command, possibly losing the line. You may wish to use :r !<command>
—Note the space before the !
. I often use :0r !cmd
so that the output is inserted at the start of the buffer.