当前位置:  开发笔记 > 开发工具 > 正文

如何用Vim有效地"制造"

如何解决《如何用Vim有效地"制造"》经验,为你挑选了2个好方法。

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

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

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

set tags+=./tags;/

在我的.vimrc.

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

谢谢



1> rampion..:

亚当说的略有改动:

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

未转义,这是

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

这意味着,伪代码风格

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

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


可以使用`let`子句来避免这种广泛的转义:`:let&makeprg ='[[-f Makefile]] && make || make -C ..'`
`[[a]] && b || c`与`if a then b else c`不完全相同.如果`a`为真并且`b`返回非零退出代码,那么也将执行`c`.

2> Jérôme..:

斜率的解决方案是第一步,但是在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  -C $mkpath | cwindow 10

推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有