如何让Ack忽略jQuery文件?

Dav*_*ers 11 vim jquery ack

我正在使用Vim + Ack.Vim,并且对如何忽略Jquery文件中的命中率感到不安.我已经定义了一个.ackrc文件(见下文),但是我在黑暗中刺伤了.

--type-add=ruby=.haml,.rake,.rsel,.builder
--type-add=html=.html.erb,.html.haml
--type-add=js=.js.erb
--type-add=css=.sass
--type-set=cucumber=.feature
--type-add=jquery=jquery*.js
--ignore-dir=vendor
--ignore-dir=log
--ignore-dir=tmp
--ignore-dir=doc
--ignore-dir=coverage
--sort-files
--color
--follow
--group
--nojquery
Run Code Online (Sandbox Code Playgroud)

经验丰富的ack + ack.vim用户如何解决这个问题?

Ada*_*sen 5

有趣的问题!我可以想到几个方法:

  1. patch ack允许使用文件名模式进行过滤(最好:ack需要此功能)
  2. 修改ack.vim忽略某些文件名模式(不知道你是怎么做的)
  3. 使用包装器脚本/程序过滤ack的输出(脆弱/烦恼到munge ack的输出)
  4. 使用包装器脚本/程序(可行)过滤给ack的输入文件列表
  5. patch ack忽略jQuery文件(kludgy,但有效)

我得到了最后一个工作.Ack是用Perl编写的,所以它很容易阅读和修改.在你的系统上寻找Ack.pm.我使用Ubuntu 11.10并安装了ack-grep来获取ack; 我的Ack.pm在/usr/share/perl5/App/Ack.pm.如果您安装了独立版本的ack,则您要编辑的文件名为"ack".寻找子程序is_searchable().这是我看到的:

sub is_searchable {
    my $filename = shift;

    # If these are updated, update the --help message
    return if $filename =~ /[.]bak$/;
    return if $filename =~ /~$/;
    return if $filename =~ m{^#.*#$}o;
    return if $filename =~ m{^core\.\d+$}o;
    return if $filename =~ m{[._].*\.swp$}o;

    return 1;
}
Run Code Online (Sandbox Code Playgroud)

在上面添加另一行return 1;:

    return if $filename =~ /^jquery/;
Run Code Online (Sandbox Code Playgroud)

再次,回到我的第一个建议(补丁确认允许使用文件名模式进行过滤)Andy可能需要修补此问题.

顺便说一句,您可能已经想到了这一点,但是您的使用--type-add似乎不是ack命令行的有效语法:

--type-add=jquery=jquery*.js
Run Code Online (Sandbox Code Playgroud)

它只是期望文件扩展名.希望这可以帮助!