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

问题描述 投票:0回答:1

剧情简介:

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

perl vi vim
1个回答
4
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.