当调用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 按预期工作,找到我的项目库,并在 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 运行 makeprg 之前,它会更改为当前文件的目录,这就是为什么 perl 在那里找不到 'lib/.../Foo.pm' 的原因。
有什么办法可以阻止make这样做吗?
如果 Vim 的 :make 命令正在更改当前工作目录,并且未设置 autochdir,则插件可能已将自动命令添加到 QuickFixCmdPre 设置中。 eclim 是执行此操作的一个插件,如果 g:EclimMakeLCD 设置为 1,它会调用 QuickFixLocalChangeDirectory() 函数。
使用 :au 查找当前配置中的所有自动命令,特别注意 QuickFixCmdPre 和 make 的条目。