Как перенаправить вывод stdout на новую вкладку Vim? - программирование
Подтвердить что ты не робот

Как перенаправить вывод stdout на новую вкладку Vim?

Я редактирую XML файл в Vim, а затем хочу преобразовать его в текстовый файл с xsltproc, который по умолчанию выводит на stdout (что-то вроде:! xsltproc TXTRULE.XSL%). Можно ли перенаправить этот вывод xsltproc на новую вкладку в Vim без создания промежуточных файлов?

(Я пробовал читать: help redir и некоторые заметки wiki, но все равно не могу получить его. Было бы приветствовать какой-то простой пример. )

4b9b3361

Ответ 1

Вы можете использовать read, как в следующем:

:read !ls

Очевидно, вам следует изменить ls с помощью вашей команды. Если вы хотите открыть новую вкладку, добавьте tabnew с помощью строки в следующую команду:

:tabnew|read !ls

Ответ 2

Чтобы расширить на lucapette answer, вы можете создать такую ​​карту:

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

# расширяется до ранее открытого буфера, который является файлом, который вы редактировали, а % будет расширяться до нового буфера, открытого :tabnew.

<Bar> должен использоваться вместо |, потому что в противном случае команда :map заканчивается на |.

Ответ 3

Я использую следующее для просмотра моих программных выходов (очень полезно для make файла с правилом make-запуска)

Он открывает новую вкладку рядом с текущей, только если она еще не была открыта для этой цели:

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>