2016-07-23 278 views
1

而不是让vim输出:make命令的输出,我想读取文件中的输出(它会在vim中自动更新);这样我的编译文件就可以马上运行,而不必看到:make命令的输出。重定向vim:使输出到文件

我用下面的Makefile

all: compile run 

compile: file.cc 
     g++ -o file file.cc 

run: file 
     ./file 

怎样才能重定向的输出:在某种程度上作出命令,它是不是也印制的Vim屏幕?

回答

1

首先我们有https://vi.stackexchange.com/,你可以在那里得到关于Vim的更好的答案。


其次,我认为,一个Makefile没有地方来运行程序,背后make想法是赶上编译错误。但是,假设你有你的原因(例如./file打开图形显示),有一对夫妇的方式在Vim中执行此:

对于您可以设置makeprg执行重定向开始:

:set makeprg=make\ >/dev/null\ 2>&1 

(您可以更改/dev/null到实际文件)

但是,这仍然让行:

Press ENTER or type command to continue 

并要求确认,当您知道没有输出时可能会感到烦恼。


为了摆脱确认线,你可以使用silent如下:

set makeprg=make\ >/dev/null\ 2>&1 
function! MyMake() 
    silent make 
    redraw! 
endfunction 
command Mm call MyMake() 

现在你可以这样做:

:Mm 

要执行的品牌和走时背部要挺直到Vim。 (仅在某些终端中需要redraw!

+0

它做吧!我如何使这个过程在后台运行;所以屏幕不会立即切换到外壳? –

+1

@MusséRedi - 你有两种选择。hacky是'设置makeprg = make \>/dev/null \ 2>&1 \&',并让整个make进程在后台运行。正确的是使用频道(请参阅':H频道'),但我会建议针对频道,因为它们仍然是非常错误的。 (并且我尝试在VimScript中使用通道编码的经验非常糟糕。) – grochmal

1

您可以执行以下命令:

:silent exec "!make >Output" | :redraw! 

文件Output包含执行make命令的最后输出。

0

使用:silent删除输出并按“回车”提示。我建议一个很好的映射或命令:

command! -nargs=* Smake silent make <args> 
nnoremap <f5> :silent make<cr> 

:make将填充与:make结果quickfix列表。使用:copen打开quickfix窗口。

如需更多帮助,请参见:

:h :command 
:h silent 
:h :make 
:h 'makeprg' 
:h quickfix