如何在vim中makeprg gcc pipe tee errors.err?

时间:2015-07-12 00:10:12

标签: gcc vim makefile tee

我想将stderrgcc传送到tee errors.err,但我尝试了这两件作品时没有运气:

setlocal makeprg=gcc\ -Wall\ -Wextra\ -g\ -O0\ -ansi\ -pedantic-errors\ %\ -o\ %<.x\ 2>\ >(tee\ errors.err)

文件在那里,但它的空白。起初我以为:make正在删除它,但即使使用set makeef=makeerrors.errerrors.err文件仍然是空白的。

另一个(实际上是我之前的)解决方案是:

setlocal makeprg=gcc\ -Wall\ -Wextra\ -g\ -O0\ -ansi\ -pedantic-errors\ %\ -o\ %<.x\ 2>&1\ |\ tee\ errors.err

但我得到了这个错误,我从来没有想过如何消除:E10: \ should be followed by /, ? or &

编辑1:我还试图使用其他文件名,例如teerrors.err,以防万一。同样的问题。

编辑2:我也尝试过:

set shellredir=2>errorsredir.err
!gcc % -o %<.x

无济于事。但是,无论如何,这不是一个解决方案,因为我无法将makeprg设置为过滤器。

编辑3:这一个(管道中的额外\

setlocal makeprg=gcc\ -Wall\ -Wextra\ -g\ -O0\ -ansi\ -pedantic-errors\ %\ -o\ %<.x\ 2>&1\ \|\ tee\ teeerrors.err

给出了vim错误:E492: Not an editor command: tee teeerrors.err

我刚刚用完了想法。

2 个答案:

答案 0 :(得分:1)

有点晚了,但是......你可以使用管道,只需添加额外的双反斜杠:

setlocal makeprg=gcc\ -Wall\ -Wextra\ -g\ -O0\ -ansi\ -pedantic-errors\ %\ -o\ %<.x\ 2>&1\ \\\|\ tee\ teeerrors.err

答案 1 :(得分:0)

我想我找到了解决方案。比我想象的要简单。

:set makeprg=gcc\ -Wall\ -Wextra\ -g\ -O0\ -ansi\ -pedantic-errors\ %\ -o\ %<.x\ 2>errors.err;\ cat\ errors.err

底线:你不能管道。 (至少我找不到管道解决方案)。