我想要做的似乎是一个非常基本的东西,但我找不到任何关于它的东西。我正在研究像往常一样建造的项目:
project
|-- bin
|-- inc
`-- src
我想使用Vim中包含的make命令创建我的项目。但每次我必须指定:make -C ../
。我更喜欢,如果当前目录中没有Makefile文件,请进入父目录。我已经用
set tags+=./tags;/
在我的.vimrc
。
此外,make默认是丑陋的。是否有添加颜色的选项,并允许直接访问错误(如在Emacs中)。
由于
答案 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 ..”