Perl 阻止vim:make更改当前工作目录? 简介:

Perl 阻止vim:make更改当前工作目录? 简介:,perl,vi,vim,Perl,Vi,Vim,调用vim的make命令时,它会将当前工作目录(cwd)更改为当前文件的目录。然后从那里运行makeprg。我想阻止make命令更改cwd,而是从父vim实例的目录中调用makeprg 例子: 我有以下标准的perl项目层次结构 project/ lib/ My/ Module/ Foo.pm 我的权限设置为 PERL5LIB=':lib' 在我的vimrc里,我有 compiler perl

调用vim的make命令时,它会将当前工作目录(cwd)更改为当前文件的目录。然后从那里运行makeprg。我想阻止make命令更改cwd,而是从父vim实例的目录中调用makeprg

例子: 我有以下标准的perl项目层次结构

    project/
      lib/
        My/
          Module/
            Foo.pm
我的权限设置为

    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,则插件可能已将autocommand添加到QuickFixCmd预设中。执行此操作的一个插件是eclim,如果g:eclimakelcd设置为1,它将调用QuickFixLocalChangeDirectory()函数


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

我无法在本地复制此命令。您是否设置了
autochdir
?(
:se acd?
)您有什么自动驾驶仪?(
:au
,您可以忽略ftdetect内容)未设置autochdir,但正在执行:au发现问题!我已经为Java开发安装了eclim,并且有一个eclim全局变量,它触发QuickFixLocalChangeDirectory()以调用:make。切换这个全局变量解决了这个问题。非常感谢!