PyCharm 2024.3 Help

Built-in IDE macros

PyCharm provides a number of built-in macros, which are variables that you can use to specify various paths, options, and other command-line arguments for external tools and run configurations. Dialog fields that accept macros as values have a plus icon on them:

Add an IDE macro

The value of a macro depends on the current context. For example, if you need to pass the name of the directory that contains the current file, you can use $FileDirName$. Or if you need the full path: $FileDir$.

Macro

Description

$WORKSPACE_DIR$

The path to the workspace where the current project belongs. The workspace is the root of the open file hierarchy and can include multiple projects.

$PROJECT_DIR$

The root of the project where run.json is located. A project is typically a collection of files for developing and building an application such as a Maven or Node.js project.

$USER_HOME$

User home directory.

$FILE$

The absolute path to the current file, including the extension.

$AffectedModuleNames$

The names of modules that are related to the current file, separated by commas.

$ClipboardContent$

The current contents of the system clipboard.

$ColumnNumber$

The column number where the caret is located in the current file.

$ContentRoot$

The path to the content root to which the current file belongs.

$FileDir$

The absolute path to the directory that contains the current file.

$FileDirName$

The name of the directory that contains the current file.

$FileDirPathFromParent(dir)$

The path to the directory that contains the current file relative to a parent directory specified as the parameter dir.

Argument 1: /Users/jetbrains/myProjects/FileDirPathFromParent/ Argument 2: 1

$FileDirRelativeToProjectRoot$

The path to the directory that contains the current file relative to the module's content root.

$FileDirRelativeToSourcepath$

The path to the directory that contains the current file relative to the sourcepath root.

$FileEncoding$

The encoding of the current file.

$FileExt$

The extension of the current file.

$FileName$

The name of the current file (including all extensions).

$FileNameWithoutAllExtensions$

The name of the current file without any extensions. This is useful when the file's extension got duplicated. It will remove any periods and everything that follows.

For example, if the file is hello.txt.txt, the $FileNameWithoutAllExtensions$ macro will return hello.

$FileNameWithoutExtension$

The name of the file without the extension. This removes only one occurrence of a period followed by an extension.

For example, if the file is hello.txt.txt, the $FileNameWithoutExtension$ macro will return hello.txt.

$FileParentDir$

The name of the parent directory to the directory where the current file is located.

$FilePath$

The absolute path to the current file.

$FilePathRelativeToProjectRoot$

The path to the current file relative to the module's content root.

$FilePathRelativeToSourcepath$

The path to the current file relative to the sourcepath root.

$FilePrompt$

Shows the file system dialog to select the file.

$FileRelativeDir$

The path to the directory where the current file is located relative to the module's content root.

$FileRelativePath$

The path to the current file relative to the module's content root.

$IsMake$

Returns true if compilation was performed with make.

$LineNumber$

The line number where the caret is located in the current file.

$ModuleFileDir$

The absolute path to the directory where the current module file is located.

$ModuleFilePath$

The absolute path to the current module file.

$ModuleName$

The name of the current module file without the extension.

$ModuleSdkPath$

The path to the project interpreter.

$ModuleSourcePath$

The current module's source path.

$OSName$

The name of the operating system in lower case.

It returns the value of System.getProperty("os.name") truncated to the first space character. So it doesn't contain specific versions, only the OS family, such as windows, mac, or linux.

$Password$

Shows a dialog to specify a password. Similar to $Prompt$, but with masked input.

You can optionally specify prompt text by adding it after a colon, for example: $Password:API token$

$ProjectFileDir$

The absolute path to the current project directory.

$ProjectName$

The name of the current project directory.

$Projectpath$

The current project's source path.

$Prompt$

Shows a dialog to pass an arbitrary string.

You can optionally specify prompt text and the default value separated by colons, for example: $Prompt:Username:Alice$

$PyInterpreterDirectory$

The directory containing the Python interpreter selected for the project.

$RemoteProjectFileDir$

The absolute path to the project directory on a remote server.

$SelectedText$

The text currently selected in the editor.

$SelectionEndColumn$

The column number where the selection ends.

$SelectionEndLine$

The line number where the selection ends.

$SelectionStartColumn$

The column number where the selection starts.

$SelectionStartLine$

The line number where the selection starts.

$Sourcepath$

The complete sourcepath of the project.

$SourcepathEntry$

The entry in the sourcepath related to the current file.

$TempDir$

The directory for temporary files.

On Windows, it either returns the value of the %TEMP% environment variable or falls back to AppData\Local\Temp under the user's home directory (as returned by System.getProperty("user.home")) .

On other operating systems, $TempDir$ returns /tmp.

$UnixSeparators(path)$

Takes a path as the parameter and converts all separators to forward slashes.

For example, $UnixSeparators(\foo\bar)$ will return /foo/bar.

Paths to resources outside the project

You can use path variables to point to resources outside the project. Add configured path variables the same way as you add macros – with dollar signs before and after the variable: $MY_VAR$.

Create a new path variable

  1. Press Ctrl+Alt+S to open settings and then select Appearance & Behavior | Path Variables.

  2. Click the Add button, enter the name and value of the variable, and click OK to apply the changes.

Custom macros

You can define a custom macro for your plugin by using the com.intellij.ide.macro.Macro extension point. After that, register the macro in plugin.xml:

<macro implementation="full.macro.class.Name"/>

For more information about the available extension points, refer to IntelliJ Platform Plugin SDK documentation.

Last modified: 08 October 2024