正在运行:在后台使用gVim制作

时间:2009-03-20 14:47:27

标签: compilation vim

我在windows中使用gVim来编辑我的代码(主要是C ++)。我使用:make in gVim来编译项目,但这是一个阻塞操作,这阻止我在编译完成之前使用gVim。我该怎么做:异步制作并仍然可以将错误读回Vim并跳转到源代码中的错误?如果我实时看到制作过程,奖励积分。现在:make将输出重定向到一个文件,因此我无法看到make的进度。

7 个答案:

答案 0 :(得分:18)

我的工作是

:!gvim -c 'MyMake'

(其中MyMake是自定义命令,可以切换到适当的dir,make和copen 20.)

当我在另一个窗口进行构建时,我正在完成我的工作。

其他选项:
您可以从shell或vim(:!make&)中将make progress重定向到某个文件。然后使用

:cfile make_result_file

:cw
 or
:copen 20 

获得与您使用相同的结果:make

答案 1 :(得分:8)

看看@ tpope的dispatch.vim

https://github.com/tpope/vim-dispatch#readme

视频预告片:http://vimeo.com/63116209

答案 2 :(得分:7)

查看我的AsyncCommand插件。它只包含执行某些操作所需的vim语法并使用--remote加载它。我上传了包含AsyncMake命令的AsyncCommand 2.0。

将脚本添加到.vim/plugin,您可以使用:AsyncMake:AsyncMake target进行构建。一旦完成,错误将在你的quickfix中打开。


回应评论以获得更易读的代码:

要在Windows上查看构建结果,如果路径中有cygwin / unxutils / tail,那么在asynccommand.vim中,请更改

call <SID>Async_Impl(tool_cmd, vim_cmd)

call <SID>Async_Impl(tool_cmd, vim_cmd)
call <SID>Async_Impl("tail -f ". temp_file, "")

这应该更改所有异步命令以打开带输出的第二个命令窗口。

答案 3 :(得分:5)

尝试使用

:!start make

(关于“:help!start”的更多信息) - 这样vim就不必等待过程开始完成 - 你可以继续编辑)。

答案 4 :(得分:1)

我会使用您的操作系统内置方法来运行后台任务。

在Windows上,尝试输入

:!start make

在linux / mac os x上,试试

:!make > /dev/null 2>&1 &

答案 5 :(得分:1)

除非您安装最新版本的Vim(v7.4和许多补丁,或简称Vim 8),否则您将无法看到make的进度(在Vim内)。现在有一些插件可以利用它。我的BuildToolsWrapper就是其中之一。我已经在linux和windows上成功测试过它。

在此之前我们需要其他技巧。我记得Marc Weber的插件能够在Windows上模拟后台编译。还有其他几个。我让其他人列出来。

答案 6 :(得分:-1)

请参阅this script