回答:
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-project
or 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-p
Projectileを呼び出し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
デフォルトで「役に立たないファイル」の条件に一致するすべてのファイルが除外されることを考えると、「すべてを検索するだけ」というコメントは少しわかりにくいです。