检查Vimscript中的错误后将stdout写入stdin
我试图读取coco的输出,然后将其导入uglifyjs。这听起来很简单,只需执行coco-print | uglifyjs,但我希望能够在出现错误时首先读取coco的输出。出于某种原因,每当我保存输出并尝试通过echo将其导入uglifyjs时,我会得到: 我听说这个错误与输出有关。是echo的错吗?我真的不知道。如果没有,下面是我当前使用的代码:检查Vimscript中的错误后将stdout写入stdin,vim,Vim,我试图读取coco的输出,然后将其导入uglifyjs。这听起来很简单,只需执行coco-print | uglifyjs,但我希望能够在出现错误时首先读取coco的输出。出于某种原因,每当我保存输出并尝试通过echo将其导入uglifyjs时,我会得到: 我听说这个错误与输出有关。是echo的错吗?我真的不知道。如果没有,下面是我当前使用的代码: fu! BuildCoco() redraw! echo '...' silent :w let b:out = s
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
在连续几个小时绞尽脑汁试图找出答案后,我发现通过向系统提供第二个参数,可以将变量导入命令。以下是我的解决方案:
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
为什么所有的事情都在一个巨大的执行声明中?如果您将命令分离到它们自己的行中,这将更具可读性。您应该将其放在函数中。然后调用函数。这样调试会更容易,老实说,我从没想过。我会这样做并更新问题。
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