2011-11-27 8 views
16

मैं विम में एक एक्सएमएल फ़ाइल संपादित कर रहा हूं, और फिर मैं इसे xsltproc के साथ एक सादे-पाठ फ़ाइल को बदलना चाहता हूं, जो डिफ़ॉल्ट रूप से stdout (कुछ xsltproc TXTRULE.XSL%) के रूप में आउटपुट करता है। क्या यह xsltproc आउटपुट को किसी भी इंटरमीडिएट फाइलों के बिना विम में एक नए टैब पर रीडायरेक्ट करना संभव है?stdout आउटपुट को एक नए विम टैब पर रीडायरेक्ट कैसे करें?

उत्तर

22

आप निम्न में तरह read उपयोग कर सकते हैं:

(यह नहीं मिल सकता है मदद Redir और some wiki notes, लेकिन अभी भी सरल उदाहरण के कुछ प्रकार के लिए greateful होगा मैं पढ़ने के लिए कोशिश की है।।):

:read !ls 

स्पष्ट रूप से आपको अपने आदेश के साथ ls बदलना चाहिए।

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

# के लिए विस्तारित:

:tabnew|read !ls 
+0

धन्यवाद बहुत, ** लुकापेट **। –

+1

स्वागत से अधिक;) – lucapette

+0

नया | पढ़ें! Ls एक टैब के बजाय एक नई विंडो में खुल जाएगा –

3

lucapette के answer पर विस्तार करने के लिए, अगर आप इस तरह एक नक्शा बना सकते हैं: आप एक नया टैब खोलने के लिए चाहते हैं की तरह आदेश के लिए एक बार के साथ tabnew पहले जोड़ें पहले खोला गया बफर, जो फ़ाइल आप संपादित कर रहे थे, जबकि %:tabnew द्वारा खोले गए नए बफर में विस्तारित होगा।

<Bar>| के स्थान पर किया है, क्योंकि अन्यथा, :map आदेश | पर खत्म होगा है।

+1

धन्यवाद ** डैनियल **, मुझे # के बारे में पता नहीं था। हालांकि, मेरी तरफ से, मैं जोड़ सकता हूं कि ऐसा लगता है कि कोई ' ':) के बजाय' \ | 'का उपयोग कर सकता है। –

+0

कूल उत्तर मैं '#' – lucapette

+1

के बारे में भूल जाता हूं, आपको यहां दो समस्याएं हैं: 1) [कभी भी 'मानचित्र' का उपयोग न करें] (http://learnvimscriptthehardway.stevelosh.com/chapters/05.html) (इसके अतिरिक्त, आप डॉन नहीं करते ऑपरेटर-लंबित मोड में इस मैपिंग की आवश्यकता नहीं है, इसलिए या तो 'nnoremap' या' nnoremap' + 'xnoremap') 2) '#' का कभी भी उपयोग नहीं किया जाना चाहिए साथ ही साथ विशेष रूप से विशेष (खोल के लिए विशेष) को संभालना असंभव है। इस तरह के पात्र, 'निष्पादित करें' और 'शेल्सस्केप (@ #, 1)' यहां आपके मित्र हैं। और क्या आप अंत में ' 'नहीं भूल गए? – ZyX

0

मैं

यह वर्तमान एक ही अगर एक पहले से ही उस उद्देश्य के लिए पहले नहीं खोला गया था के बगल में नया टैब खोलने पर (एक मेकअप रन शासन के साथ एक makefile के लिए बहुत उपयोगी) मेरा कार्यक्रम आउटपुट देखने के लिए निम्नलिखित का उपयोग कर रहा :

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> 
संबंधित मुद्दे