[//]: # (title: Live Templates) *Live Templates* are customizable rules that allow developers to abbreviate repetitive text patterns or surround code fragments with repetitive constructs in the editor. When a user types the designated abbreviation followed by a configurable *expansion key* (usually `Tab`), the IDE transforms the preceding input sequence to its full-length output, and update the cursor position. For example, consider a `for` loop. Typically, the end user would need to type `for (int i = 0; i < 10; i++) {}`. This pattern may be shortened to `fori` and the remaining contents will be expanded, leaving the following structure: ```java for (int i = [|]; i < []; i++) { [] } ``` As the user completes each section of the `for` loop and presses `Tab`, the cursor advances to the next position in the editor. Another use-case for live templates is surrounding the selected code with additional constructs. When a user selects a code fragment and invokes the Code | Surround With... action and chooses the template from the list, the code is wrapped with the content defined in the template. Consider the following Java method with the selected fragment: ```java public void testMethod() { getActions() } ``` Invoking the Code | Surround With... action and selecting the Iterate Iterable or array template would transform the code to: ```java public void testMethod() { for (Action action : getActions()) { } } ``` > See the [](surround_with.md) section for the information on how to implement more advanced code surrounding. > {type="note"} For more information about creating Custom Live Templates, refer to the [corresponding documentation](https://www.jetbrains.com/idea/help/creating-and-editing-live-templates.html). These sections describe how to add Live Templates, and their associated building blocks, to plugins. * [Providing Live Templates](template_support.md) * [Creating New Functions for Live Templates](new_macros.md)