Sublime Text Unofficial Documentation¶
About This Documentation¶
This is the unofficial documentation for the Sublime Text editor.
The sublime what? What are you talking about!?
Sublime Text is a text editor for code and prose. It does away with many repetitive tasks so you can focus on your work. And it’s fun to use!
If you’re coming here for the first time, we encourage you to read through the Basic Concepts section before you continue.
Happy learning!
Installation¶
The process of installing Sublime Text is different for each platform.
Make sure to read the conditions for use on the official site. Sublime Text is not free.
32 bits or 64 bits?¶
Choose the 64-bit version if you’re running a 64-bit operating system, otherwise the 32-bit version.
On Windows, if in doubt, choose the 32-bit version. Modern 64-bit versions of Windows can run 32-bit software.
On Linux run this command in your terminal to check your operating system’s type:
uname -m
For OS X, you can ignore this section: there is only one version of Sublime Text for OS X.
Windows¶
Portable or Not Portable?¶
Sublime Text comes in two flavors for Windows: normal, and portable. If you need the portable installation, you probably know already. Otherwise, go with the normal one.
Normal installations separate data between two folders: the installation folder proper, and the data directory. These concepts are explained later in this guide. Normal installations also integrate Sublime Text with the Windows context menu.
Portable installations will keep all files Sublime Text needs to run in one single folder. You can then move this folder around and the editor will still work.
How to Install the Normal Version of Sublime Text¶
Download the installer, doubleclick on it and follow the onscreen instructions.
How to Install the Portable Version of Sublime Text¶
Download the package and uncompress it to a folder of your choice. You will find the sublime_text.exe executable inside that folder.
OS X¶
Download and open the .dmg file, and then drag the Sublime Text 3 bundle into the Applications folder.
Linux¶
You can download the package and uncompress it manually. Alternatively, you can use the command line.
For i386
cd ~
wget http://c758482.r82.cf2.rackcdn.com/sublime-text_build-3047_i386.deb
For x64
cd ~
wget http://c758482.r82.cf2.rackcdn.com/sublime-text_build-3047_amd64.deb
For i386
cd ~
wget http://c758482.r82.cf2.rackcdn.com/sublime_text_3_build_3047_x32.tar.bz2
tar vxjf sublime_text_3_build_3047_x32.tar.bz2
For x64
cd ~
wget http://c758482.r82.cf2.rackcdn.com/sublime_text_3_build_3047_x64.tar.bz2
tar vxjf sublime_text_3_build_3047_x64.tar.bz2
Now we should move the uncompressed files to an appropriate location.
sudo mv Sublime\ Text\ 3 /opt/
Lastly, we create a symbolic link to use at the command line.
sudo ln -s /opt/Sublime\ Text\ 3/sublime_text /usr/bin/sublime
In Ubuntu, if you also want to add Sublime Text to the Unity luncher, read on.
First we need to create a new file.
sudo sublime /usr/share/applications/sublime.desktop
Then copy the following into it.
[Desktop Entry]
Version=3.0
Name=Sublime Text 3
# Only KDE 4 seems to use GenericName, so we reuse the KDE strings.
# From Ubuntu's language-pack-kde-XX-base packages, version 9.04-20090413.
GenericName=Text Editor
Exec=sublime
Terminal=false
Icon=/opt/Sublime Text 3/Icon/48x48/sublime_text.png
Type=Application
Categories=TextEditor;IDE;Development
X-Ayatana-Desktop-Shortcuts=NewWindow
[NewWindow Shortcut Group]
Name=New Window
Exec=sublime -n
TargetEnvironment=Unity
If you’ve registered your copy of Sublime Text, but every time you open it you’re asked to enter your license, you should try running this command.
sudo chown -R username:username /home/username/.config /sublime-text-3
Just replace username with your account’s username. This should fix the permission error in the case that you opened up Sublime Text as root when you first entered the license.
Living Dangerously... or Not¶
Sublime Text has three release channels:
If you are working on a NASA project or are on a tight deadline, keep using the stable releases and stop reading here. Stable releases are better tested and more reliable for everyday use than the others. They come out roughly once a month. The majority of users will want to use stable releases only.
The dev and nightly channels are unstable, which likely means that builds published through them will contain bugs and not work reliably. They are updated more often than stable releases.
Dev builds are available for everyone. On average, they’re released twice a month. While not yet ready for everyday use, they showcase new features in a mostly unbroken fashion.
Finally, nightly builds are the bleeding edge, with frequent updates and also frequent problems of various degrees of severity. They are fun to try out, but do so at your own risk. Nightly builds are only available for registered users.
Basic Concepts¶
Overview¶
To fully understand the rest of this guide, you need to be familiar with the concepts presented in this section.
Conventions¶
Written from the perspective of a Windows user, most instructions will only require trivial changes to work on other platforms.
Relative paths, like Packages/User, start at the data directory unless otherwise noted. The data directory is explained further below.
We assume default key bindings when indicating keyboard shortcuts. If you’re using a non-English keyboard layout, note that some key bindings won’t match your locale’s keyboard. This is due to the way Sublime Text maps keys to commands.
With Great Power Comes A Lot of Questions¶
Unquestionably a versatile tool for programmers, you don’t need to be one in order to use Sublime Text, or even to configure it extensively. If you’re a hacker, however, you are in for a great many pleasant surprises: Sublime Text can be infinitely customized and extended. You can start using it efficiently out of the box, but spending some time tailoring it to your exact needs will make it even better.
This guide will teach you how to configure Sublime Text.
Sublime Text can’t be mastered in a day, but it’s built on a handful of pervasive ideas that make for a consistent and easily understandable system once all the pieces come together.
In the following paragraphs, we’ll outline key aspects that may not click in your mind until you’ve spent some time using the editor. Experiment, look around in this guide and, eventually, everything will fall into place.
The Data Directory¶
Nearly all of the interesting files for users live under the data directory. This is a platform-dependent location:
- Windows: %APPDATA%\Sublime Text 3
- OS X: ~/Library/Application Support/Sublime Text 3
- Linux: ~/.config/sublime-text-3
For portable installations, look inside Sublime Text 3/Data. Here, the Sublime Text 3 part refers to the directory to which you’ve extracted the compressed portable files.
Note that only in portable installations does a directory named Data exist. For the remaining installation types, the data directory is the location indicated above.
The Packages Directory¶
This is a key directory: all resources for supported programming and markup languages are stored here. A package is a directory or zip file containing related files having a special meaning for Sublime Text.
You can access the packages directory from the main menu (Preferences | Browse Packages...), or by means of an API call: sublime.packages_path(). In this guide, we refer to this location as Packages, packages path, packages folder or packages directory.
The User Package¶
Packages/User is a catch-all directory for custom plugins, snippets, macros, etc. Consider it your personal area within the packages folder. Sublime Text will never overwrite the contents of Packages/User during upgrades.
The Python Console and the Python API¶
This information is especially interesting for programmers. For other users, you just need to know that Sublime Text enables users with programming skills to add their own features to the editor. (So go learn how to program; it’s great fun!)
Sublime Text comes with an embedded Python interpreter. It’s an useful tool to inspect the editor’s settings and to quickly test API calls while developing plugins.
To open the Python console, press Ctrl+` or select View | Show Console from the main menu.
Confused? Let’s try again more slowly:
Python is a programming language known to be easy for beginners and very powerful at the same time. API is short for ‘Application Programming Interface’, which is a fancy way of saying that Sublime Text 3 is prepared to be programmed by the user. Put differently, Sublime Text gives the user access to its internals through Python. Finally, a console is a little window inside Sublime Text that lets you type in short snippets of Python code and run them. The console also shows text output by Sublime Text or its plugins.
Your System’s Python vs the Sublime Text 3 Embedded Python¶
Sublime Text 3 comes with its own Python interpreter and it’s separate from your system’s Python installation.
The embedded interpreter is intended only to interact with the plugin API, not for general development.
Packages, Plugins, Resources and Other Things That May Not Make Sense to You Now¶
Almost every aspect of Sublime Text can be extended or customized. For now, this is all you need to understand. This vast flexibility is the reason why you will learn about so many configuration files: there simply must be a place to specify all your preferences.
Among other things, you can modify the editor’s behavior, add macros and snippets, extend menus... and even create whole new features –where feature means ‘anything you can think of’. OK, right, there might be things you can’t do, but you’re definitely spoiled for choice.
All these configuration files we’re referring to are simple text files following a special structure or format: JSON predominates, but you’ll find some XML files, and Python files too for the more advanced extensibility options.
In this guide, for brevity, we refer collectively to all these disparate configuration files as resources.
Sublime Text will look for resources inside the packages folder. And what is a package, you ask? We’ll talk at length about them, but the short version is that, to keep things tidy, the editor has a notion of a package, which is a folder containing resources that belong together (maybe they all help compose emails faster, write HTML efficiently, enhance the coding experience for C, Ruby, Go...).
Textmate Compatibility¶
This information is mainly useful for Textmate expats who’ve found a new home in Sublime Text. Textmate is an editor for the Mac.
Sublime Text compatibility with Textmate bundles is good excluding commands, which are incompatible. Additionally, Sublime Text requires all syntax definitions to have the .tmLanguage extension, and all preferences files to have the .tmPreferences extension. This means that .plist files will be ignored, even if they are located under a Syntaxes or Preferences subdirectory.
Vi/Vim Emulation¶
This information is mainly useful for dinosaurs and people who like to drop the term RSI in conversations. Vi is an ancient modal editor that lets the user perform all operations from the keyboard. Vim, a modern version of vi, is still in widespread use.
Sublime Text provides vi emulation through the Vintage package. The Vintage package is ignored by default. Read more about Vintage in the official documentation.
An evolution of Vintage called Vintageous offers a better Vi editing experience and is updated more often than Vintage. Vintageous is an open source project.
Emacs¶
This information is hardly useful for anyone. Emacs is... Well, nobody really knows what emacs is, but some people edit text with it.
If you are an emacs user, you’re probably not reading this.
Be Sublime, My Friend¶
Borrowing from Bruce Lee’s wisdom, Sublime Text can become almost anything you need it to be. In skilled hands, blah, blah, blah.
Empty your mind; be sublime, my friend.
Editing¶
Overview¶
Sublime Text is brim-full of editing features. This topic just scratches the surface of what’s possible.
Multiple Selections¶
Multiple selections let you make sweeping changes to your text efficiently. Any praise about multiple selections is an understatement. This is why:
Select some text and press Ctrl + D to add more instances. If you want to skip the current instance, press Ctrl + K, Ctrl + D.
If you go too far, press Ctrl + U to deselect the current instance.
Transforming Multiple Selections into Lines¶
Ctrl + L expands the selections to the end of the line. Ctrl + Shift + L splits the selections into lines.
You can copy multiple selected lines to a separate buffer, edit them there, select the content again as multiple lines and then paste them back into place in the first buffer.
Column Selection¶
You can select a rectangular area of a file. Column selection makes use of multiple selections.
It’s possible to add blocks of text to or remove them from the selection.
Using the Mouse¶
Windows
Select Block | Right Mouse Button + ⇧ |
Add to Selection | Ctrl + Right Mouse Button + ⇧ |
Remove from Selection | Alt + Right Mouse Button + ⇧ |
Linux
Select Block | Right Mouse Button + ⇧ |
Add to Selection | Ctrl + Right Mouse Button + ⇧ |
Remove from Selection | Alt + Right Mouse Button + ⇧ |
OS X
Select Block | Right Mouse Button + ⌥ |
Add to Selection | ⌘ + Right Mouse Button + ⇧ |
Remove from Selection | ⌘ + ⇧ + Right Mouse Button + ⇧ |
Using the Keyboard¶
Windows | Ctrl + Alt + Up and Ctrl + Alt + Down |
Linux | Alt + ⇧ + Up and Alt + ⇧ + Down |
OS X | ⌃ + ⇧ + Up and ⌃ + ⇧ + Down |
Other Ways of Selecting Text¶
The list is long; all available options can be found under Selection. To name a few:
- Select subwords (Alt + Shift + <arrow>)
- Expand selection to brackets (Ctrl + Shift + M)
- Expand selection to indentation (Ctrl + Shift + J)
- Expand selection to scope (Ctrl + Shift + Space)
Transposing Things¶
Need to swap two letters or, better yet, two words? Experiment with Ctrl + T.
And much, much more...¶
The Edit, Selection, Find and Goto menus are good places to look for handy editing tools. You might end up using just a few of them, but the rest will still be there for when you need them.
Search and Replace¶
Sublime Text features two main types of search:
Search and Replace - Single File¶
Searching¶
To open the search panel for the active file, press Ctrl + F. Some options and actions available through this panel can be controlled from the keyboard:
Toggle Regular Expressions | Alt + R |
Toggle Case Sensitivity | Alt + C |
Toggle Exact Match | Alt + W |
Find Next | Enter |
Find Previous | Shift + Enter |
Find All | Alt + Enter |
Incremental Search¶
The incremental search panel is bound to Ctrl + I. The only difference with the regular search panel lies in the behavior of the Enter key: in incremental searches, it will select the next match in the file and dismiss the search panel for you. Choosing between this panel or the regular search panel is mainly a matter of preference.
Replacing Text¶
To open the replace planel, press Ctrl + H. Some actions available through this panel can be controlled from the keyboard.
Replace All | Ctrl + Alt + Enter |
Tips¶
Other Ways of Searching in Files¶
Goto Anything provides the # operator to search in the active file. The search term will be the text following the operator.
Multiline Search¶
You can type in multiline search patterns into search panels. To enter newline characters, press Ctrl + Enter. Note that search panels are resizable.
Search and Replace - Multiple Files¶
Searching¶
To open the search panel for files, press Ctrl + Shift + F. You can use the keyboard to control some search panel options and search actions:
Toggle Regular Expressions | Alt + R |
Toggle Case Sensitivity | Alt + C |
Toggle Exact matches | Alt + W |
Find Next | Enter |
Search Scope¶
The Where field in the search panel determines search scope. You can define scopes in several ways:
- Adding individual directories (Unix-style paths, even on Windows)
- Adding/excluding files based on a pattern
- Adding symbolic locations (<open folders>, <open files>)
It is also possible to combine these filters using commas; for example:
/C/Users/Joe/Top Secret,-*.html,<open files>
Press the ... button in the search panel to display a menu containing these options.
Results Format¶
In the search panel, you can customize the display of results with the following options:
- Show in Separate Buffer/Output Panel
- Show Context
We’ll examine them in turn, but first let’s talk about a powerful tool for searching text: regular expressions.
Regular Expressions¶
Regular Expressions find complex patterns in text. To take full advantage of the search and replace facilities in Sublime Text, you should at least learn the basics of regular expressions. In this guide we won’t explain how to use regular expressions.
Typing out regular expression gets boring fast, and saying it is even more annoying, so instead nerds usually shorten that to regexp or regex.
This is how a regex might look:
(?:Sw|P)i(?:tch|s{2})\s(?:it\s)?of{2}!
Regexes are known to hurt people’s feelings.
To use regular expressions in Sublime Text, you first need to activate them in the various search panels. The search term will otherwise be interpreted literally.
Sublime Text uses the Boost syntax for regular expressions.
Build Systems (Batch Processing)¶
Build systems let you run your files through external programs like make, tidy, interpreters, etc.
Executables called from build systems must be in your PATH. For more information about making sure the PATH seen by Sublime Text is set correctly, see Troubleshooting Build Systems.
File Format¶
Build systems are JSON files and have the extension .sublime-build.
Example¶
Here’s an example of a build system:
{
"cmd": ["python", "-u", "$file"],
"file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
"selector": "source.python"
}
- cmd
Required. This option contains the actual command line to be executed:
python -u /path/to/current/file.ext
- file_regex
- A Perl-style regular expression to capture error information from an external program’s output. This information is used to help you navigate through error instances with F4.
- selector
- If the Tools | Build System | Automatic option is set, Sublime Text will automatically find the corresponding build system for the active file by matching selector to the file’s scope.
In addition to options, you can use some variables in build systems too, as we have done above with $file, which expands to the active buffer’s filename.
Where to Store Build Systems¶
Build systems must be located somewhere under the Packages folder (e.g. Packages/User). Many packages include their own build systems.
Running Build Systems¶
Build systems can be run by pressing F7 or from Tools | Build.
See also
- Reference for build systems
- Complete documentation on all available options, variables, etc.
Customizing Sublime Text¶
Sublime Text can be fully customized. In the following topics, we outline the most common options. In particular, we don’t cover themes and color schemes, an immensely configurable area of Sublime Text.
Settings¶
Sublime Text stores configuration data in .sublime-settings files. Flexibility comes at the price of a slightly complex system for applying settings. However, here’s a rule of thumb:
Always place your personal settings files under Packages/User to guarantee they will take precedence over any other conflicting settings files.
With that out of the way, let’s unveil, to please masochistic readers, the mysteries of how settings work.
Format¶
Settings files use JSON and have the .sublime-settings extension.
Types of Settings¶
The purpose of each .sublime-settings file is determined by its name. These names can be descriptive (like Preferences (Windows).sublime-settings or Minimap.sublime-settings), or they can be related to what the settings file is controlling. For example, file type settings need to carry the name of the .tmLanguage syntax definition for the file type. Thus, for the
.py file type, whose syntax definition is contained in Python.tmLanguage, the corresponding settings file would be called Python.sublime-settings.
Also, some settings files only apply to specific platforms. This can be inferred from the filenames: Preferences (Windows).sublime-settings, Preferences (Linux).sublime-settings, etc.
This is important: Platform-specific settings files in the Packages/User folder are ignored. In this way, you can be sure that a single Platform-specific settings file will override all others.
How to Access and Edit Common Settings Files¶
Unless you need very fine-grained control over settings, you can access the main configuration files through the Preferences | Settings - User and Preferences | Settings - More menu items. Editing Preferences - Settings Default isn’t a smart thing to do, because changes will be reverted with every update to the software. However, you can use that file for reference: it contains comments explaining the purpose of all available global and file type settings.
Order of Precedence of .sublime-settings Files¶
The same settings file (such as Python.sublime-settings) can appear in multiple places. All settings defined in identically named files will be merged together and overwritten according to predefined rules. See Merging and Order of Precedence for more information.
Let us remember again that any given settings file in Packages/User ultimately overrides every other settings file of the same name.
In addition to settings files, Sublime Text maintains session data—settings for the particular set of files being currently edited. Session data is updated as you work on files, so if you adjust settings for a particular file in any way (mainly through API calls), they will be recorded in the session and will take precedence over any applicable .sublime-settings files.
To check the value of a setting for a particular file being edited, use view.settings().get(<setting_name>) from the console.
Finally, it’s also worth noting that some settings may be automatically adjusted for you. Keep this in mind if you’re puzzled about some setting’s value. For instance, this is the case for certain whitespace-related settings and the syntax setting.
Below, you can see the order in which Sublime Text would process a hypothetical hierarchy of settings for Python files on Windows:
- Packages/Default/Preferences.sublime-settings
- Packages/Default/Preferences (Windows).sublime-settings
- Packages/User/Preferences.sublime-settings
- Packages/Python/Python.sublime-settings
- Packages/User/Python.sublime-settings
- Session data for the current file
- Auto adjusted settings
Global Editor Settings and Global File Settings¶
These settings are stored in Preferences.sublime-settings and Preferences (<platform>).sublime-settings files. The defaults can be found in Packages/Default.
Valid names for <platform> are Linux, OSX, and Windows.
File Type Settings¶
If you want to target a specific file type, name the .sublime-settings file after the file type’s syntax definition. For example, if our syntax definition was called Python.tmLanguage, we’d need to call our settings file Python.sublime-settings.
Settings files for specific file types usually live in packages, like Packages/Python, but there can be multiple settings files in separate locations for the same file type.
Similarly to global settings, one can establish platform-specific settings for file types. For example, Python (Linux).sublime-settings would be consulted only under Linux.
Also, let us stress that, under Packages/User, only Python.sublime-settings would be read, but not any Python (<platform>).sublime-settings variants.
Regardless of its location, any file-type-specific settings file has precedence over every global settings file affecting the file type.
Where to Store User Settings (Once Again)¶
Whenever you want to save settings, especially if they should be preserved between software updates, place the corresponding .sublime-settings file in Packages/User.
Indentation¶
See also
- Indentation
- Official Sublime Text Documentation.
Key Bindings¶
See also
- Reference for key bindings
- Complete documentation on key bindings.
Key bindings let you map sequences of key presses to actions.
File Format¶
Key bindings are defined in JSON and stored in .sublime-keymap files. In order to integrate better with each platform, there are separate key map files for Linux, OSX and Windows. Only key maps for the corresponding platform will be loaded.
Example¶
Here’s an excerpt from the default key map for Windows:
[
{ "keys": ["ctrl+shift+n"], "command": "new_window" },
{ "keys": ["ctrl+o"], "command": "prompt_open_file" }
]
Defining and Overriding Key Bindings¶
Sublime Text ships with a default key map (for example, Packages/Default/Default (Windows).sublime-keymap). In order to override the key bindings defined there, or to add new ones, you can store them in a separate key map of higher precedence: for example Packages/User/Default (Windows).sublime-keymap.
See Merging and Order of Precedence for more information on how Sublime Text sorts files for merging.
Advanced Key Bindings¶
Simple key bindings consist of a key combination and a command to be executed. However, there are more complex syntaxes for passing arguments and contextual awareness.
Passing Arguments¶
Arguments are specified in the args key:
{ "keys": ["shift+enter"], "command": "insert", "args": {"characters": "\n"} }
Here, \n is passed to the insert command when you press Shift+Enter.
Contexts¶
Contexts determine whether a given key binding will be enabled based on the caret’s position or some other state.
{ "keys": ["escape"], "command": "clear_fields", "context":
[
{ "key": "has_next_field", "operator": "equal", "operand": true }
]
}
This key binding translates to clear snippet fields and resume normal editing if there is a next field available. Thus, unless you are cycling through snippet fields, pressing ESC will not trigger this key binding. (However, something else might occur instead if ESC happens to be bound to a different context too—and that’s likely to be the case for ESC.)
Extending Sublime Text¶
The following topics show various ways in which Sublime Text can be extended with additional functionality.
Commands¶
Commands are ubiquitous in Sublime Text: key bindings, menu items and macros all work through the command system. They are found in other places too.
Some commands are implemented in the editor’s core, but many of them are provided as Python plugins. Every command can be called from a Python plugin.
Command Dispatching¶
Normally, commands are bound to the application object, a window object or a view object. Window objects, however, will dispatch commands based on input focus, so you can issue a view command from a window object and the correct view instance will be found for you.
Anatomy of a Command¶
Commands have a name separated by underscores (snake_case) like hot_exit, and can take a dictionary of arguments whose keys must be strings and whose values must be JSON types. Here are a few examples of commands run from the Python console:
view.run_command("goto_line", {"line": 10})
view.run_command('insert_snippet', {"contents": "<$SELECTION>"})
view.window().run_command("prompt_select_project")
See also
- Reference for commands
- Command reference.
Macros¶
Macros are a basic automation facility comprising sequences of commands. Use them whenever you need to repeat the exact same steps to perform an operation.
Macro files are JSON files with the extension .sublime-macro. Sublime Text ships with a few macros providing core functionality, such as line and word deletion. You can find these under Tools | Macros.
How to Record Macros¶
To start recording a macro, press Ctrl+q and subsequently execute the desired steps one by one. When you’re done, press Ctrl+q again to stop the macro recorder. Your new macro won’t be saved to a file, but kept in the macro buffer instead. Now you will be able to run the recorded macro by pressing Ctrl+Shift+q, or save it to a file by selecting Tools | Save macro...
Note that the macro buffer will remember only the latest recorded macro. Also, macros only record commands sent to the buffer: window-level commands, such creating a new file, will be ignored.
How to Edit Macros¶
As an alternative to recording a macro, you can edit it by hand. Just save a new file with the extension .sublime-macro under PackagesUser and add commands to it. Macro files have this format:
[
{"command": "move_to", "args": {"to": "hardeol"}},
{"command": "insert", "args": {"characters": "\n"}}
]
See the ../core/commands section for more information on commands.
If you’re editing a macro by hand, you need to escape quotation marks, blank spaces and backslashes by preceding them with \.
Where to Store Macros¶
Macro files can be stored in any package folder, and then will show up under Tools | Macros | <PackageName>.
Snippets¶
Whether you are coding or writing the next vampire best-seller, you’re likely to need certain short fragments of text again and again. Use snippets to save yourself tedious typing. Snippets are smart templates that will insert text for you, adapting it to their context.
To create a new snippet, select Tools | New Snippet... Sublime Text will present you with an skeleton for it.
Snippets can be stored under any package’s folder, but to keep it simple while you’re learning, you can save them to your Packages/User folder.
Snippets File Format¶
Snippets typically live in a Sublime Text package. They are simplified XML files with the extension sublime-snippet. For instance, you could have a greeting.sublime-snippet inside an Email package.
The structure of a typical snippet is as follows (including the default hints Sublime Text inserts for your convenience):
<snippet>
<content><![CDATA[Type your snippet here]]></content>
<!-- Optional: Tab trigger to activate the snippet -->
<tabTrigger>xyzzy</tabTrigger>
<!-- Optional: Scope the tab trigger will be active in -->
<scope>source.python</scope>
<!-- Optional: Description to show in the menu -->
<description>My Fancy Snippet</description>
</snippet>
The snippet element contains all the information Sublime Text needs in order to know what to insert, whether to insert and when. Let’s see all of these parts in turn.
- content
The actual snippet. Snippets can range from simple to fairly complex templates. We’ll look at examples of both later.
Keep the following in mind when writing your own snippets:
- If you want to get a literal $, you have to escape it like this: \$.
- When writing a snippet that contains indentation, always use tabs. When the snippet is inserted, the tabs will be transformed into spaces if the option translateTabsToSpaces is true.
- The content must be included in a <![CDATA[...]]> section. Snippets won’t work if you don’t do this!
- The content of your snippet must not contain ]]> because this string of characters will prematurely close the <![CDATA[…]]> section, resulting in an XML error. To work around this pitfall, you can insert an undefined variable into the string like this: ]]$NOT_DEFINED>. This modified string passes through the XML parser without closing the content element’s <![CDATA[…]]> section, but Sublime Text will replace $NOT_DEFINED with an empty string before inserting the snippet into your document. In other words, ]]$NOT_DEFINED> in your snippet file content will be written as ]]> when you trigger the snippet.
- tabTrigger
Defines the sequence of keys that must be pressed to insert this snippet. After typing this sequence, the snippet will kick in as soon as you hit the Tab key.
A tab trigger is an implicit key binding.
- scope
- Scope selector determining the context where the snippet will be active. See Scopes for more information.
- description
- Used for displaying the snippet in the Snippets menu. If unavailable, Sublime Text defaults to the name of the snippet.
With this information, you can start writing your own snippets as described in the next sections.
Note
In the interest of brevity, we’re only including the content element’s text in examples unless otherwise noted.
Snippet Features¶
Environment Variables¶
Snippets have access to contextual information in the form of environment variables. Sublime Text automatically sets the values of the variables listed below.
You can also add your own variables to provide extra information. These custom variables are defined in .sublime-options files.
Let’s see a simple example of a snippet using variables:
====================================
USER NAME: $TM_FULLNAME
FILE NAME: $TM_FILENAME
TAB SIZE: $TM_TAB_SIZE
SOFT TABS: $TM_SOFT_TABS
====================================
# Output:
====================================
USER NAME: guillermo
FILE NAME: test.txt
TAB SIZE: 4
SOFT TABS: YES
====================================
Fields¶
With the help of field markers, you can cycle through positions within the snippet by pressing the Tab key. Fields are used to walk you through the customization of a snippet after it’s been inserted.
First Name: $1
Second Name: $2
Address: $3
In the example above, the cursor will jump to $1 if you press Tab once. If you press Tab a second time, it will advance to $2, etc. You can also move backwards in the series with Shift+Tab. If you press Tab after the highest tab stop, Sublime Text will place the cursor at the end of the snippet’s content, enabling you to resume normal editing.
If you want to control where the exit point should be, use the $0 mark.
You can break out of the field cycle any time by pressing Esc.
Mirrored Fields¶
Identical field markers mirror each other: when you edit the first one, the rest will be populated in real time with the same value.
First Name: $1
Second Name: $2
Address: $3
User name: $1
In this example, “User name” will be filled out with the same value as “First Name”.
Placeholders¶
By expanding the field syntax a little bit, you can define default values for a field. Placeholders are useful whenever there’s a general case for your snippet, but still you still want to keep it customizable.
First Name: ${1:Guillermo}
Second Name: ${2:López}
Address: ${3:Main Street 1234}
User name: $1
Variables can be used as placeholders:
First Name: ${1:Guillermo}
Second Name: ${2:López}
Address: ${3:Main Street 1234}
User name: ${4:$TM_FULLNAME}
And you can nest placeholders within other placeholders too:
Test: ${1:Nested ${2:Placeholder}}
Substitutions¶
Warning
This section is a draft and may contain inaccurate information.
In addition to the placeholder syntax, tab stops can specify more complex operations with substitutions. Use substitutions to dynamically generate text based on a mirrored tab stop.
The substitution syntax has the following syntaxes:
- ${var_name/regex/format_string/}
- ${var_name/regex/format_string/options}
- var_name
- The variable name: 1, 2, 3...
- regex
- Perl-style regular expression: See the Boost library reference for regular expressions.
- format_string
- See the Boost library reference for format strings.
- options
- Optional. May be any of the following:
- i
- Case-insensitive regex.
- g
- Replace all occurrences of regex.
- m
- Don’t ignore newlines in the string.
With substitutions you can, for instance, underline text effortlessly:
Original: ${1:Hey, Joe!}
Transformation: ${1/./=/g}
# Output:
Original: Hey, Joe!
Transformation: =========
Completions¶
See also
- Reference for completions
- Complete documentation on all available options.
- Sublime Text Documentation
- Official documentation on this topic.
In the spirit of IDEs, completions suggest terms and insert snippets. Completions work through the completions list or, optionally, by pressing Tab.
Note that, in the broader sense of words that Sublime Text will look up and insert for you, completions aren’t limited to completions files, because other sources contribute to the list of words to be completed, namely:
- Snippets
- API-injected completions
- Buffer contents
However, the most explicit way Sublime Text provides you to feed it completions is by means of .sublime-completions files. This topic deals with the creation of a .sublime-completions file as well as with the interactions among all sources for completions.
File Format¶
Completions are JSON files with the .sublime-completions extension. Entries in completions files can contain either snippets or plain strings.
Example¶
Here’s an excerpt from Sublime Text’s HTML completions:
{
"scope": "text.html - source - meta.tag, punctuation.definition.tag.begin",
"completions":
[
{ "trigger": "a", "contents": "<a href=\"$1\">$0</a>" },
{ "trigger": "abbr", "contents": "<abbr>$0</abbr>" },
{ "trigger": "acronym", "contents": "<acronym>$0</acronym>" }
]
}
- scope
- Determines when the completions list will be populated with this list of completions. See Scopes for more information.
In the example above, we’ve only used trigger-based completions, but completions files support simple completions too. Simple completions are just plain strings. Expanding our example with a few simple completions results in a list like this:
{
"scope": "text.html - source - meta.tag, punctuation.definition.tag.begin",
"completions":
[
{ "trigger": "a", "contents": "<a href=\"$1\">$0</a>" },
{ "trigger": "abbr", "contents": "<abbr>$0</abbr>" },
{ "trigger": "acronym", "contents": "<acronym>$0</acronym>" },
"ninja",
"robot",
"pizza"
]
}
Sources for Completions¶
Completions not only originate in .sublime-completions files. Here is the exhaustive list of sources for completions:
- Snippets
- API-injected completions
- .sublime-completions files
- Words in buffer
Priority of Sources for Completions¶
This is the order in which completions are prioritized:
- Snippets
- API-injected completions
- .sublime-completions files
- Words in the buffer
Snippets will always win if the current prefix matches their tab trigger exactly. For the rest of the completion sources, a fuzzy match is performed. Furthermore, snippets always lose with fuzzy matches.
But this is relevant only when the completion is inserted automatically. When a list of completions is shown, snippets will still be listed alongside the other items, even if the prefix only partially matches the snippets’ tab triggers.
How to Use Completions¶
There are two methods for using completions. Even though, when screening them, the priority given to completions always stays the same, the two methods produce different results, as explained next.
Completions can be inserted in two ways:
- Through the completions list (Ctrl+spacebar).
- By pressing Tab.
The Completions List¶
The completions list (Ctrl+spacebar) does its work in two ways: by bringing up a list of suggested words to be completed, or by inserting the best match directly.
If the choice of best completion is ambiguous, an interactive list will be presented to the user, who then will have to select an item himself. Unlike other items, snippets in this list are displayed in the format: <tab_trigger> : <name>, where <tab_trigger> and <name> are variable.
Using Ctrl+spacebar, the completion choice will be automatic only if the list of completion candidates can be narrowed down to one unambiguous choice, given the current prefix.
Tab-Completed Completions¶
If you want to be able to tab-complete completions, the setting tab_completion must be true, which is the default. Snippets’ tab-completion is unaffected by this setting: they always will be completed, or not, according to their tab trigger.
With tab_completion enabled, completion of items is always automatic. This means, unlike the case of the completions list, that Sublime Text will always make the decision for you. The rules for selecting the best completion are the same as described above, but in case of ambiguity, Sublime Text will insert the item it deems most suitable.
Inserting a Literal Tab Character¶
When tab_completion is enabled, you can press Shift+Tab to insert a literal tab character.
Command Palette¶
See also
- Reference for Command Palette
- Complete documentation on the command palette options.
Overview¶
The command palette bound to Ctrl+Shift+P is an interactive list whose purpose is to execute commands. The command palette is fed by entries in .sublime-commands files. Usually, commands that don’t warrant creating a key binding of their own are good candidates for inclusion in a .sublime- commands files.
By default, the command palette includes many useful commands, and provides convenient access to individual settings as well as settings files.
File Format (Commands Files)¶
Commands files use JSON and have the .sublime-commands extension.
Here’s an excerpt from Packages/Default/Default.sublime-commands:
[
{ "caption": "Project: Save As", "command": "save_project_as" },
{ "caption": "Project: Close", "command": "close_project" },
{ "caption": "Project: Add Folder", "command": "prompt_add_folder" },
{ "caption": "Preferences: Default File Settings", "command": "open_file", "args": {"file": "${packages}/Default/Base File.sublime-settings"} },
{ "caption": "Preferences: User File Settings", "command": "open_file", "args": {"file": "${packages}/User/Base File.sublime-settings"} },
{ "caption": "Preferences: Default Global Settings", "command": "open_file", "args": {"file": "${packages}/Default/Global.sublime-settings"} },
{ "caption": "Preferences: User Global Settings", "command": "open_file", "args": {"file": "${packages}/User/Global.sublime-settings"} },
{ "caption": "Preferences: Browse Packages", "command": "open_dir", "args": {"dir": "$packages"} }
]
- caption
- Text for display in the command palette.
- command
- Command to be executed.
- args
- Arguments to pass to command.
How to Use the Command Palette¶
- Press Ctrl+Shift+P
- Select command
The command palette filters entries by context. This means that whenever you open it, you won’t always see all the commands defined in every .sublime-commands file.
Syntax Definitions¶
Syntax definitions make Sublime Text aware of programming and markup languages. Most noticeably, they work together with colors to provide syntax highlighting. Syntax definitions define scopes that divide the text in a buffer into named regions. Several editing features in Sublime Text make extensive use of this fine-grained contextual information.
Essentially, syntax definitions consist of regular expressions used to find text, as well as more or less arbitrary, dot-separated strings called scopes or scope names. For every occurrence of a given regular expression, Sublime Text gives the matching text its corresponding scope name.
Prerequisites¶
In order to follow this tutorial, you will need to install AAAPackageDev, a package intended to ease the creation of new syntax definitions for Sublime Text. It lives in a public Mercurial repository at Bitbucket.
Download the latest .sublime-package file and install it as described in Installation of .sublime-package Files.
File format¶
Sublime Text uses property list (Plist) files to store syntax definitions. However, because editing XML files is a cumbersome task, we’ll use JSON instead, and convert it to Plist format afterwards. This is where the AAAPackageDev package (mentioned above) comes in.
Note
If you experience unexpected errors during this tutorial, chances are AAAPackageDev is to blame. Don’t immediately think your problem is due to a bug in Sublime Text.
By all means, do edit the Plist files by hand if you prefer to work in XML, but always keep in mind their differing needs in regards to escape sequences, etc.
Scopes¶
Scopes are a key concept in Sublime Text. Essentially, they are named text regions in a buffer. They don’t do anything by themselves, but Sublime Text peeks at them when it needs contextual information.
For instance, when you trigger a snippet, Sublime Text checks the scope bound to the snippet and looks at the caret’s position in the file. If the caret’s current position matches the snippet’s scope selector, Sublime Text fires it off. Otherwise, nothing happens.
Scopes can be nested to allow for a high degree of granularity. You can drill down the hierarchy very much like with CSS selectors. For instance, thanks to scope selectors, you could have a key binding activated only within single quoted strings in Python source code, but not inside single quoted strings in any other language.
Sublime Text inherits the idea of scopes from Textmate, a text editor for Mac. Textmate’s online manual contains further information about scope selectors that’s useful for Sublime Text users too.
How Syntax Definitions Work¶
At their core, syntax definitions are arrays of regular expressions paired with scope names. Sublime Text will try to match these patterns against a buffer’s text and attach the corresponding scope name to all occurrences. These pairs of regular expressions and scope names are known as rules.
Rules are applied in order, one line at a time. Each rule consumes the matched text region, which therefore will be excluded from the next rule’s matching attempt (save for a few exceptions). In practical terms, this means that you should take care to go from more specific rules to more general ones when you create a new syntax definition. Otherwise, a greedy regular expression might swallow parts you’d like to have styled differently.
Syntax definitions from separate files can be combined, and they can be recursively applied too.
Your First Syntax Definition¶
By way of example, let’s create a syntax definition for Sublime Text snippets. We’ll be styling the actual snippet content, not the .sublime-snippet file.
Note
Since syntax definitions are primarily used to enable syntax highlighting, we’ll use the phrase to style to mean to break down a source code file into scopes. Keep in mind, however, that colors are a different thing from syntax definitions and that scopes have many more uses besides syntax highlighting.
Here are the elements we want to style in a snippet:
- Variables ($PARAM1, $USER_NAME...)
- Simple fields ($0, $1...)
- Complex fields with placeholders (${1:Hello})
- Nested fields (${1:Hello ${2:World}!})
- Escape sequences (\\$, \\<...)
- Illegal sequences ($, <...)
Note
Before continuing, make sure you’ve installed the AAAPackageDev package as explained above.
Creating A New Syntax Definition¶
To create a new syntax definition, follow these steps:
- Go to Tools | Packages | Package Development | New Syntax Definition
- Save the new file in your Packages/User folder as a .JSON-tmLanguage file.
You now should see a file like this:
{ "name": "Syntax Name",
"scopeName": "source.syntax_name",
"fileTypes": [""],
"patterns": [
],
"uuid": "ca03e751-04ef-4330-9a6b-9b99aae1c418"
}
Let’s examine now the key elements.
- uuid
- Located at the end, this is a unique identifier for this syntax definition. Each new syntax definition gets its own uuid. Don’t modify them.
- name
- The name that Sublime Text will display in the syntax definition drop-down list. Use a short, descriptive name. Typically, you will use the name of the programming language you are creating the syntax definition for.
- scopeName
- The top level scope for this syntax definition. It takes the form source.<lang_name> or text.<lang_name>. For programming languages, use source. For markup and everything else, use text.
- fileTypes
- This is a list of file extensions. When opening files of these types, Sublime Text will automatically activate this syntax definition for them.
- patterns
- A container for your patterns.
For our example, fill the template with the following information:
{ "name": "Sublime Snippet (Raw)",
"scopeName": "source.ssraw",
"fileTypes": ["ssraw"],
"patterns": [
],
"uuid": "ca03e751-04ef-4330-9a6b-9b99aae1c418"
}
Note
JSON is a very strict format, so make sure to get all the commas and quotes right. If the conversion to Plist fails, take a look at the output panel for more information on the error. We’ll explain later how to convert a syntax definition in JSON to Plist.
Analyzing Patterns¶
The patterns array can contain several types of elements. We’ll look at some of them in the following sections. If you want to learn more about patterns, refer to Textmate’s online manual.
Matches¶
Matches take this form:
{ "match": "[Mm]y \s+[Rr]egex",
"name": "string.ssraw",
"comment": "This comment is optional."
}
- match
- A regular expression Sublime Text will use to find matches.
- name
- The name of the scope that should be applied to any occurrences of match.
- comment
- An optional comment about this pattern.
Let’s go back to our example. Make it look like this:
{ "name": "Sublime Snippet (Raw)",
"scopeName": "source.ssraw",
"fileTypes": ["ssraw"],
"patterns": [
],
"uuid": "ca03e751-04ef-4330-9a6b-9b99aae1c418"
}
That is, make sure the patterns array is empty.
Now we can begin to add our rules for Sublime snippets. Let’s start with simple fields. These could be matched with a regex like so:
\$[0-9]+
# or...
\$\d+
However, because we’re writing our regex in JSON, we need to factor in JSON’s own escaping rules. Thus, our previous example becomes:
\\$\\d+
With escaping out of the way, we can build our pattern like this:
{ "match": "\\$\\d+",
"name": "keyword.source.ssraw",
"comment": "Tab stops like $1, $2..."
}
And we can add it to our syntax definition too:
{ "name": "Sublime Snippet (Raw)",
"scopeName": "source.ssraw",
"fileTypes": ["ssraw"],
"patterns": [
{ "match": "\\$\\d+",
"name": "keyword.source.ssraw",
"comment": "Tab stops like $1, $2..."
}
],
"uuid": "ca03e751-04ef-4330-9a6b-9b99aae1c418"
}
We’re now ready to convert our file to .tmLanguage. Syntax definitions use Textmate’s .tmLanguage extension for compatibility reasons. As explained above, they are simply XML files, but in Plist format.
Follow these steps to perform the conversion:
- Select Json to tmLanguage in Tools | Build System
- Press F7
- A .tmLanguage file will be generated for you in the same folder as your .JSON-tmLanguage file
- Sublime Text will reload the changes to the syntax definition
You have now created your first syntax definition. Next, open a new file and save it with the extension .ssraw. The buffer’s syntax name should switch to “Sublime Snippet (Raw)” automatically, and you should get syntax highlighting if you type $1 or any other simple snippet field.
Let’s proceed to creating another rule for environment variables.
{ "match": "\\$[A-Za-z][A-Za-z0-9_]+",
"name": "keyword.source.ssraw",
"comment": "Variables like $PARAM1, $TM_SELECTION..."
}
Repeat the above steps to update the .tmLanguage file, and restart Sublime Text.
Fine Tuning Matches¶
You might have noticed, for instance, that the entire text in $PARAM1 is styled the same way. Depending on your needs or your personal preferences, you may want the $ to stand out. That’s where captures come in. Using captures, you can break a pattern down into components to target them individually.
Let’s rewrite one of our previous patterns to use captures:
{ "match": "\\$([A-Za-z][A-Za-z0-9_]+)",
"name": "keyword.ssraw",
"captures": {
"1": { "name": "constant.numeric.ssraw" }
},
"comment": "Variables like $PARAM1, $TM_SELECTION..."
}
Captures introduce complexity to your rule, but they are pretty straightforward. Notice how numbers refer to parenthesized groups left to right. Of course, you can have as many capture groups as you want.
Arguably, you’d want the other scope to be visually consistent with this one. Go ahead and change it too.
Begin-End Rules¶
Up to now we’ve been using a simple rule. Although we’ve seen how to dissect patterns into smaller components, sometimes you’ll want to target a larger portion of your source code that is clearly delimited by start and end marks.
Literal strings enclosed by quotation marks or other delimiting constructs are better dealt with by begin-end rules. This is a skeleton for one of these rules:
{ "name": "",
"begin": "",
"end": ""
}
Well, at least in their simplest version. Let’s take a look at one that includes all available options:
{ "name": "",
"begin": "",
"beginCaptures": {
"0": { "name": "" }
},
"end": "",
"endCaptures": {
"0": { "name": "" }
},
"patterns": [
{ "name": "",
"match": ""
}
],
"contentName": ""
}
Some elements may look familiar, but their combination might be daunting. Let’s see them individually.
- begin
- Regex for the opening mark for this scope.
- end
- Regex for the end mark for this scope.
- beginCaptures
- Captures for the begin marker. They work like captures for simple matches. Optional.
- endCaptures
- Same as beginCaptures but for the end marker. Optional.
- contentName
- Scope for the whole matched region, from the begin marker to the end marker (inclusive). Effectively, this will create nested scopes for beginCaptures, endCaptures and patterns defined within this rule. Optional.
- patterns
- An array of patterns to match only against the begin-end’s content—they aren’t matched against the text consumed by begin or end themselves.
We’ll use this rule to style nested complex fields in snippets:
{ "name": "variable.complex.ssraw",
"begin": "(\\$)(\\{)([0-9]+):",
"beginCaptures": {
"1": { "name": "keyword.ssraw" },
"3": { "name": "constant.numeric.ssraw" }
},
"patterns": [
{ "include": "$self" },
{ "name": "string.ssraw",
"match": "."
}
],
"end": "\\}"
}
This is the most complex pattern we’ll see in this tutorial. The begin and end keys are self-explanatory: they define a region enclosed between ${<NUMBER>: and }. beginCaptures further divides the begin mark into smaller scopes.
The most interesting part, however, is patterns. Recursion, and the importance of ordering, have finally made their appearance here.
We’ve seen above that fields can be nested. In order to account for this, we need to style nested fields recursively. That’s what the include rule does when we furnish it the $self value: it recursively applies our entire syntax definition the text captured by our begin-end rule. This portion excludes the text individually consumed by the regexes for begin and end.
Remember, matched text is consumed; thus, it is excluded from the next match attempt.
To finish off complex fields, we’ll style placeholders as strings. Since we’ve already matched all possible tokens inside a complex field, we can safely tell Sublime Text to give any remaining text (.) a literal string scope.
Final Touches¶
Lastly, let’s style escape sequences and illegal sequences, and then we can wrap up.
{ "name": "constant.character.escape.ssraw",
"match": "\\\\(\\$|\\>|\\<)"
},
{ "name": "invalid.ssraw",
"match": "(\\$|\\<|\\>)"
}
The only hard thing here is getting the number of escape characters right. Other than that, the rules are pretty straightforward if you’re familiar with regular expressions.
However, you must take care to place the second rule after any others matching the $ character, since otherwise you may not get the desired results.
Also, even after adding these two additional rules, note that our recursive begin-end rule from above continues to work as expected.
At long last, here’s the final syntax definition:
{ "name": "Sublime Snippet (Raw)",
"scopeName": "source.ssraw",
"fileTypes": ["ssraw"],
"patterns": [
{ "match": "\\$(\\d+)",
"name": "keyword.ssraw",
"captures": {
"1": { "name": "constant.numeric.ssraw" }
},
"comment": "Tab stops like $1, $2..."
},
{ "match": "\\$([A-Za-z][A-Za-z0-9_]+)",
"name": "keyword.ssraw",
"captures": {
"1": { "name": "constant.numeric.ssraw" }
},
"comment": "Variables like $PARAM1, $TM_SELECTION..."
},
{ "name": "variable.complex.ssraw",
"begin": "(\\$)(\\{)([0-9]+):",
"beginCaptures": {
"1": { "name": "keyword.ssraw" },
"3": { "name": "constant.numeric.ssraw" }
},
"patterns": [
{ "include": "$self" },
{ "name": "string.ssraw",
"match": "."
}
],
"end": "\\}"
},
{ "name": "constant.character.escape.ssraw",
"match": "\\\\(\\$|\\>|\\<)"
},
{ "name": "invalid.ssraw",
"match": "(\\$|\\>|\\<)"
}
],
"uuid": "ca03e751-04ef-4330-9a6b-9b99aae1c418"
}
There are more available constructs and code reuse techniques, but the above explanations should get you started with the creation of syntax definitions.
Plugins¶
See also
- API Reference
- More information on the Python API.
- Plugins Reference
- More information about plugins.
This section is intended for users with programming skills.
Sublime Text can be extended through Python plugins. Plugins build features by reusing existing commands or creating new ones. Plugins are a logical entity, rather than a physical one.
Prerequisites¶
In order to write plugins, you must be able to program in Python. At the time of this writing, Sublime Text used Python 3.
Where to Store Plugins¶
Sublime Text will look for plugins only in these places:
- Installed Packages (only .sublime-package files)
- Packages
- Packages/<pkg_name>/
As a consequence, any plugin nested deeper in Packages won’t be loaded.
Keeping plugins directly under Packages is discouraged. Sublime Text sorts packages in a predefined way before loading them, so if you save plugin files directly under Packages you might get confusing results.
Your First Plugin¶
Let’s write a “Hello, World!” plugin for Sublime Text:
- Select Tools | New Plugin... in the menu.
- Save to Packages/User/hello_world.py.
You’ve just written your first plugin! Let’s put it to use:
- Create a new buffer (Ctrl+n).
- Open the Python console (Ctrl+`).
- Type: view.run_command("example") and press enter.
You should see the text “Hello, World!” in the newly created buffer.
Analyzing Your First Plugin¶
The plugin created in the previous section should look roughly like this:
import sublime, sublime_plugin
class ExampleCommand(sublime_plugin.TextCommand):
def run(self, edit):
self.view.insert(edit, 0, "Hello, World!")
Both the sublime and sublime_plugin modules are provided by Sublime Text; they are not part of the Python standard library.
As we mentioned earlier, plugins reuse or create commands. Commands are an essential building block in Sublime Text. They are simply Python classes that can be called in similar ways from different Sublime Text facilities, like the plugin API, menu files, macros, etc.
Sublime Text Commands derive from the *Command classes defined in sublime_plugin (more on this later).
The rest of the code in our example is concerned with particulars of TextCommand or with the API. We’ll discuss those topics in later sections.
Before moving on, though, we’ll look at how we invoked the new command: first we opened the Python console and then we issued a call to view.run_command(). This is a rather inconvenient way of calling commands, but it’s often useful when you’re in the development phase of a plugin. For now, keep in mind that your commands can be accessed through key bindings and by other means, just like other commands.
Conventions for Command Names¶
You may have noticed that our command is named ExampleCommand, but we passed the string example to the API call instead. This is necessary because Sublime Text standardizes command names by stripping the Command suffix and separating PhrasesLikThis with underscores, like so: phrases_like_this.
New commands should follow the same naming pattern.
Types of Commands¶
You can create the following types of commands:
- Window commands (sublime_plugin.WindowCommand)
- Text commands (sublime_plugin.TextCommand)
When writing plugins, consider your goal and choose the appropriate type of commands.
Window Commands¶
Window commands operate at the window level. This doesn’t mean that you can’t manipulate views from window commands, but rather that you don’t need views in order for window commands to be available. For instance, the built-in command new_file is defined as a WindowCommand so it works even when no view is open. Requiring a view to exist in that case wouldn’t make sense.
Window command instances have a .window attribute to point to the window instance that created them.
The .run() method of a window command doesn’t require any positional parameter.
Window commands are able to route text commands to their window’s active view.
Text Commands¶
Text commands operate at the view level, so they require a view to exist in order to be available.
Text command instances have a .view attribute pointing to the view instance that created them.
The .run() method of text commands requires and edit instance as its first positional argument.
Text Commands and the edit Object¶
The edit object groups modifications to the view so that undo and macros work sensibly.
Note: Contrary to older versions, Sublime Text 3 doesn’t allow programmatic control over edit objects. The API is in charge of managing their life cycle. Plugin creators must ensure that all modifying operations occur inside the .run method of new text commands. To call existing commands, you can use view.run_command(<cmd_name>, <args>) or similar API calls.
Responding to Events¶
Any command deriving from EventListener will be able to respond to events.
Another Plugin Example: Feeding the Completions List¶
Let’s create a plugin that fetches data from Google’s Autocomplete service and then feeds it to the Sublime Text completions list. Please note that, as ideas for plugins go, this a very bad one.
import sublime, sublime_plugin
from xml.etree import ElementTree as ET
from urllib import urlopen
GOOGLE_AC = r"http://google.com/complete/search?output=toolbar&q=%s"
class GoogleAutocomplete(sublime_plugin.EventListener):
def on_query_completions(self, view, prefix, locations):
elements = ET.parse(
urlopen(GOOGLE_AC % prefix)
).getroot().findall("./CompleteSuggestion/suggestion")
sugs = [(x.attrib["data"],) * 2 for x in elements]
return sugs
Note
Make sure you don’t keep this plugin around after trying it or it will interfere with Sublime Text’s autocompletion.
Learning the API¶
In order to create plugins, you need to get acquainted with the Sublime Text API and the available commands. Documentation on both is scarce at the time of this writing, but you can read existing code and learn from it.
In particular, the $PATH_TO_SUBLIME/Packages/Default.sublime-package contains many examples of undocumented commands and API calls. Note that you will first have to extract its content to a folder if you want to take a look at the code within. As an exercise, you can try creating a build system to do that on demand, and a project file to be able to peek at the sample code easily.
Packages¶
Packages are simply folders under Packages, or zip archives with the .sublime-package extension saved under Installed Packages.
Here’s a list of typical resources that can be found inside packages:
- build systems (.sublime-build)
- key maps (.sublime-keymap)
- macros (.sublime-macro)
- menus (.sublime-menu)
- plugins (.py)
- preferences (.tmPreferences)
- settings (.sublime-settings)
- syntax definitions (.tmLanguage)
- snippets (.sublime-snippet)
- themes (.sublime-theme)
Some packages may include support files for other packages or core features. For example, the spell checker uses $PATH_TO_SUBLIME_TEXTPackagesLanguage - English.sublime-package as a data store for English dictionaries.
Types of Packages¶
In this guide, we classify packages under different categories. This classification is artificial and useful just for clarity when discussing this topic. Sublime Text doesn’t use this classification in any way.
- core packages
- Required packages for proper functioning.
- shipped packages
- Included in every installation, though technically not required. They enhance Sublime Text out of the box. May have been contributed by users or third parties.
- user packages
- Installed by the user to extend Sublime Text’s functionaility. They are not part of any Sublime Text installation, and are always contributed by users or third parties.
- installed packages
- Packages stored under Installed Packages as .sublime-package‘s
It’s worth noting that by third party we mainly refer to users of other editors, such as Textmate.
Package Installation¶
Ultimately, installing a package is simply a matter of copying a folder containing Sublime Text resources to Packages, or a .sublime-package file to Installed Packages. The only thing that varies is how you obtain and copy these files.
Installation of .sublime-package Files¶
Copy the .sublime-package file to the Installed Packages folder and restart Sublime Text. If the Installed Packages folder doesn’t exist, you can create it.
Note that .sublime-package files simply are .zip archives with a custom file extension.
Installation of Packages from a Version Control System¶
Explaining how to use version control systems (VCSs) is outside the scope of this guide, but there are many user packages available free of charge on public repositories like GitHub and Bitbucket.
Also, a Sublime Text organization at GitHub is open to contributors.
Packages and Magic¶
Sublime Text deals with packages without much hidden magic. There are two notable exceptions: Macros defined in any package automatically appear under Tools | Macros | <Your Package>, and snippets from any package appear under Tools | Snippets | <Your Package>.
However, Sublime Text follows some rules for packages. For instance, Package/User will never be clobbered during updates to the software.
Merging and Order of Precedence¶
Packages/Default and Packages/User receive special treatment when merging files (e.g. .sublime-keymap and .sublime-settings files). Before merging can take place, the files have to be arranged in some order. To that end, Sublime Text sorts them alphabetically by name, with the exception of the Default and User folders. Files contained in Default will always go to the front of the list, and those in User, to the end.
Ignored Packages¶
To temporarily disable packages, you can add them to the ignored_packages list in your Packages/User/Preferences.sublime-settings file.
Restoring Packages¶
Sublime Text keeps a copy of all installed packages so it can recreate them as needed. This means it can reinstall core packages, shipped packages and, potentially, user packages alike. However, only user packages installed as sublime-packages are added to its registry of installed packages. Packages installed in alternative ways will be lost completely if you delete them.
Reverting Sublime Text to Its Default Configuration¶
To revert Sublime Text to its default configuration, delete the data directory and restart the editor. Keep in mind that the Installed Packages folder will be deleted too, so you’ll lose all your installed packages.
Always make sure to back up your data before taking an extreme measure like this one.
Reverting Sublime Text to a fresh state solves many problems that appear to be due to bugs in Sublime Text but are in fact caused by misbehaving plugins.
The Installed Packages Directory¶
You will find this folder in the data directory. It contains a copy of every sublime-package installed. It is used to restore Packages.
Command Line Usage¶
See also
- OS X Command Line
- Official Sublime Text Documentation
Reference¶
This section contains concise technincal information about Sublime Text. It is intended mainly as a quick reference for advanced users who want to modify Sublime Text’s default behavior.
If you’re looking for a gentler introduction to any of these topics, try the general index.
Snippets¶
Compatibility with Textmate¶
Generally, Sublime Text snippets are compatible with Textmate snippets.
File Format¶
Snippet files are XML files with the sublime-snippet extension.
<snippet>
<content><![CDATA[]]></content>
<tabTrigger></tabTrigger>
<scope></scope>
<description></description>
</snippet>
- content
- Actual snippet content.
- tabTrigger
- Implicit key binding for this snippet. The last key (implicit) is TAB.
- scope
- Scope selector to activate this snippet.
- description
- Friendly description to be used when the snippet is shown as a menu item.
Escape Sequences¶
- \$
- Literal $.
Environment Variables¶
$PARAM1 .. $PARAMn | Arguments passed to the insertSnippet command. |
$SELECTION | The text that was selected when the snippet was triggered. |
$TM_CURRENT_LINE | Content of the line the cursor was in when the snippet was triggered. |
$TM_CURRENT_WORD | Current word under the cursor when the snippet was triggered. |
$TM_FILENAME | Filename of the file being edited including extension. |
$TM_FILEPATH | Path to the file being edited. |
$TM_FULLNAME | User’s user name. |
$TM_LINE_INDEX | Column where the snippet is being inserted, 0 based. |
$TM_LINE_NUMBER | Row where the snippet is being inserted, 1 based. |
$TM_SELECTED_TEXT | An alias for $SELECTION. |
$TM_SOFT_TABS | YES if translateTabsToSpaces is true, otherwise NO. |
$TM_TAB_SIZE | Spaces per-tab (controlled by the tabSize option). |
Fields¶
Marked positions to cycle through, by pressing TAB or SHIFT + TAB.
Syntax: $1 .. $n
- $0
- Exit mark. The position where normal text editing should be resumed. By default, Sublime Text implicitly sets this mark at the end of the snippet’s content element.
Fields with the same name mirror each other.
Placeholders¶
Fields with a default value.
Syntax: ${1:PLACE_HOLDER} .. ${n:PLACE_HOLDER}
Fields and placeholders can be combined, and nested within other placeholders.
Substitutions¶
Syntax:
- ${var_name/regex/format_string/}
- ${var_name/regex/format_string/options}
- var_name
- The name of the field to base the substitution on: 1, 2, 3...
- regex
- Perl-style regular expression: See the Boost library documentation for more on regular expressions.
- format_string
- See the Boost library documentation for more on format strings.
- options
- Optional. Any of the following:
- i
- Case-insensitive regex.
- g
- Replace all occurrences of regex.
- m
- Don’t ignore newlines in the string.
Syntax Definitions¶
Warning
This topic is a draft and may contain wrong information.
Compatibility with Textmate¶
Generally, Sublime Text syntax definitions are compatible with Textmate language files.
File Format¶
Textmate syntax definitions are Plist files with the tmLanguage extension. However, for convenience in this reference document, JSON is shown instead.
{ "name": "Sublime Snippet (Raw)",
"scopeName": "source.ssraw",
"fileTypes": ["ssraw"],
"patterns": [
{ "match": "\\$(\\d+)",
"name": "keyword.ssraw",
"captures": {
"1": { "name": "constant.numeric.ssraw" }
},
"comment": "Tab stops like $1, $2..."
},
{ "match": "\\$([A-Za-z][A-Za-z0-9_]+)",
"name": "keyword.ssraw",
"captures": {
"1": { "name": "constant.numeric.ssraw" }
},
"comment": "Variables like $PARAM1, $TM_SELECTION..."
},
{ "name": "variable.complex.ssraw",
"begin": "(\\$)(\\{)([0-9]+):",
"beginCaptures": {
"1": { "name": "keyword.control.ssraw" },
"3": { "name": "constant.numeric.ssraw" }
},
"patterns": [
{ "include": "$self" },
{ "name": "string.ssraw",
"match": "."
}
],
"end": "\\}"
},
{ "name": "constant.character.escape.ssraw",
"match": "\\\\(\\$|\\>|\\<)"
},
{ "name": "invalid.ssraw",
"match": "(\\$|\\>|\\<)"
}
],
"uuid": "ca03e751-04ef-4330-9a6b-9b99aae1c418"
}
- name
- Descriptive name for the syntax definition. Shows up in the syntax definition dropdown menu located in the bottom right of the Sublime Text interface. It’s usually the name of the programming language or equivalent.
- scopeName
- Name of the top-level scope for this syntax definition. Either source.<lang> or text.<lang>. Use source for programming languages and text for everything else.
- fileTypes
- An array of file type extensions for which this syntax automatically should be activated. Include the extensions without the leading dot.
- uuid
- Unique indentifier for this syntax definition. Currently ignored.
- foldingStartMarker
- Currently ignored. Used for code folding.
- foldingStopMarker
- Currently ignored. Used for code folding.
- patterns
- Array of patterns to match against the buffer’s text.
- repository
- Array of patterns abstracted out from the patterns element. Useful to keep the syntax definition tidy as well as for specialized uses like recursive patterns. Optional.
The Patterns Array¶
Elements contained in the patterns array.
- match
Contains the following elements:
match Pattern to search for. name Scope name to be assigned to matches of match. comment Optional. For information only. captures Optional. Refinement of match. See below. In turn, captures can contain n of the following pairs of elements:
0..n Name of the group referenced. name Scope to be assigned to the group. Examples:
// Simple { "name": "constant.character.escape.ssraw", "match": "\\\\(\\$|\\>|\\<)" "comment". "Sequences like \$, \> and \<" } // With captures { "match": "\\$(\\d+)", "name": "keyword.ssraw", "captures": { "1": { "name": "constant.numeric.ssraw" } }, "comment": "Tab stops like $1, $2..." }
- include
Includes items in the repository, other syntax definitions or the current one.
References:
$self The current syntax definition. #itemName itemName in the repository. source.js External syntax definitions. Examples:
// Requires presence of DoubleQuotedStrings element in the repository. { "include": "#DoubleQuotedStrings" } // Recursively includes the current syntax definition. { "include": "$self" } // Includes and external syntax definition. { "include": "source.js" }
- begin..end
Defines a scope potentially spanning multiple lines
Contains the following elements:
begin The start marker pattern. end The end marker pattern. name Scope name for the whole region. beginCaptures captures for begin. See captures. endCaptures captures for end. See captures. patterns patterns to be matched against the content. contentName Scope name for the content excluding the markers. Example:
{ "name": "variable.complex.ssraw", "begin": "(\\$)(\\{)([0-9]+):", "beginCaptures": { "1": { "name": "keyword.control.ssraw" }, "3": { "name": "constant.numeric.ssraw" } }, "patterns": [ { "include": "$self" }, { "name": "string.ssraw", "match": "." } ], "end": "\\}" }
Repository¶
Can be referenced from patterns or from itself in an include element. See include for more information.
The repository can contain the following elements:
Simple elements:
"elementName": { "match": "some regexp", "name": "some.scope.somelang" }Complex elements:
"elementName": { "patterns": [ { "match": "some regexp", "name": "some.scope.somelang" }, { "match": "other regexp", "name": "some.other.scope.somelang" } ] }
Examples:
"repository": {
"numericConstant": {
"patterns": [
{ "match": "\\d*(?<!\\.)(\\.)\\d+(d)?(mb|kb|gb)?",
"name": "constant.numeric.double.powershell",
"captures": {
"1": { "name": "support.constant.powershell" },
"2": { "name": "support.constant.powershell" },
"3": { "name": "keyword.other.powershell" }
}
},
{ "match": "(?<!\\w)\\d+(d)?(mb|kb|gb)?(?!\\w)",
"name": "constant.numeric.powershell",
"captures": {
"1": { "name": "support.constant.powershell" },
"2": { "name": "keyword.other.powershell" }
}
}
]
},
"scriptblock": {
"begin": "\\{",
"end": "\\}",
"name": "meta.scriptblock.powershell",
"patterns": [
{ "include": "$self" }
]
},
}
Escape Sequences¶
Be sure to escape JSON/XML sequences as needed.
Build Systems¶
Build systems let you run your files through external programs without leaving Sublime Text, and see the output they generate.
Build systems consist of two—or optionally three—parts:
- Configuration data in JSON format (the .sublime-build file contents)
- A Sublime Text command driving the build process
- An optional, external executable file (script or binary file)
Essentially, .sublime-build files are configuration data for an external program, as well as for a Sublime Text command (just mentioned). In them, you specify the switches, options and environment information you want forwarded.
The Sublime Text command then receives the data stored in the .sublime-build file. At this point, it can do whatever it needs to do, to build the files. By default, build systems will use the exec command implemented by Packages/Default/exec.py. As explained below, you can override this command.
Finally, the external program may be a shell script you’ve created to process your files, or a well-known utility like make or tidy. Usually, these executable files will receive paths to files or directories, along with switches and options to run with.
Note that build systems can but don’t need to call external programs; a valid build system could be implemented entirely in Python in a Sublime Text command.
File Format¶
.build-system files use JSON. Here’s an example:
{
"cmd": ["python", "-u", "$file"],
"file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
"selector": "source.python"
}
Options¶
- cmd
Array containing the command to run and its desired arguments. If you don’t specify an absolute path, the external program will be searched in your PATH, one of your system’s environmental variables.
On Windows, GUIs are supressed.
- file_regex
- Optional. Regular expression (Perl-style) to capture error output of cmd. See the next section for details.
- line_regex
- Optional. If file_regex doesn’t match on the current line, but line_regex exists, and it does match on the current line, then walk backwards through the buffer until a line matching file regex is found, and use these two matches to determine the file and line to go to.
- selector
- Optional. Used when Tools | Build System | Automatic is set to true. Sublime Text uses this scope selector to find the appropriate build system for the active view.
- working_dir
- Optional. Directory to change the current directory to before running cmd. The original current directory is restored afterwards.
- encoding
- Optional. Output encoding of cmd. Must be a valid Python encoding. Defaults to UTF-8.
- target
Optional. Sublime Text command to run. Defaults to exec (Packages/Default/exec.py). This command receives the configuration data specified in the .build-system file.
Used to override the default build system command. Note that if you choose to override the default command for build systems, you can add arbitrary variables in the .sublime-build file.
- env
Optional. Dictionary of environment variables to be merged with the current process’ before passing them to cmd.
Use this element, for example, to add or modify environment variables without modifying your system’s settings.
- shell
- Optional. If true, cmd will be run through the shell (cmd.exe, bash...).
- path
Optional. This string will replace the current process’ PATH before calling cmd. The old PATH value will be restored after that.
Use this option to add directories to PATH without having to modify your system’s settings.
- variants
- Optional. A list of dictionaries of options to override the main build system’s options. Variant ``name``s will appear in the Command Palette for easy access if the build system’s selector matches for the active file.
- name
- Only valid inside a variant (see variants). Identifies variant build systems. If name is Run, the variant will show up under the Tools | Build System menu and be bound to Ctrl + Shift + B.
- syntax
- Optional. When provided, the build system output will be formatted with the provided syntax definition.
Capturing Error Output with file_regex¶
The file_regex option uses a Perl-style regular expression to capture up to four fields of error information from the build program’s output, namely: filename, line number, column number and error message. Use groups in the pattern to capture this information. The filename field and the line number field are required.
When error information is captured, you can navigate to error instances in your project’s files with F4 and Shift+F4. If available, the captured error message will be displayed in the status bar.
Platform-specific Options¶
The windows, osx and linux elements let you provide platform-specific data in the build system. Here’s an example:
{
"cmd": ["ant"],
"file_regex": "^ *\\[javac\\] (.+):([0-9]+):() (.*)$",
"working_dir": "${project_path:${folder}}",
"selector": "source.java",
"windows":
{
"cmd": ["ant.bat"]
}
}
In this case, ant will be executed for every platform except Windows, where ant.bat will be used instead.
Variants¶
Here’s a contrived example of a build system with variants:
{
"selector": "source.python",
"cmd": ["date"],
"variants": [
{ "cmd": ["ls -l *.py"],
"name": "List Python Files",
"shell": true
},
{ "cmd": ["wc", "$file"],
"name": "Word Count (current file)"
},
{ "cmd": ["python", "-u", "$file"],
"name": "Run"
}
]
}
Given these settings, Ctrl + B would run the date command, Crtl + Shift + B would run the Python interpreter and the remaining variants would appear in the Command Palette whenever the build system was active.
Build System Variables¶
Build systems expand the following variables in .sublime-build files:
$file_path | The directory of the current file, e.g., C:\Files. |
$file | The full path to the current file, e.g., C:\Files\Chapter1.txt. |
$file_name | The name portion of the current file, e.g., Chapter1.txt. |
$file_extension | The extension portion of the current file, e.g., txt. |
$file_base_name | The name-only portion of the current file, e.g., Document. |
$packages | The full path to the Packages folder. |
$project | The full path to the current project file. |
$project_path | The directory of the current project file. |
$project_name | The name portion of the current project file. |
$project_extension | The extension portion of the current project file. |
$project_base_name | The name-only portion of the current project file. |
Placeholders for Variables¶
Features found in snippets can be used with these variables. For example:
${project_name:Default}
This will emit the name of the current project if there is one, otherwise Default.
${file/\.php/\.txt/}
This will emit the full path of the current file, replacing .php with .txt.
Running Build Systems¶
Select the desired build system from Tools | Build System, and then select Tools | Build or press F7.
Troubleshooting Build Systems¶
Build systems will look for executables in your PATH, unless you specify an absolute path to the executable. Therefore, your PATH variable must be set correctly.
On some operating systems, the value of PATH may vary between terminal windows and graphical applications. Thus, in your build system, even if the command you are using works in the command line, it may not work from Sublime Text. This is due to user profiles in shells.
To solve this issue, make sure you set the desired PATH so that graphical applications such as Sublime Text can find it. See the links below for more information.
Alternatively, you can use the path element in .sublime-build files to override the PATH used to locate the executable specified in cmd. This new value for PATH will be in effect only as long as your build system is running. After that, the old PATH will be restored.
See also
- Managing Environment Variables in Windows
- Search Microsoft knowledge base for this topic.
- Setting environment variables in OSX
- StackOverflow topic.
Key Bindings¶
Key bindings map key presses to commands.
File Format¶
Key bindings are stored in .sublime-keymap files and defined in JSON. All key map filenames need to follow this pattern: Default (<platform>).sublime-keymap. Otherwise, Sublime Text will ignore them.
Platform-Specific Key Maps¶
Each platform gets its own key map:
- Default (Windows).sublime-keymap
- Default (OSX).sublime-keymap
- Default (Linux).sublime-keymap
Separate key maps exist to abide by different vendor-specific HCI guidelines.
Structure of a Key Binding¶
Key maps are arrays of key bindings. Below you’ll find valid elements in key bindings.
- keys
- An array of case-sensitive keys to be pressed. Modifiers can be specified with the + sign. Chords are built by adding elements to the array, e.g. ["ctrl+k","ctrl+j"]. Ambiguous chords are resolved with a timeout.
- command
- Name of the command to be executed.
- args
- Dictionary of arguments to be passed to command. Keys must be the names of parameters to command.
- context
- Array of contexts to selectively enable the key binding. All contexts must be true for the key binding to trigger. See Structure of a Context below.
Here’s an example illustrating most of the features outlined above:
{ "keys": ["shift+enter"], "command": "insert_snippet", "args": {"contents": "\n\t$0\n"}, "context":
[
{ "key": "setting.auto_indent", "operator": "equal", "operand": true },
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
{ "key": "preceding_text", "operator": "regex_contains", "operand": "\\{$", "match_all": true },
{ "key": "following_text", "operator": "regex_contains", "operand": "^\\}", "match_all": true }
]
}
Structure of a Context¶
- key
- Name of a context operand to query.
- operator
- Type of test to perform against key.
- operand
- Value against which the result of key is tested.
- match_all
- Requires the test to succeed for all selections. Defaults to false.
Context Operands¶
- auto_complete_visible
- Returns true if the autocomplete list is visible.
- has_next_field
- Returns true if a next snippet field is available.
- has_prev_field
- Returns true if a previous snippet field is available.
- num_selections
- Returns the number of selections.
- overlay_visible
- Returns true if any overlay is visible.
- panel_visible
- Returns true if any panel is visible.
- following_text
- Restricts the test just to the text following the caret.
- preceding_text
- Restricts the test just to the text preceding the caret.
- selection_empty
- Returns true if the selection is an empty region.
- setting.x
- Returns the value of the x setting. x can be any string.
- text
- Restricts the test just to the selected text.
- selector
- Returns the current scope.
- panel_has_focus
- Returns true if the current focus is on a panel.
- panel
- Returns true if the panel given as operand is visible.
Context Operators¶
- equal, not_equal
- Test for equality.
- regex_match, not_regex_match
- Match against a regular expression.
- regex_contains, not_regex_contains
- Match against a regular expression (containment).
Command Mode¶
Sublime Text provides a command_mode setting to prevent key presses from being sent to the buffer. This is useful when emulating Vim’s modal behavior.
Bindable Keys¶
Keys may be specified literally or by name. Here’s the list of valid names:
- up
- down
- right
- left
- insert
- home
- end
- pageup
- pagedown
- backspace
- delete
- tab
- enter
- pause
- escape
- space
- keypad0
- keypad1
- keypad2
- keypad3
- keypad4
- keypad5
- keypad6
- keypad7
- keypad8
- keypad9
- keypad_period
- keypad_divide
- keypad_multiply
- keypad_minus
- keypad_plus
- keypad_enter
- clear
- f1
- f2
- f3
- f4
- f5
- f6
- f7
- f8
- f9
- f10
- f11
- f12
- f13
- f14
- f15
- f16
- f17
- f18
- f19
- f20
- sysreq
- break
- context_menu
- browser_back
- browser_forward
- browser_refresh
- browser_stop
- browser_search
- browser_favorites
- browser_home
Modifiers¶
- shift
- ctrl
- alt
- super (Windows key, Command key...)
Warning about Bindable Keys¶
If you’re developing a package, keep this in mind:
- Ctrl+Alt+<alphanum> should not be used for any Windows key bindings.
- Option+<alphanum> should not be used for any OS X key bindings.
In both cases, the user’s ability to insert non-ASCII characters would be compromised.
If you are the end-user, you are free to remap those key combinations.
Keeping Key Maps Organized¶
Sublime Text ships with default key maps under Packages/Default. Other packages may include their own key map files. The recommended storage location for your personal key map is Packages/User.
See Merging and Order of Precedence for information about how Sublime Text sorts files for merging.
International Keyboards¶
Due to the way Sublime Text maps key names to physical keys, there might be a mismatch between the two.
Troubleshooting¶
To enable command logging, see sublime.log_commands(flag). This may help in debugging key maps.
Settings (Reference)¶
Global Settings¶
Target file: Global.sublime-settings.
- theme
- Theme to be used. Accepts a file base name (for example, Default.sublime-theme).
- remember_open_files
- Determines whether to reopen the buffers that were open when Sublime Text was last closed.
- folder_exclude_patterns
- Excludes the matching folders from the side bar, GoTo Anything, etc.
- file_exclude_patterns
- Excludes the matching files from the side bar, GoTo Anything, etc.
- scroll_speed
- Set to 0 to disable smooth scrolling. Set to a value between 0 and 1 to scroll slower, or set to a value larger than 1 to scroll faster.
- show_tab_close_buttons
- If false, hides the tabs’ close buttons until the mouse hovers over the tab.
- mouse_wheel_switches_tabs
- If true, scrolling the mouse wheel will cause tabs to switch if the cursor is in the tab area.
- open_files_in_new_window
- OS X only. When filters are opened from Finder, or by dragging onto the dock icon, this controls whether a new window is created or not.
File Settings¶
Target files: Base File.sublime-settings, <file_type>.sublime-settings.
Whitespace and Indentation¶
- auto_indent
- Toggles automatic indentation.
- tab_size
- Number of spaces a tab is considered equal to.
- translate_tabs_to_spaces
- Determines whether to replace a tab character with tab_size number of spaces when Tab is pressed.
- use_tab_stops
- If translate_tabs_to_spaces is true, will make Tab and Backspace insert/delete tab_size number of spaces per key press.
- trim_automatic_white_space
- Toggles deletion of white space added by auto_indent.
- detect_indentation
- Set to false to disable detection of tabs vs. spaces whenever a buffer is loaded. If set to true, it automatically will modify translate_tabs_to_spaces and tab_size.
- draw_white_space
- Valid values: none, selection, all.
- trim_trailing_white_space_on_save
- Set to true to remove white space on save.
Visual Settings¶
- color_scheme
- Sets the colors used for text highlighting. Accepts a path rooted at the data directory (for example, Packages/Color Scheme - Default/Monokai Bright.tmTheme).
- font_face
- Font face to be used for editable text.
- font_size
- Size of the font for editable text.
- font_options
- Valid values: bold, italic, no_antialias, gray_antialias, subpixel_antialias, directwrite (Windows).
- gutter
- Toggles display of gutter.
- rulers
- Columns in which to display vertical rules. Accepts a list of numeric values (such as [79, 89, 99]) or a single numeric value (for example, 79).
- draw_minimap_border
- Set to true to draw a border around the minimap’s region corresponding to the the view’s currently visible text. The active color scheme’s minimapBorder key controls the border’s color.
- highlight_line
- Set to false to stop highlighting lines with a cursor.
- line_padding_top
- Additional spacing at the top of each line, in pixels.
- line_padding_bottom
- Additional spacing at the bottom of each line, in pixels.
- scroll_past_end
- Set to false to disable scrolling past the end of the buffer. If true, Sublime Text will leave a wide, empty margin between the last line and the bottom of the window.
- line_numbers
- Toggles display of line numbers in the gutter.
- word_wrap
- If set to false, long lines will be clipped instead of wrapped. Scroll the screen horizontally to see the clipped text.
- wrap_width
- If greater than 0, wraps long lines at the specified column as opposed to the window width. Only takes effect if wrap_width is set to true.
- indent_subsequent_lines
- If set to false, wrapped lines will not be indented. Only takes effect if wrap_width is set to true.
- draw_centered
- If set to true, text will be drawn centered rather than left-aligned.
- match_brackets
- Set to false to disable underlining the brackets surrounding the cursor.
- match_brackets_content
- Set this to false if you’d rather have brackets highlighted only when the cursor is next to one.
- match_brackets_square
- Set to false to stop highlighting square brackets. Only takes effect if match_brackets is true.
- match_bracktets_braces
- Set to false to stop highlighting curly brackets. Only takes effect if match_brackets is true.
- match_bracktets_angle
- Set to false to stop highlighting angle brackets. Only takes effect if match_brackets is true.
Automatic Behavior¶
- auto_match_enabled
- Toggles automatic pairing of quotes, brackets, etc.
- save_on_focus_lost
- Set to true to save files automatically when switching to a different file or application.
- find_selected_text
- If true, the selected text will be copied into the find panel when it’s shown.
- word_separators
- Characters considered to divide words for actions like advancing the cursor, etc. Not used for every context where a notion of a word separator is useful (for example, word wrapping). In some contexts, the text might be tokenized based on other criteria (for example, the syntax definition rules).
- ensure_newline_at_eof_on_save
- Always adds a new line at the end of the file if not present when saving.
System and Miscellaneous Settings¶
- is_widget
- Returns true if the buffer is an input field in a dialog, as opposed to a regular buffer.
- spell_check
- Toggles the spell checker.
- dictionary
- Word list to be used by the spell checker. Accepts a path rooted at the data directory (such as Packages/Language - English/en_US.dic). You can add more dictionaries.
- fallback_encoding
- The encoding to use when the encoding can’t be determined automatically. ASCII, UTF-8 and UTF-16 encodings will be detected automatically .
- default_line_ending
- Determines what characters to use to designate new lines. Valid values: system (OS-dependant), windows (CRLF) and unix (LF).
- tab_completion
- Determines whether pressing Tab will insert completions.
File and Directory Settings¶
- default_dir
- Sets the default save folder for the view.
Input Settings¶
- command_mode
- If set to true, the buffer will ignore key strokes. Useful when emulating Vim’s modal behavior.
Command Palette¶
The command palette is fed entries with .sublime-commands files.
File Format (.sublime-commands Files)¶
Here’s an excerpt from Packages/Default/Default.sublime-commands:
[
{ "caption": "Project: Save As", "command": "save_project_as" },
{ "caption": "Project: Close", "command": "close_project" },
{ "caption": "Project: Add Folder", "command": "prompt_add_folder" },
{ "caption": "Preferences: Default File Settings", "command": "open_file", "args": {"file": "${packages}/Default/Base File.sublime-settings"} },
{ "caption": "Preferences: User File Settings", "command": "open_file", "args": {"file": "${packages}/User/Base File.sublime-settings"} },
{ "caption": "Preferences: Default Global Settings", "command": "open_file", "args": {"file": "${packages}/Default/Global.sublime-settings"} },
{ "caption": "Preferences: User Global Settings", "command": "open_file", "args": {"file": "${packages}/User/Global.sublime-settings"} },
{ "caption": "Preferences: Browse Packages", "command": "open_dir", "args": {"dir": "$packages"} }
]
- caption
- Text for display in the command palette.
- command
- Command to be executed.
- args
- Arguments to pass to command. Note that to locate the packages folder you need to use a snippet-like variable: ${packages} or $packages. This differs from other areas of the editor due to different implementations in the lower layers.
How to Use the Command Palette¶
- Press Ctrl+Shift+P
- Select command
Entries are filtered by current context. Not all entries will be visible at all times.
Completions¶
Completions provide an IDE-like functionality to insert dynamic content through the completions list or by pressing Tab.
File Format¶
Completions are JSON files with the .sublime-completions extension.
Where to Store Completions¶
Completions files can be stored anywhere under Packages. They can be included in .sublime-package archives too. If you’re defining completions for your own use, Packages/User is the right place to keep them.
Structure of a Completions List¶
- scope
- Determines whether the completions are to be sourced from this file. See Scopes for more information.
- completions
- Array of completions.
Here’s an excerpt from the html completions:
{
"scope": "text.html - source - meta.tag, punctuation.definition.tag.begin",
"completions":
[
{ "trigger": "a", "contents": "<a href=\"$1\">$0</a>" },
{ "trigger": "abbr", "contents": "<abbr>$0</abbr>" },
{ "trigger": "acronym", "contents": "<acronym>$0</acronym>" }
]
}
Types of Completions¶
Plain Strings¶
Plain strings are equivalent to an entry where the trigger is identical to the contents:
"foo"
# is equivalent to:
{ "trigger": "foo", "contents": "foo" }
Trigger-based Completions¶
- trigger
- Text that will be displayed in the completions list and will cause the contents to be inserted when validated.
- contents
- Text to be inserted in the buffer. Can use snippet features.
Sources for Completions¶
These are the sources for completions the user can control:
- .sublime-completions
- EventListener.on_query_completions()
Additionally, other completions are folded into the final list:
- Snippets
- Words in the buffer
Priority of Sources for Completions¶
- Snippets
- API-injected completions
- .sublime-completions files
- Words in buffer
Snippets will only be automatically completed against an exact match of their tab trigger. Other sources for completions are filtered with a case insensitve fuzzy search instead.
The Completions List¶
To use the completions list:
- Press Ctrl+spacebar to open
- Optionally, press Ctrl+spacebar again to select next entry
- Press Enter or Tab to validate selection
Note
The current selection in the completions list can in fact be validated with any punctuation sign that isn’t itself bound to a snippet.
Snippets show up in the completions list following the pattern: <tab_trigger> : <name>. For the other completions, you will see just the text to be inserted.
If the list of completions can be narrowed down to one choice, the autocomplete dialog will be bypassed and the corresponding content will be inserted right away according to the priority rules stated above.
Enabling and Disabling Tab Completion for Completions¶
The tab_completion setting is true by default. Set it to false if you want Tab to stop sourcing the most likely completion. This setting has no effect on triggers defined in .sublime-snippet files, so snippets will always be inserted after a Tab.
With tab_completion on, the same order of priority stated above applies, but, unlike the case of the completions list, Sublime Text always will insert a completion, even if faced with an ambiguous choice.
Inserting a Literal Tab¶
If tab_completion is true, you can press Shift+Tab after a prefix to insert a literal tab character.
Plugins¶
See also
- API Reference
- More information on the Python API.
Plugins are Python scripts implementing *Command classes from sublime_plugin.
Where to Store Plugins¶
Sublime Text will look for plugins in these places:
- Packages
- Packages/<pkg_name>
- .sublime-package files
Plugin files nested deeper in Packages won’t be loaded.
All plugins should live inside a folder of their own and not directly under Packages. This will spare you confusions when Sublime Text attempts to sort packages for loading.
Conventions for Command Names¶
By convention, Sublime Text command class names are suffixed with Command and written as NamesLikeThisCommand.
However, command names are automatically transformed from NamesLikeThisCommand to name_like_this. Thus, ExampleCommand would become example, and AnotherExampleCommand would become another_example.
In names for classes defining commands, use NameLikeThisCommand. To call a command from the API, use the standardized name_like_this.
Types of Commands¶
- sublime_plugin.WindowCommand
- sublime_plugin.TextCommand
- sublime_plugin.EventListener
Instances of WindowCommand have a .window attribute pointing to the window instance that created them. Similarly, instances of TextCommand have a .view attribute.
How to Call Commands from the API¶
Depending on the type of command, use a reference to a View or a Window and call <object>.run_command('command_name'). In addition to the command’s name, .run_command accepts a dictionary whose keys are the names of valid parameters for said command:
window.run_command("echo", {"Tempus": "Irreparabile", "Fugit": "."})
Command Arguments¶
All user-provided arguments to commands must be valid JSON types.
Text Commands and the edit Object¶
Text commands receive and edit object passed to them by Sublime Text.
All actions done within an edit are grouped as a single undo action. Callbacks such as on_modified() and on_selection_modified() are called when the edit is finished.
Contrary to earlier versions of Sublime Text, the edit object’s life time is now managed solely by the editor. Plugin authors must ensure to perform all editing operations within the run() method of text commands so that macros and repeating commands work as expected.
To call other commands from your own commands, use the run_command() function.
Responding to Events¶
Any subclass of EventListener will be able to respond to events. You cannot make a class derive both from EventListener and from any other type of command.
Sublime Text and the Python Standard Library¶
Sublime Text ships with a trimmed down standard library.
Automatic Plugin Reload¶
Sublime Text will reload top-level Python modules as they change (perhaps because you are editing a .py file within Packages). By contrast, Python subpackages won’t be reloaded automatically, and this can lead to confusion while you’re developing plugins. Generally speaking, it’s best to restart Sublime Text after you’ve made changes to plugin files, so all changes can take effect.
Multithreading¶
Only the set_timeout() function is safe to call from different threads.
Python API¶
See also
- Official Documentation
- API documentation.
Exploring the API¶
A quick way to see the API in action:
- Add Packages\Default (Preferences | Browse Packages...) to your project.
- CTRL + SHIFT + F
- Enter *.py in the In Files: field
- Check Use Buffer option
- Search API name
- F4
- Study relevant source code
Commands¶
Overview¶
This list of commands is a work in progress.
About Paths in Command Arguments¶
Some commands take paths as parameters. Among these, some support snippet-like syntax, while others don’t. A command of the first kind would take a parameter like ${packages}/SomeDir/SomeFile.Ext whereas a command of the second kind would take a parameter like Packages/SomeDir/SomeFile.Ext.
Generally, newer commands support the snippet-like syntax.
Often, relative paths in arguments to commands are assumed to start at the Data directory.
Variables in Paths as Arguments¶
The same variables available to build systems are expanded in arguments to commands. See Build System Variables for more information.
Commands¶
- build
Runs a build system.
- variant [String]: Optional. The name of the variant to be run.
- run_macro_file
Runs a .sublime-macro file.
- file [String]: Path to the macro file.
- insert_snippet
Inserts a snippet from a string or .sublime-snippet file.
- contents [String]: Snippet as a string to be inserted.
- name [String]: Path to the .sublime-snippet file to be inserted.
- insert
Inserts a string.
- characters [String]: String to be inserted.
- move
Advances the caret by predefined units.
- by [Enum]: Values: characters, words, word_ends, subwords, subword_ends, lines, pages, stops.
- forward [Bool]: Whether to advance or reverse in the buffer.
- word_begin [Bool]
- empty_line [Bool]
- punct_begin [Bool]
- separators [Bool]
- move_to
Advances the caret to predefined locations.
- to [Enum]: Values: bol, eol, bof, eof, brackets.
- extend [Bool]: Whether to extend the selection. Defaults to false.
- new_window
- Opens a new window.
- close_window
- Closes the active window.
- switch_file
Switches between two files with the same name and different extensions.
- extensions [[String]]: Extensions (without leading dot) for which switching will be enabled.
- close
- Closes the active view.
- close_file
- Closes the active view and, under certain circumsances, the whole application. XXX Sounds kinda wrong.
- save
- Saves the active file.
- prompt_save_as
- Prompts for a new file name and saves the active file.
- toggle_sidebar
- Shows or hides the sidebar.
- toggle_full_screen
- Toggles full screen mode on or off.
- toggle_distraction_free
- Toggles distraction free mode on or off.
- left_delete
- Deletes the character right before the caret.
- right_delete
- Deletes the character right after the caret.
- undo
- Undoes the latest action.
- redo
- Reapplies the latest undone action.
- redo_or_repeat
- Performs the latest action again.
- soft_undo
- Undoes each action stepping through granular edits.
- soft_redo
- Redoes each action stepping through granular edits.
- cut
- Removes the selected text and sends it to the system clipboard. Put differently, it cuts.
- copy
- Sends the selected text to to the system clipboard.
- paste
- Inserts the clipboard contents after the caret.
- paste_and_indent
- Inserts the clipboard contents after the caret and indents contextually.
- select_lines
Adds a line to the current selection.
- forward [Bool]: Whether to add the next or previous line. Defaults to true.
- scroll_lines
Scrolls lines in the view.
- amount [Float]: Positive values scroll lines down and negative values scroll lines up.
- prev_view
- Switches to the previous view.
- next_view
- Switches to the next view.
- next_view_in_stack
- Switches to the most recently active view.
- previous_view_in_stack
- Switches to the view that was active before the most recently active view. I don’t think this is very clear or even true.
- select_all
- Select the view’s content.
- split_selection_into_lines
- Unsurprisingly, it splits the selection into lines.
- single_selection
- Collapses multiple selections into a single selection.
- clear_fields
- Breaks out of the active snippet field cycle.
- hide_panel
Hides the active panel.
- cancel [Bool]: Notifies the panel to restore the selection to what it
was when the panel was opened. (Only incremental find panel.)
- hide_overlay
- Hides the active overlay. Show the overlay using the show_overlay command.
- hide_auto_complete
- Hides the auto complete list.
- insert_best_completion
Inserts the best completion that can be inferred from the current context. XXX Probably useless. XXX
- default [String]: String to insert failing a best completion.
- replace_completion_with_next_completion
- XXX Useless for users. XXX
- reindent
- XXX ??? XXX
- indent
- Increments indentation.
- next_field
- Advances the caret to the text snippet field in the current snippet field cycle.
- prev_field
- Moves the caret to the previous snippet field in the current snippet field cycle.
- commit_completion
- Inserts into the buffer the item that’s currently selected in the auto complete list. XXX Probably not useful for users. XXX
- unindent
- Unindents.
- toggle_overwrite
- Toggles overwriting on or off.
- expand_selection
Extends the selection up to predifined limits.
- to [Enum]: Values: bol, hardbol, eol, hardeol, bof, eof, brackets, line.
- find_under_expand
- Adds a new selection based on the current selection or expands the selection to the current word.
- close_tag
- Surrounds the current inner text with the appropiate tags.
- toggle_record_macro
- Starts or stops the macro recorder.
- run_macro
- Runs the macro stored in the macro buffer.
- show_overlay
Shows the requested overlay. Use the hide_overlay command to hide it.
- overlay [Enum]:
The type of overlay to show. Possible values:
- goto: Show the Goto Anything overlay.
- command_palette: Show the command palette.
show_files [Bool]: If using the goto overlay, start by displaying files rather than an empty widget.
text [String]: The initial contents to put in the overlay.
- show_panel
Shows a panel.
- panel [Enum]: Values: incremental_find, find, replace, find_in_files, console
- reverse [Bool]: Whether to search backwards in the buffer.
- toggle [Bool]: Whether to hide the panel if it’s already visible.
- find_next
- Finds the next occurrence of the current search term.
- find_prev
- Finds the previous occurrence of the current search term.
- find_under
- Finds the next occurrence of the current selection or the current word.
- find_under_prev
- Finds the previous occurrence of the current selection or the current word.
- find_all_under
- Finds all occurrences of the current selection or the current word.
- slurp_find_string
- Copies the current selection or word into the “find” field of the find panel.
- slurp_replace_string
- Copies the current selection or word into the “replace” field of the find and replace panel.
- next_result
- Advance to the next captured result.
- prev_result
- Move to the previous captured result.
- toggle_setting
Toggles the value of a boolean setting.
- setting [String]: The name of the setting to be toggled.
- next_misspelling
- Advance to the next misspelling
- prev_misspelling
- Move to the previous misspelling.
- swap_line_down
- Swaps the current line with the line below.
- swap_line_up
- Swaps the current line with the line above.
- toggle_comment
Comments or uncomments the active lines.
- block [Bool]: Whether to use a block comment.
- join_lines
- Joins the current line with the next one.
- duplicate_line
- Duplicates the current line.
- auto_complete
- Opens the auto comeplete list.
- replace_completion_with_auto_complete
- XXX Useless for users. XXX
- show_scope_name
- Shows the name for the caret’s scope in the status bar.
- exec
Runs an external process asynchronously.
XXX Document all options.
- transpose
- Makes stuff dance.
- sort_lines
Sorts lines.
- case_sensitive [Bool]: Whether the sort should be case sensitive.
- set_layout
- XXX
- focus_group
- XXX
- move_to_group
- XXX
- select_by_index
- XXX
- next_bookmark
- Select the next bookmarked region.
- prev_bookmark
- Select the previous bookmarked region.
- toggle_bookmark
- Sets or unsets a bookmark for the active region(s). (Bookmarks can be accessed via the regions API using "bookmarks" as the key.)
- clear_bookmarks
- Removes all bookmarks.
- select_all_bookmarks
- Selects all bookmarked regions.
- wrap_lines
Wraps lines. By default, it wraps lines at the first ruler’s column.
- width [Int]: Specifies the column at which lines should be wrapped.
- upper_case
- Makes the selection upper case.
- lower_case
- Makes the selection lower case.
- title_case
- Capitalizes the selection’s first character and turns the rest into lower case.
- swap_case
- Swaps the case of each character in the selection.
- set_mark
- XXX
- select_to_mark
- XXX
- delete_to_mark
- XXX
- swap_with_mark
- XXX
- yank
- XXX
- show_at_center
- XXX
- increase_font_size
- Increases the font size.
- decrease_font_size
- Decreases the font size.
- fold
- XXX
- unfold
- XXX
- fold_by_level
- XXX
- context_menu
- Shows the context menu.
Keyboard Shortcuts - Windows/Linux¶
Warning
This topic is a draft and may contain wrong information.
Editing¶
Windows¶
Ctrl + Alt + Up | Column selection up |
Ctrl + Alt + Down | Column selection down |
Linux¶
Alt + ⇧ + Up | Column selection up |
Alt + ⇧ + Down | Column selection up |
General¶
Keypress | Command |
---|---|
Ctrl + ⇧ + P | Command prompt |
Ctrl + KB | Toggle side bar |
Ctrl + ⇧ + Alt + P | Show scope in status bar |
Find/Replace¶
Keypress | Command |
---|---|
Ctrl + F | Find |
Ctrl + H | Replace |
Ctrl + ⇧ + F | Find in files |
Tabs¶
Keypress | Command |
---|---|
Ctrl + ⇧ + t | Open last closed tab |
Ctrl + PgUp | Cycle up through tabs |
Ctrl + PgDn | Cycle down through tabs |
Ctrl + ⇆ | Find in files |
Alt + [NUM] | Switch to tab number [NUM] where [NUM] <= number of tabs |
Split window¶
Keypress | Command |
---|---|
Alt + ⇧ + 2 | Split view into two columns |
Alt + ⇧ + 1 | Revert view to single column |
Alt + ⇧ + 5 | Set view to grid (4 groups) |
Ctrl + [NUM] | Jump to group where num is 1-4 |
Ctrl + ⇧ + [NUM] | Move file to specified group where num is 1-4 |
Bookmarks¶
Keypress | Command |
---|---|
Ctrl + F2 | Toggle bookmark |
F2 | Next bookmark |
⇧ + F2 | Previous bookmark |
Ctrl + ⇧ + F2 | Clear bookmarks |
Text manipulation¶
Keypress | Command |
---|---|
Ctrl + KU | Transform to Uppercase |
Ctrl + KL | Transform to Lowercase |
Keyboard Shortcuts - OSX¶
Warning
This topic is a draft and may contain wrong information.
Editing¶
General¶
Keypress | Command |
---|---|
⌘ + ⇧ + P | Command prompt |
⌘ + K, ⌘ + B | Toggle side bar |
⌃ + ⇧ + P | Show scope in status bar |
Find/Replace¶
Keypress | Command |
---|---|
⌘ + F | Find |
⌘ + ⌥ + F | Replace |
⌘ + ⇧ + F | Find in files |
Tabs¶
Keypress | Command |
---|---|
⌘ + ⇧ + t | Open last closed tab |
^ + Tab | Cycle up through tabs |
⇧ + ^ + Tab | Cycle down through tabs |
Find in files |
Split window¶
Keypress | Command |
---|---|
⌘ + ⌥ + 2 | Split view into two columns |
⌘ + ⌥ + 1 | Revert view to single column |
⌘ + ⌥ + 5 | Set view to grid (4 groups) |
⌃ + [NUM] | Jump to group where num is 1-4 |
⌃ + ⇧ + [NUM] | Move file to specified group where num is 1-4 |
Bookmarks¶
Keypress | Command |
---|---|
⌘ + F2 | Toggle bookmark |
F2 | Next bookmark |
⇧ + F2 | Previous bookmark |
⇧ + ⌘ + F2 | Clear bookmarks |
Text manipulation¶
Keypress | Command |
---|---|
⌘ + K, ⌘ + U | Transform to Uppercase |
⌘ + K, ⌘ + L | Transform to Lowercase |
Glossary¶
- buffer
- Data of a loaded file and additional metadata, associated with one or more views. The distinction between buffer and view is technical. Most of the time, both terms can be used interchangeably.
- view
- Graphical display of a buffer. Multiple views can show the same buffer.
- plugin
- A feature impemented in Python, which can consist of a single command or multiple commands. It can be contained in one .py file or many .py files.
- package
- This term is ambiguous in the context of Sublime Text, because it can refer to a Python package (unlikely), a folder inside Packages or a .sublime-package file. Most of the time, it means a folder inside Packages containing resources that belong together, which build a new feature or provide support for a programming or markup language.
- panel
- An input/output widget, such as a search panel or the output panel.
- overlay
- An input widget of a special kind. For example, Goto Anything is an overlay.