将makeprg设置为VIM函数?

3

我正在使用VIM编辑Visual Studio解决方案,编写了一个搜索文件系统的函数来寻找当前文件上级目录中第一个*.sln文件。

我想要实现的功能如下:

function! BuildSLN()
    " FindSLN is my function that locates the sln "
    let slnfile = FindSLN()
    if slnfile != ""
        execute "!devenv " . slnfile . " /Build Debug"
    endif
endfunction

CompilerSet makeprg=:call BuildSLN()

这样,我就能够使用当前设置的:make键绑定来构建解决方案文件。这种方法是否可行?

1
我已经找到了一个解决方案,虽然不是技术上对我的问题的答案 :) 由于每当我进入C#或VB.net缓冲区时都会加载编译器设置,因此我只需在编译器设置文件中执行let &l:makeprg='"devenv.com "' . FindSLN() . '" /Build Debug"'。我将保持问题的开放,以便让其他人有机会回答。 - rossipedia
最好将您的解决方案发布为答案。 - ib.
虽然并没有严格回答你的问题,但我发现我最喜欢的工作流程是 :cd(或在 :Ex 中更改目录)到项目的根目录。然后你可以简单地使用 :set makeprg=msbuild - Wayne Werner
2个回答

3
我找到了一个解决方案,虽然它不能算是对我的问题的技术上的回答 :)
由于我每次进入C#或VB.net缓冲区时都会加载编译器设置,所以我只需要这样做:
let &l:makeprg='"devenv.com "' . FindSLN() . '" /Build Debug"'

在编译器设置文件中,这样可以实现我想要的效果,但技术上它并没有将makeprg设置为一个当调用:make时将被评估的函数,就像最初请求的那样。


0

您可以定义一个映射/函数/命令/等等,以便:

  • 确保您的makeprg设置正确
  • 执行:make
  • 如果有错误,则执行:copen。

就我个人而言,我更喜欢在从目录(我将其与项目相关联)编辑文件时设置makeprg。还有一些映射来切换编译模式方面的内容(调试/发布、后台/非后台、目标(交叉编译/否)、多线程编译/否等)。每次更改其中一个方面时,我都会更新makeprg。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接