11

私は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ユーザーはこの問題をどのように解決しますか?

4

1 に答える 1

5

面白い問題!私はいくつかのアプローチを考えることができます:

  1. ファイル名パターンでフィルタリングできるようにackにパッチを適用します(最適:ackにはこの機能が必要です)
  2. 特定のファイル名パターンを無視するようにack.vimを変更します(これをどのように行うかわからない)
  3. ラッパースクリプト/プログラムを使用して、ackの出力をフィルタリングします(ackの出力を変更するのが難しい/煩わしい)
  4. ラッパースクリプト/プログラム(実行可能)を使用して、ackに指定された入力ファイルリストをフィルタリングします
  5. jQueryファイルを無視するようにackにパッチを適用します(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;
}

上記の直後に別の行を追加しますreturn 1;

    return if $filename =~ /^jquery/;

繰り返しになりますが、私の最初の提案(ファイル名パターンでのフィルタリングを可能にするパッチack)に戻ると、Andyはこれにパッチを当てる可能性があります。

ちなみに、あなたはおそらくこれをすでに理解しているでしょうが、あなたの使用は--type-addackコマンドラインの有効な構文ではないようです:

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

それはファイル拡張子を期待しているだけです。お役に立てれば!

于 2011-11-05T04:17:34.033 に答える