在检查 Vimscript 中的错误后将 stdout 写入 stdin
Writing stdout to stdin after checking for errors in Vimscript
我正在尝试从 coco
读取输出,然后将其通过管道传输到 uglifyjs
。听起来很简单,只需执行 coco --print | uglifyjs
,但我希望能够在出现错误的情况下首先读取 coco
的输出。出于某种原因,每当我保存输出并尝试通过 echo
将其通过管道传输到 uglifyjs
时,我得到:
E484: Can't open file C:\Users\wuffie\AppData\Local\Temp\VIo####.tmp
我听说错误与输出有关。是echo的错吗?老实说,我不知道。如果没有,这是我目前使用的代码:
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
在连续几个小时试图找出答案后,我发现您可以通过提供 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
我正在尝试从 coco
读取输出,然后将其通过管道传输到 uglifyjs
。听起来很简单,只需执行 coco --print | uglifyjs
,但我希望能够在出现错误的情况下首先读取 coco
的输出。出于某种原因,每当我保存输出并尝试通过 echo
将其通过管道传输到 uglifyjs
时,我得到:
E484: Can't open file C:\Users\wuffie\AppData\Local\Temp\VIo####.tmp
我听说错误与输出有关。是echo的错吗?老实说,我不知道。如果没有,这是我目前使用的代码:
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
在连续几个小时试图找出答案后,我发现您可以通过提供 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