vim过滤器,通过多个命令管道

时间:2014-09-19 21:56:54

标签: vim filter lilypond

我正在使用名为lilypond的音乐符号软件。它能够 将它自己的类似文本的符号标记语言编译成各种格式, 其中png档。

lilypond附带的另一个命令是它的伴侣 lilypond-book,它将编译包含<lilypond>标记的任何文档, 并把这个地方的代码片段放在这个地方:

<p>
    <a href="10/lily-9f8f7b5d.ly">
    <img align="middle" border="0" src="10/lily-9f8f7b5d.png"
    alt="[image of music]">
    </a>
</p>

所以我的愿望,作为VIM的忠实粉丝,就是使用它的过滤功能和 自动化这种工作,例如当我在这样的文档中时 之一:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>html-with-notation</title>
    </head>
    <body>
        This is some text, before including lilypond notation file

        And here is the melody:
        <lilypondfile>andantino.ly</lilypondfile>/* <-- TAG THAT WILL BE RECOGNIZED BY LILYPOND-BOOK  */

        Enjoy!

    </body>
</html>

..我想用生成的输出替换<lilypond>标记 来自lilypond-book命令。但事情并非那么简单,因为lilypond-book 不会写入stdout,而是写入名为stdin.html的文件。 (它命名它 自动这样,认识到输入来自那里)

所以在运行时:

:.!lilypond-book -f html - 2>/dev/null
        // ( with errors redirected to `/dev/null` to prevent polluting my buffer with messages being output.)

我没有得到任何回报,这当然是预料之中的,因为所有输出都已归结为文件。

在完成所有处理后,我现在如何回读stdin.html文件 从lilypond-book部分到我当前的那条线,在我的vim中 缓冲?当然,一气呵成,无需手动:r stdin.html

另外作为奖励,是否可以在将stdin.html读入缓冲区之前,使用pandoc处理它以将其转换为markdown,如果我正在处理{ {1}}档案?

1 个答案:

答案 0 :(得分:1)

你可以说

:.!lilypond-book -f html - 2>/dev/null && cat stdin.html