在检查Vimscript中的错误后将stdout写入stdin

时间:2015-02-09 15:25:14

标签: vim

我正在尝试从coco读取输出,然后将其输入uglifyjs。这听起来很简单,只是为了coco --print | uglifyjs,但我希望能够在出现错误的情况下首先读取coco的输出。出于某种原因,每当我保存输出并尝试将其输入uglifyjsecho时,我得到:

E484: Can't open file C:\Users\wuffie\AppData\Local\Temp\VIo####.tmp

我听说错误与输出有关。这是回声的错吗?老实说,我没有任何线索。如果没有,这是我正在使用的代码:

fu! BuildCoco()
    redraw!
    echo '...'
    silent :w
    let b:out = system(
        \'coco --compile --print "'
        \.expand('%:p')
        \.'"'
    \)
    let b:out_s = split(b:out,'\n')
    redraw!
    if b:out[0:8]!='Failed at'
        echo system(
            \'echo ^\n'
            \.shellescape(join(b:out_s,'\n\n'),1)
            \.' | uglifyjs -b beautify=false --output="'
            \.expand('%:p:r').'.js"'
        \)
    else
        echo join(b:out_s,'\n')
    end
    unl b:out b:out_s
endf

1 个答案:

答案 0 :(得分:0)

在连续几个小时试图揭开答案之后,我发现你可以通过向system()提供第二个参数来将变量输入命令。这是我的解决方案:

fu! BuildCoco()
    redr!
    ec '...'
    sil :w
    redr!
    let b:out = system(
        \'coco --compile --print "'
        \.expand('%:p')
        \.'"'
    \)
    if b:out[0:8]!='Failed at'
        ec system(
            \"uglifyjs --verbose -b beautify=false --output=\""
            \.expand('%:p:r').".js\"",b:out
        \)
    el
        ec b:out
    en
    unl b:out
endf
相关问题