Visit a file that belongs to the current project
Find matches for a regexp in all files that belong to the current
Interactively search for regexp matches in all files that belong to the current project.
Perform query-replace for a regexp in all files that belong to the
current project (
Run Dired in the current project’s root directory
vc-dir in the current project’s root directory
Start an inferior shell in the current project’s root directory
Start Eshell in the current project’s root directory
Run compilation in the current project’s root directory
Run shell command in the current project’s root directory
Run shell command asynchronously in the current project’s root
Emacs provides commands for handling project files conveniently. This subsection describes these commands.
All of the commands described here share the notion of the
current project. The current project is determined by the
default-directory (see File Names) of the buffer that is
the current buffer when the command is invoked. If that directory
doesn’t seem to belong to a recognizable project, these commands
prompt you for the project directory.
The command C-x p f (
project-find-file) is a convenient
way of visiting files (see Visiting Files) that belong to the current
project. Unlike C-x C-f, this command doesn’t require to type
the full file name of the file to visit, you can type only the file’s
base name (i.e., omit the leading directories). In addition, the
completion candidates considered by the command include only the files
belonging to the current project, and nothing else. If there’s a file
name at point, this command offers that file as the first element of
the “future history”.
The command C-x p g (
project-find-regexp) is similar to
rgrep (see Searching with Grep under Emacs), but it searches only the files
that belong to the current project. The command prompts for the
regular expression to search, and pops up an Xref mode buffer with the
search results, where you can select a match using the Xref mode
commands (see Commands Available in the *xref* Buffer). When invoked with a prefix
argument, this command additionally prompts for the base directory
from which to start the search; this allows, for example, to limit the
search only to project files under a certain subdirectory of the
project root. The way this command displays the matches is affected
by the value of
xref-auto-jump-to-first-xref (see Searching and Replacing with Identifiers).
M-x project-search is a sequential variant of
project-find-regexp. It prompts for a regular expression to
search in the current project’s files, but instead of finding all the
matches and displaying them, it stops when it finds a match and visits
the matched file at the locus of the match, allowing you to edit the
matched file. To find the rest of the matches, type M-x fileloop-continue RET.
C-x p r (
project-query-replace-regexp) is similar to
project-search, but it prompts you for whether to replace each
match it finds, like
query-replace does (see Query Replace), and continues to the next match after you respond. If your
response causes Emacs to exit the query-replace loop, you can later
continue with M-x fileloop-continue RET.
The command C-x p d (
project-find-dir) prompts you to
choose a directory inside the current project, with completion.
And opens a Dired buffer (see Dired, the Directory Editor) listing the files in it.
The command C-x p D (
project-dired) opens a Dired
buffer (see Dired, the Directory Editor) listing the files in the current project’s root
The command C-x p v (
project-vc-dir) opens a VC
Directory buffer (see VC Directory Mode) listing the version
control statuses of the files in a directory tree under the current
project’s root directory.
The command C-x p s (
project-shell) starts a shell
session (see Running Shell Commands from Emacs) in a new buffer with the current project’s
root as the working directory.
The command C-x p e (
project-eshell) starts an Eshell
session in a new buffer with the current project’s root as the working
directory. See Eshell in Eshell: The Emacs Shell.
The command C-x p c (
project-compile) runs compilation
(see Running Compilations under Emacs) in the current project’s root directory.
The command C-x p ! (
shell-command in the current project’s root directory.
The command C-x p & (
async-shell-command in the current project’s root directory.