父目录中的Vim Makefile
对于在sourcefiles的父目录中有Makefile的项目,在vim中我有我的 makeprg变量集如下:父目录中的Vim Makefile,vim,makefile,Vim,Makefile,对于在sourcefiles的父目录中有Makefile的项目,在vim中我有我的 makeprg变量集如下: :set makeprg=[[\ -f\ Makefile\ ]]\ &&\ make\ \\|\\|\ make\ -C\ .. 正如本文所建议的那样 此替换对于父目录中的Makefile非常有效,但在Makefile位于当前目录中时会中断 vim生成和无限循环:生成命令。如果找不到Makefile,我已经使用了要运行的命令,并且我已经确定在运行make之后,vim
:set makeprg=[[\ -f\ Makefile\ ]]\ &&\ make\ \\|\\|\ make\ -C\ ..
正如本文所建议的那样
此替换对于父目录中的Makefile非常有效,但在Makefile位于当前目录中时会中断
vim生成和无限循环:生成命令。如果找不到Makefile,我已经使用了要运行的命令,并且我已经确定在运行make之后,vim仍然会运行三元函数的fail case(作为一个编辑器命令)
因此,对make的新调用扩展为另一个:make无限
如何防止vim尝试执行此操作?运行三元函数的失败案例是因为,显然,当前目录中的
make
调用返回一个错误。您可以通过如下设置makeprg
来防止此缺陷:
:let &makeprg = 'if [ -f Makefile ]; then make; else make -C ..; fi'
使用let
结构避免了逃生标志的必要性。这是在您提到的同一个线程中建议的
或者,您可以修复当前目录中的
make
问题,使其不会返回错误代码…运行三元函数的失败案例,因为当前目录中调用make
显然会返回错误。您可以通过如下设置makeprg
来防止此缺陷:
:let &makeprg = 'if [ -f Makefile ]; then make; else make -C ..; fi'
使用let
结构避免了逃生标志的必要性。这是在您提到的同一个线程中建议的
或者,您可以修复当前目录中的
make
问题,使其不会返回错误代码…如果我可以为此oneliner执行功能请求。。。是否可以隐藏make进入该目录的事实?使用此解决方案,您必须按enter键两次。没关系,这可以通过设置set cmdheight=2
来处理。如果使用参数运行:make
,则需要在makeprg行中指定它们的位置($*
)。我还添加了-C
以在当前缓冲区的direcory/sub目录中运行make:if[-f Makefile];然后使-C%:p:h$*;else make-C%:p:h/.$*;fi
如果我可以为这台oneliner执行功能请求。。。是否可以隐藏make进入该目录的事实?使用此解决方案,您必须按enter键两次。没关系,这可以通过设置set cmdheight=2
来处理。如果使用参数运行:make
,则需要在makeprg行中指定它们的位置($*
)。我还添加了-C
以在当前缓冲区的direcory/sub目录中运行make:if[-f Makefile];然后使-C%:p:h$*;else make-C%:p:h/.$*;fi