If you’re not using projectile, but you would like to be able to perform interactive, search-as-you-type, recursive searches through the current project, this is pretty easy to do if you have counsel and find-file-in-project installed.
Add the following Emacs Lisp to your init:
(defun cpb/counsel-ag-in-project () "Use `ffip' and `counsel-ag' for quick project-wide text searching." (interactive) (let ((project-root (ffip-project-root))) ;; if ffip could not find project-root, it will already have ;; shown an error message. We only have to check for non-nil. (if project-root (counsel-ag nil project-root nil (format "Search in PRJ %s" project-root))))) (global-set-key (kbd "C-c s") 'cpb/counsel-ag-in-project)
This function, which I have bound to
ctrl-c s, finds the project root using
find-file-in-project's function for this, and then invokes the handy
counsel-ag on its result.