如何让 Ack 忽略 jQuery 文件?

发布于 2024-12-10 09:38:39 字数 475 浏览 0 评论 0原文

我正在使用 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

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

I'm using Vim + Ack.Vim and am flummoxed on how to ignore hits within Jquery files. I've got an .ackrc file defined (see below), but I'm stabbing in the dark.

--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

How would seasoned ack + ack.vim users solve this issue?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

幼儿园老大 2024-12-17 09:38:39

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

  1. 修补 ack 以允许使用文件名模式进行过滤(最好:ack 需要此功能)
  2. 修改 ack.vim 以忽略某些文件名模式(不知道如何执行此操作)
  3. 过滤 ack 的输出,使用包装脚本/程序(对 munge ack 的输出来说很脆弱/烦人)
  4. 过滤给 ack 的输入文件列表,用包装脚本/程序(可行)
  5. 修补 ack 来忽略​​ jQuery 文件(笨拙,但有效)

我让最后一个工作了。 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;
}

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

    return if $filename =~ /^jquery/;

再次回到我的第一个建议(修补 ack 以允许使用文件名模式进行过滤)安迪可能会为此打补丁

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

--type-add=jquery=jquery*.js

它只需要文件扩展名。希望这有帮助!

Interesting problem! I can think of a few approaches:

  1. patch ack to allow filtering with filename patterns (best: ack needs this feature)
  2. modify ack.vim to ignore certain filename patterns (not sure how you'd do this)
  3. filter output of ack, with a wrapper script/program (brittle/annoying to munge ack's output)
  4. filter input filelist given to ack, with a wrapper script/program (doable)
  5. patch ack to ignore jQuery files (kludgy, but works)

I got the last one working. Ack is written in Perl, so it's pretty easy to read and modify. Look for Ack.pm on your system. I use Ubuntu 11.10 and installed ack-grep to get ack; my Ack.pm is found at /usr/share/perl5/App/Ack.pm. If you installed the stand-alone version of ack, the file you'll edit is just called "ack". Look for the subroutine is_searchable(). Here's what I see:

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;
}

Add another line right after above return 1;:

    return if $filename =~ /^jquery/;

Again, going back to my first suggestion (patch ack to allow filtering with filename patterns) Andy might take a patch for this.

By the way, you probably already figured this out, but your use of --type-add doesn't appear to be valid syntax for the ack command line:

--type-add=jquery=jquery*.js

it just expects file extensions. Hope this helps!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文