我正在編輯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將打開一個新窗口,而不是一個標籤 –