2011-11-27 14 views
16

Estoy editando un archivo XML en Vim, y luego quiero transformarlo en un archivo de texto plano con xsltproc, que de forma predeterminada da salida a stdout (algo así como:! Xsltproc TXTRULE.XSL%). ¿Es posible redirigir esa salida xsltproc a una nueva pestaña en Vim sin crear ningún archivo intermedio?¿Cómo redirigir salida stdout a una nueva pestaña Vim?

(He tratado de leer: ayuda redir y some wiki notes, pero todavía no puede conseguirlo sería greateful de algún tipo de ejemplo sencillo..)

Respuesta

22

Usted puede utilizar read como en el siguiente:

:read !ls 

Obviamente debe cambiar ls con su comando. Si desea abrir una nueva pestaña anteponer tabnew con una barra a la orden como:

:tabnew|read !ls 
+0

Muchas gracias, ** lucapette **. –

+1

Más que bienvenido;) – lucapette

+0

nuevo | leído! Se abrirá en una nueva ventana en lugar de una pestaña –

3

Para ampliar lucapette de answer, se puede crear un mapa como este:

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

# se expande a la el búfer abierto anteriormente, que es el archivo que estaba editando, mientras que % se expandiría al nuevo búfer abierto por :tabnew.

<Bar> tiene que ser utilizado en lugar de |, porque de lo contrario, el comando :map terminaría en el |.

+1

Gracias ** Daniel **, no sabía sobre #. Sin embargo, por mi parte, puedo agregar que parece que uno puede usar '\ |' en lugar de '' :). –

+0

respuesta fresca tiendo a olvidar de '' # – lucapette

+1

Usted tiene dos problemas aquí: 1) [Nunca use ': map'] (http://learnvimscriptthehardway.stevelosh.com/chapters/05.html) (Además, don No es necesario este mapeo en el modo pendiente de operador, por lo que ni 'nnoremap' ni' nnoremap' + 'xnoremap') 2)' # 'no se deben usar tan bien como es imposible manejarlo adecuadamente (especial para shell) personajes de esta manera, ': execute' y' shellescape (@ #, 1) 'son tus amigos aquí. ¿Y no te olvidaste '' al final? – ZyX

0

Estoy utilizando el siguiente para ver más productos de los programas (muy útil para un makefile con una regla de carrera maquillaje)

Se abre una nueva pestaña al lado de una corriente sólo si uno no estaba ya abierta antes para tal fin :

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> 
Cuestiones relacionadas