2011-11-27 12 views
16

Edytuję plik XML w Vimie, a następnie chcę przekształcić go w plik tekstowy z xsltproc, który domyślnie wyprowadza na standardowe wyjście (coś w stylu:! Xsltproc TXTRULE.XSL%). Czy możliwe jest przekierowanie wyjścia xsltproc do nowej karty w Vimie bez tworzenia plików pośrednich?Jak przekierować wyjście standardowe do nowej karty Vima?

(Próbowałem czytać: help redir i some wiki notes, ale nadal nie można uzyskać go będzie greateful dla jakiegoś prostego przykładu.).

Odpowiedz

22

Można użyć read jak w poniższym przykładzie:

:read !ls 

Oczywiście należy zmienić ls za pomocą polecenia. Jeśli chcesz otworzyć nową kartę poprzedzić tabnew z barem do komendy:

:tabnew|read !ls 
+0

Wielkie dzięki, ** lucapette **. –

+1

Witamy więcej;) – lucapette

+0

new | read! Ls otworzy się w nowym oknie zamiast na karcie –

3

Aby rozwinąć na lucapette na answer, można utworzyć mapę takiego:

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

# rozwija do poprzednio otwarty bufor, który jest edytowanym plikiem, podczas gdy % zostanie rozwinięty do nowego bufora otwartego przez :tabnew.

<Bar> musi być stosowany zamiast |, ponieważ w przeciwnym razie komenda :map skończy na |.

+1

Dzięki ** Daniel **, nie wiedziałem o #. Jednak z mojej strony mogę dodać, że wydaje się, że można użyć '\ |' zamiast '' :). –

+0

Fajna odpowiedź Zapominam o '#' – lucapette

+1

Masz tu dwa problemy: 1) [Nigdy nie używaj ': map'] (http://learnvimscriptthehardway.stevelosh.com/chapters/05.html) (dodatkowo, ty don nie potrzebuje tego odwzorowania w trybie oczekiwania operatora, więc 'nnoremap' lub' nnoremap' + 'xnoremap') 2)' '' nie powinno być nigdy używane tak dobrze, jak nie można poprawnie obsłużyć specjalnego (specjalnego dla powłoki) w ten sposób, ': execute' i' shellescape (@ #, 1) 'są twoimi przyjaciółmi tutaj. I nie zapomniałeś '' na końcu? – ZyX

0

używam następujących aby zobaczyć moje wyjścia programu (bardzo przydatne dla makefile z reguły uruchomić make)

otwiera nową kartę obok obecnego tylko jeśli ktoś nie został już otwarty, zanim do tego celu :

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> 
Powiązane problemy