How to redirect stdout output to a new Vim tab?

前端 未结 3 856
灰色年华
灰色年华 2021-02-07 03:07

I\'m editing an XML file in Vim, and then I want to transform it a plain-text file with xsltproc, which by default outputs to a stdout (something like : !xsltproc TXTRULE.XSL %)

相关标签:
3条回答
  • 2021-02-07 03:40

    I am using the following to view my program outputs (very useful for a makefile with a make run rule)

    It opens a new tab next to current one only if one was not already opened before for that purpose:

    fu! RedirStdoutNewTabSingle(cmd)
      let a:newt= expand('%:p') . ".out.tmp"
      tabnext
      if expand('%:p') != a:newt
        tabprevious
        exec "tabnew" . a:newt
      else
        exec "%d"
      endif
      exec 'silent r !' . a:cmd
      set nomodified
    endfunc
    
    au FileType xml noremap <buffer> <F6> :call RedirStdoutNewTabSingle("xsltproc")<CR>
    
    0 讨论(0)
  • 2021-02-07 03:54

    You can use read like in the following:

    :read !ls
    

    Obviously you should change ls with your command. If you want to open a new tab prepend tabnew with a bar to the command like:

    :tabnew|read !ls
    
    0 讨论(0)
  • 2021-02-07 03:56

    To expand on lucapette's answer, you could create a map like this:

    :map ,x :tabnew<Bar>read !xsltproc TXTRULE.XSL #
    

    # expands to the previously opened buffer, which is the file you were editing, while % would expand to the new buffer opened by :tabnew.

    <Bar> has to be used instead of |, because otherwise, the :map command would end at the |.

    0 讨论(0)
提交回复
热议问题