こんにちは、初めてack
です(実際には30分前に始めました)。検索結果の質に感銘を受けました。
しかし、私のソースファイルには多くのコメントがあり、クラス/関数名を検索すると、コメント行で約20件、実際のコードで2件の結果が得られます。
//
と#
の間のテキストを除外する方法はあり/* */
ますか?
こんにちは、初めてack
です(実際には30分前に始めました)。検索結果の質に感銘を受けました。
しかし、私のソースファイルには多くのコメントがあり、クラス/関数名を検索すると、コメント行で約20件、実際のコードで2件の結果が得られます。
//
と#
の間のテキストを除外する方法はあり/* */
ますか?
次のようなものを使用して、1 行のコメントをスキップできます。
# ignore matches after //
ack '^[^//]*word'
# ignore matches after #
ack '^[^#]*word'
ag
代わりに使用している場合は、複数行の一致を行うことに注意してください。
# ignore matches after //
ag '^[^\n\r//]*word'
# ignore matches after #
ag '^[^\n\r#]*word'
あなたはそうしない。代わりに、ソースにタグを付けます。
コメントをスキップすると、その場で入力を解析することになりますが、これは一般的に処理が遅くなります。さらに、プログラミング言語ごとにコメントの構文が異なるため、この実装は簡単ではありません。独自の正規表現を展開することもできますが (たとえば、C では次のように使用します\/\*(\*(?!\/)|[^*])*\*\/
)、これらのパターンは複雑であり、ack、ag、および grep が設計されている迅速な検索の価値よりも面倒です。あなたが本当に探しているのは、関数とクラスを介してコードをナビゲートする方法です。これがコードのタグ付けの目的です。universal-ctags、http: //docs.ctags.io/en/latest/ を確認してください。