我正在编辑Vim中的XML文件,然后我想用xsltproc将其转换为纯文本文件,默认情况下会将其输出到stdout(如:!xsltproc TXTRULE.XSL%)。是否可以将xsltproc输出重定向到Vim中的新选项卡而不创建任何中间文件?如何将stdout输出重定向到新的Vim选项卡?
(我试图阅读:帮助再导向和some wiki notes,但还是不能让这将是greateful对于某种简单的例子。)
我正在编辑Vim中的XML文件,然后我想用xsltproc将其转换为纯文本文件,默认情况下会将其输出到stdout(如:!xsltproc TXTRULE.XSL%)。是否可以将xsltproc输出重定向到Vim中的新选项卡而不创建任何中间文件?如何将stdout输出重定向到新的Vim选项卡?
(我试图阅读:帮助再导向和some wiki notes,但还是不能让这将是greateful对于某种简单的例子。)
要扩大lucapette的answer,你可以创建一个映射是这样的:
:map ,x :tabnew<Bar>read !xsltproc TXTRULE.XSL #
#
扩展到之前打开的缓冲区,这是您正在编辑的文件,而%
将扩展到由:tabnew
打开的新缓冲区。
必须使用<Bar>
而不是|
,否则,:map
命令将在|
处结束。
谢谢**丹尼尔**,我不知道#。但是,从我的角度来看,我可以补充一点,似乎可以用'\ |'代替'
很酷的答案我倾向于忘记'#' – lucapette
这里有两个问题:1)[永远不要使用':map'](http://learnvimscriptthehardway.stevelosh.com/chapters/05.html)(另外,你不要在运行等待模式下不需要这个映射,所以不应该使用'nnoremap'或'nnoremap' +'xnoremap')2)'#'以及不能正确处理特殊(特殊的shell)这样的字符,':execute'和'shellescape(@#,1)'是你的朋友。你最后忘了'
我使用下面查看我的计划产出
它打开旁边只有一个没有之前已经为此开了当前一个新的选项卡(用于与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>
非常感谢** lucapette **。 –
不止欢迎;) – lucapette
新|阅读!ls将打开一个新窗口,而不是一个标签 –