防止vim:make改变当前的工作目录?

时间:2010-02-02 21:11:11

标签: perl vi vim

梗概:

调用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这样做?

1 个答案:

答案 0 :(得分:4)

如果Vim的:make命令正在更改当前工作目录,并且未设置autochdir,则插件可能已向QuickFixCmdPre集添加了自动命令。一个执行此操作的插件是eclim,如果g:EclimMakeLCD设置为1,则调用QuickFixLocalChangeDirectory()函数。

使用:au查找当前配置中的所有自动命令,特别注意QuickFixCmdPre和make的条目。