8 votos

Cómo pasar de vim contenido del buffer a través de comandos de shell y capturar la salida a una ventana dividida

He leído un montón de discusiones acerca de la ejecución del shell de comandos de vim, un montón de documentación sobre los comandos de vim, .vimrc y todo eso, pero me parece que no puede entender el "ex" de lenguaje o vim asignaciones suficientemente bien como para hacer lo que quiero, así que aquí estoy haciendo esta pregunta. Aquí va:

Me han abierto un buffer en el vim (usando la última versión estable MacVim en Snow Leopard, pero no en modo gui), cuyo contenido, lo haré más adelante se alimentan en una herramienta de línea de comandos que se va a procesar y me dan algunos resultados. Lo que yo quiero es ser capaz de:

  1. Pulse una tecla (o combinación de teclas, o emitir un comando vi)
  2. Ejecutar mi utilidad de línea de comandos con el contenido de mi actual del búfer (que podría no ser guardado en el archivo) que se escucha en ella
  3. La captura de su salida y mostrar en vim, preferiblemente en una nueva ventana dividida (como por ejemplo :ayudar a que hace)

Así que, en resumen: puedo ejecutar

$ cat ~/myinput.txt | myScript > output.txt

Pero yo quiero hacer algo así como que dentro de vim, poniendo el resultado en una nueva ventana dividida, si es posible.

ACTUALIZACIÓN:
Por supuesto, sólo después de la publicación, he encontrado algo más de información sobre el tema. Ahora sé que puedo hacer esto dentro de vim:

:%! myScript

Y se pondrá a la salida de myScript (con el contenido del buffer canaliza a) en mi buffer actual, en sustitución de lo que tengo por ahora.

Entonces, ¿hay una manera de poner estos contenidos en una nueva ventana dividida, buffer? Gracias!

7voto

Patrick Klug Puntos 5320

Yo pondría algo como esto en mi ~/.vimrc o un archivo con el .vim extensión en ~/.vim/plugin/:

command! FW call FilterToNewWindow('myscript')

function! FilterToNewWindow(script)
    let TempFile = tempname()
    let SaveModified = &modified
    exe 'w ' . TempFile
    let &modified = SaveModified
    exe 'split ' . TempFile
    exe '%! ' . a:script
endfunction

A continuación, puede simplemente hacer ":FW".

Podría ser una buena idea para cambiar el comando de definición de exigir un filtro de secuencia de comandos argumento de nombre para pasar a la función en lugar de "codificar".

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: