如何用Vim有效地“制造”

时间:2009-04-08 09:31:13

标签: vim plugins makefile

我想要做的似乎是一个非常基本的东西,但我找不到任何关于它的东西。我正在研究像往常一样建造的项目:

project
|-- bin
|-- inc
`-- src

我想使用Vim中包含的make命令创建我的项目。但每次我必须指定:make -C ../。我更喜欢,如果当前目录中没有Makefile文件,请进入父目录。我已经用

做到了
set tags+=./tags;/

在我的.vimrc

此外,make默认是丑陋的。是否有添加颜色的选项,并允许直接访问错误(如在Emacs中)。

由于

6 个答案:

答案 0 :(得分:15)

what Adam said的轻微修改:

 :set makeprg=[[\ -f\ Makefile\ ]]\ &&\ make\ \\\|\\\|\ make\ -C\ ..  

未转义,这是

 [[ -f Makefile ]] && make || make -C ..

表示伪代码样式

 if file-exists(Makefile) 
 then make
 else make -C ..

这只是一个目录。如果你想要一个更通用的解决方案 尽可能多的目录,你需要能够搜索祖先目录,直到找到一个Makefile,我不知道如何从命令行中做到这一点。但是编写一个脚本(用你喜欢的任何语言),然后从你的makeprg中调用它应该不难。

答案 1 :(得分:7)

渐变的解决方案是第一步,但是在vim加载时计算。当我加载多标签会话时,路径可能会从一个标签到另一个标签不一致。

这是我的解决方案(+ tab with tabnew)。

fun! SetMkfile()
  let filemk = "Makefile"
  let pathmk = "./"
  let depth = 1
  while depth < 4
    if filereadable(pathmk . filemk)
      return pathmk
    endif
    let depth += 1
    let pathmk = "../" . pathmk
  endwhile
  return "."
endf

command! -nargs=* Make tabnew | let $mkpath = SetMkfile() | make <args> -C $mkpath | cwindow 10

答案 2 :(得分:3)

要回答第二个问题,您可以使用VIM中的quickfix功能浏览错误。 Quickfix将错误存储在缓冲区中,并允许您向前/向后导航它们。

您可能必须定义错误regexp以允许VIM从Make的输出中识别这些,但我似乎记得它开箱即用(我必须修改它对Java的工作原理) Ant构建 - 显然不适用于此处)

答案 3 :(得分:3)

到目前为止,最简单的解决方案是在src目录中有一个Makefile,这是设置许多项目的方式,无论编辑器/ IDE如何。您仍然可以拥有一个调用make -C src的顶级Makefile,其中src中的构建规则位于它们所属的src中。

答案 4 :(得分:2)

如果在项目根目录中有一个makefile,则可以使用另一种方法:

project
|-- bin
|-- inc
|-- src
| Makefile

将项目路径放在b:projectDir之类的变量中,可以在开始执行:make:lmake之前使用“自动命令”切换到该目录:

augroup changeMakeDir
    au!
    autocmd QuickfixCmdPre *make
                \ if exists("b:projectDir") &&
                                    \ b:projectDir != expand("%:p:h") |
                    \ exe 'cd ' . b:projectDir |
                \ endif
augroup END

Projectroot plugin可用于设置b:projectDir;它还提供了将当前目录更改为项目根目录的命令:

augroup changeMakeDir
    au!
    autocmd QuickfixCmdPre make ProjectRootCD
augroup END

答案 5 :(得分:1)

在.vimrc中设置makecmd =“make -C ..”