This is a draft of the TextMate 2 manual


  • Installing bundles (Preferences → Bundles)
  • Locations and delta format
  • Distributing bundles
  • Getting your bundle added to the index
  • Reverting to default bundles

Finding Bundle Items

  • Title/key equivalent search (⌃⌘T)
  • Editing found item (⌥↩)

General Actions

  • Diff actions
  • Math actions
  • TODO actions
  • Paste Online
  • Sorting
  • See Also: Version Control

Source Actions

  • Build/Run: Running untitled documents (⌘B/⌘R)
  • Documentation for Word (⌃H)
  • Validate Syntax (⌃⇧V)
  • Commenting/uncommenting: How to configure
  • Toggle single/double quotes or camelCase/snake_case
  • Aligning assignments
  • Insert line-terminator and/or newline

Bundle Editor

  • How to create new items: ⌘N

Tab Trigger

Key Equivalent


  • Requiring shell commands
  • Requiring other bundles

The following can be added to a bundle item (setting it for a bundle’s info.plist is equivalent to setting it for each item in that bundle):

require = ( { name = «name»; uuid = «uuid»; }, … );

The UUID is that of the bundle or bundle item required. The name is the name under which the required item should be available (more or less), this only make sense when the UUID is that of a grammar or bundle, see details below. The name defaults to the bundle’s or bundle item’s name, except for grammars, where it is the root scope for the grammar.

If the UUID is that of a bundle item, TextMate ensures that the item and bundle containing it, when the item with the requirement is “executed”, is available.

If the UUID is that of a bundle, TextMate ensures that the bundle is available and will set TM_«name»_BUNDLE_SUPPORT when “executing” the item with the requirement. It will uppercase the name provided.


To be able to use include = 'source.c'; in the Objective-C grammar, it should have the following requirement:

require = (
   {  name = 'source.c';
      uuid = '25066DC2-6B1D-11D9-9D5B-000D93589AF6';

The Subversion bundle’s info.plist could contain the following:

require = (
   {  name = 'Dialog';
      uuid = 'F985E884-C6F4-4FB1-B7F6-447A72ECF267';

This ensures that the bundle providing a ruby interface to the Dialog system is available and that commands in the Subversion bundle written in ruby can do:

require "#{ENV['TM_DIALOG_BUNDLE_SUPPORT']}/lib/ui"