调用vim的make命令时,会将当前工作目录(cwd)更改为当前文件的目录。然后它从那里运行makeprg。我想阻止make命令更改cwd,而是从父vim实例的目录中调用makeprg
我有以下标准的perl项目层次结构
project/
lib/
My/
Module/
Foo.pm
我的PERL5LIB设置为
PERL5LIB=':lib'
在我的.vimrc中我有
compiler perl
set makeprg=perl\ -c\ %
我使用vim从根项目级别编辑我的模块:
/path/to/project$ vim lib/My/Module/Foo.pm
在vim中:pwd按预期工作:
:pwd
"/path/to/project"
同时调用!perl -c按预期工作,找到我的项目lib,并在shell窗口中显示结果:
:!perl-c %
OUTPUT:
perl -c lib/My/Module/Foo.pm
lib/My/Module/Foo.pm Syntax ok
但是:make返回错误
:make
"Can't open perl script lib/My/Module/Foo.pm : No such file or directory"
将makeprg设置为pwd会显示问题
:set makeprg=pwd
:make
"/path/to/project/lib/My/Module"
所以在make make makeprg之前它会改变到当前文件的目录,这就是为什么perl在那里找不到'lib /.../ Foo.pm'。
有没有办法阻止make这样做?
答案 0 :(得分:4)
如果Vim的:make命令正在更改当前工作目录,并且未设置autochdir,则插件可能已向QuickFixCmdPre集添加了自动命令。一个执行此操作的插件是eclim,如果g:EclimMakeLCD设置为1,则调用QuickFixLocalChangeDirectory()函数。
使用:au查找当前配置中的所有自动命令,特别注意QuickFixCmdPre和make的条目。