2011-11-27 133 views
16

我正在編輯Vim中的XML文件,然後我想用xsltproc將其轉換爲純文本文件,默認情況下會將其輸出到stdout(如:!xsltproc TXTRULE.XSL%)。是否可以將xsltproc輸出重定向到Vim中的新選項卡而不創建任何中間文件?如何將stdout輸出重定向到新的Vim選項卡?

(我試圖閱讀:幫助再導向和some wiki notes,但還是不能讓這將是greateful對於某種簡單的例子。)

回答

22

您可以在以下使用read像:

:read !ls 

顯然你應該改變你的命令ls。如果你想打開一個新的標籤預先考慮tabnew與像條命令:

:tabnew|read !ls 
+0

非常感謝** lucapette **。 –

+1

不止歡迎;) – lucapette

+0

新|閱讀!ls將打開一個新窗口,而不是一個標籤 –

3

要擴大lucapette的answer,你可以創建一個映射是這樣的:

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

#擴展到之前打開的緩衝區,這是您正在編輯的文件,而%將擴展到由:tabnew打開的新緩衝區。

必須使用<Bar>而不是|,否則,:map命令將在|處結束。

+1

謝謝**丹尼爾**,我不知道#。但是,從我的角度來看,我可以補充一點,似乎可以用'\ |'代替'':)。 –

+0

很酷的答案我傾向於忘記'#' – lucapette

+1

這裏有兩個問題:1)[永遠不要使用':map'](http://learnvimscriptthehardway.stevelosh.com/chapters/05.html)(另外,你不要在運行等待模式下不需要這個映射,所以不應該使用'nnoremap'或'nnoremap' +'xnoremap')2)'#'以及不能正確處理特殊(特殊的shell)這樣的字符,':execute'和'shellescape(@#,1)'是你的朋友。你最後忘了''嗎? – ZyX

0

我使用下面查看我的計劃產出

它打開旁邊只有一個沒有之前已經爲此開了當前一個新的選項卡(用於與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>