回答:
Emacs内でのプロジェクトベースの検索は、projectileを使用して実行できます。
(<projectroot>\.projectileファイル内の)ファイルを無視するプロジェクトごとの構成を許可するか、他のすべてを監視および無視するサブディレクトリを指定します。
これは、実行することができgrep、ack(必要でack-and-a-half.el)とag(ag.el)定義されたプロジェクト内のファイルに(どちらかに基づいて、.projectileファイルまたはプロジェクトのルートを定義するためのサポートVCファイルを見つけることによって)。
(有用なファイルの検索に関して)
Projectile Readmeに従って
C-c p s g :: grepプロジェクト内のファイルで実行します。C-c p s a :: ackプロジェクトで実行されます。ack-and-halfの存在が必要です。C-c p s s :: agプロジェクトで実行されます。ag.elの存在が必要です。C-c p f ::プロジェクト内のすべてのファイルのリストを表示します。C-c p d ::プロジェクト内のすべてのディレクトリのリストを表示します。C-c p a ::プロジェクト内の同じ名前で異なる拡張子を持つファイルを切り替えます。C-c p o:: multi-occur現在開いているすべてのプロジェクトバッファで実行されます。これらは、プロジェクトの一部として定義されている(またはキャッシュの生成/再生成時に検出される)ファイルに対してのみ機能します。
関連ファイルのみのプロジェクト全体の検索は、ag別名the_silver_searcherを使用して実行できます。
.gitignore、.hgignore、svn:ignore。スイッチを使用して、バージョン管理の無視リストから無視リストを使用しないように検索を選択できます-U。 .agignoreファイルに追加するだけです。
.agignoreファイルをに配置して$HOMEから、プロジェクト固有の.agignoreファイルをプロジェクトルートに配置できます。agとemacsag別名the_silver_searcherをインストールします。.agignoreファイルをセットアップします。私.agignoreは私のグローバルファイルだけを持っていることを好みます$HOME。agパッケージをインストールします(Melpaで入手可能)。
wgrep-agパッケージ(Melpaでも入手可能)をインストールすることもお勧めします。これは、を使用agしてプロジェクト全体の検索/置換を実行する場合に役立ちます。ag-projector ag-project-regexp関数を使用して、agプロジェクト全体のファイル検索を実行できます。
ag-project-root-function。ag-project/ ag-project-regexpベースの検索用にプロジェクトルートをマークでき.gitます。その後、カスタマイズする必要はありませんag-project-root-function。プロジェクトでGitを使用する場合は、https://github.com/abo-abo/swiperのみが必要ですcounsel
counsel-git ファイルを見つける
counsel-git-grep grepへ
唯一の依存関係はgitです
テキストのgrep処理は、シルバーサーチャー(ag)よりも高速です
弁護士は、他の強力なツールも提供します。たとえば、実行した後counsel-git-grep、あなたは押すことができますC-c C-oし、C-x C-qに行くためにwgrep-mode簡単にプロジェクトのスコープ内のテキストを交換します。
詳細を説明する記事https://sam217pa.github.io/2016/09/11/nuclear-power-editing-via-ivy-and-ag/があります。その記事ではcounsel-ag(弁護士に組み込まれた別のコマンド)をcousnel-git-grep使用していますが、まったく同じワークフローを使用しています。
agのようなgrepプログラムでもありgit-grepます。どちらが速いかはわかりません。参照github.com/BurntSushi/ripgrep(などの人気のgrepプログラムのパフォーマンスを比較agしてのgit-grep)
最初の答えは美しいですが、Emacsの最新バージョンに関するいくつかの重要な詳細は省略しています。私は自分でEmacsを知っているので、他の新人はこれに気付かないかもしれません。プロジェクト内のファイル内でテキストを検索することが目標である場合、最初にMELPAリポジトリを使用してProjectileをインストールします。
これにより、パッケージが.emacs.dにインストールされ、EmacsインストールでProjectileを要求するなど、基本的な構成が$ USERディレクトリの.emacsに追加されます(.emacsファイルを作成したと仮定)。
ただし、有効にしてキーマッププレフィックスを関連付ける必要があるため、ミニバッファーで呼び出すことができます。
受け入れられた回答には、次のコマンドが記載されています。
C-c p s g
このキーマッププレフィックスを使用してProjectileを構成しない限り、これは機能しません。ただし、.emacsのProjectのコマンドとしてCc Cpを使用するように構成しました。
(projectile-mode +1)
(define-key projectile-mode-map (kbd "C-c C-p") 'projectile-command-map)
これにより、grepを使用してプロジェクト内のファイルでテキスト検索を実行できます。
C-c C-p f # switch to a project first
C-c C-p s g # perform grep search in project
分解するには、 C-c C-pProjectileを呼び出しs g、grep検索を実行します。検索がvisit_contactあり、プロジェクトでRubyのrspecを検索していると仮定すると、このような美しい出力が得られます。
./spec/support/capybara_classification_code_helper.rb:21: def visit_contact
./spec/features/admin_edits_classification_code_role_dynamic_field_spec.rb:8: visit_contact
./spec/features/admin_edits_classification_code_role_dynamic_field_spec.rb:33: visit_contact
./spec/features/user_views_global_filters_from_line_item_spec.rb:9: visit_contact
rgrepデフォルトで「役に立たないファイル」の条件に一致するすべてのファイルが除外されることを考えると、「すべてを検索するだけ」というコメントは少しわかりにくいです。