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