|This article relies on references to primary sources. (November 2010)|
|Developer(s)||Allan Odgaard (MacroMates), Ciarán Walsh|
|Stable release||1.5.11 (r1635) / 13 July 2012|
|Preview release||2.0-alpha (9489) / 23 October 2013|
|Operating system||OS X|
TextMate is a general-purpose GUI text editor for Mac OS X created by Allan Odgaard. Notable features of TextMate include declarative customizations, tabs for open documents, recordable macros, folding sections, snippets, shell integration, and an extensible bundle system.
TextMate 1.0 came out on 5 October 2004, after 5 months of development, followed by version 1.0.1 on 21 October 2004. The release focused on implementing a small feature set well, and did not have a preference window or a toolbar, didn’t integrate FTP, and had no options for printing. At first only a small number of programming languages were supported, as only a few “language bundles” had been created. Even so, some developers found this early and incomplete version of TextMate a welcome change to a market that was considered stagnated by the decade-long dominance of BBEdit.
TextMate 1.0.2 came out on 10 December 2004. In the series of TextMate 1.1 betas, TextMate gained features: a preferences window with a GUI for creating and editing themes; a status bar with a symbol list; menus for choosing language and tab settings, and a “bundle editor” for editing language-specific customizations. On 6 January 2006, Odgaard released TextMate 1.5, the first “stable release” since 1.0.2. Reviews were positive, and many who had previously criticised the program now endorsed it.
TextMate continued to develop through mid-2006. On 8 August 2006, TextMate was awarded the Apple Design Award for Best Developer Tool, at Apple’s Worldwide Developers Conference in San Francisco, California, to “raucous applause.” In February 2006, the TextMate blog expressed intentions for future directions, including improved project management, with a plug-in system to support remote file systems such as FTP, and revision control systems such as Subversion. Those changes, however, have been slow to materialize. Throughout 2007, the core application changed only minimally, though its “language bundles” continued to advance.
In June 2009, TextMate 2 was announced to be in development and about 90 percent complete, but which features it would include wasn't disclosed. A public alpha was made available for download on the TextMate blog in December 2011, but as of October 2012, a final version has yet to be released.
In August 2012, TextMate 2’s source code was published on GitHub under the terms of the GNU General Public License. It remains a commercial product, however, and users are required to purchase a license from Macromates.
TextMate allows users to create their own arbitrarily complex syntax highlighting modes by using a modified version of the Apple ASCII property list format to define language grammars. These grammars allow nesting rules to be defined using the Oniguruma regular expression library, and then assigned specific “scopes”: compound labels which identify them for coloration.
Therefore, each point of a document is assigned one or more scopes, which define where in the document the point is, how it should be colored, and what the behavior of TextMate should be at that point. For instance, the title of one of the links in the “External links” section has the scope:
text.html.mediawiki markup.list.mediawiki meta.link.inline.external.mediawiki string.other.link.title.external.mediawiki
This scope tells us that we are looking at a link title within a link within a list within a MediaWiki document.
TextMate themes can mark up any scope, at varying levels of precision. For instance, one theme may decide to color every constant (
constant.*) identically, while another may decide that numerical constants (
constant.numeric.*) should be colored differently than escaped characters (
constant.character.escape.*). The nested scope syntax allows language authors and theme authors various levels of coverage, so that each one can choose to opt for simplicity or comprehensiveness, as desired.
TextMate supports user-defined and user-editable commands that are interpreted by bash or the interpreter specified with a shebang. Commands can be sent many kinds of input by TextMate (the current document, selected text, the current word, etc.) in addition to environment variables and their output can be similarly be handled by TextMate in a variety of ways. At its most simple, a command might receive the selected text, transform it, and re-insert it into the document replacing the selection. Other commands might simply show a tool tip, create a new document for their output, or display it as a web page using TextMate's built-in HTML renderer.
Many language-specific bundles such as bash, PHP or Ruby contain commands for compiling and/or running the current document or project. In many cases the result (STDOUT and STDERR) of running the code will be displayed in a window in TextMate.
At their simplest, TextMate “snippets” are pieces of text which can be inserted into the document at the current location. More complicated behaviors are possible, based on a few useful generalizations of this idea. First, snippets can include one or more “tab stops”, which can be cycled through using the “tab” key. Second, the results of these tab stops can be dynamically changed in another portion of the snippet, as the user fills in the stop. Third, the snippets have access to TextMate environment variables such as current scope, current line number, or author name, and also have the ability to run inline shell scripts.
TextMate language grammars, snippets, macros, commands, and templates can be grouped into “bundles” of functionality. Any snippet, macro, or command can be executed by pressing a keyboard shortcut, by typing a particular word and then pressing the “tab” key (so-called “tab triggers”), or by selecting the command from a menu. Tab triggers are particularly useful; the combination of tab triggers and snippets greatly eases coding in verbose languages, or languages with commonly-typed patterns.
Snippets, macros, and commands can be limited to a particular scope, so that for instance the “close html tag” command does not work in a python script, freeing up that keyboard shortcut to be used for something else. This allows individual languages, and even individual scopes, to override built-in commands such as “Reformat Paragraph” with more specialized versions. Even special keys such as the return key and spacebar can be overridden.
Several documents or folders can be opened at once in a TextMate project window, which provides a drawer along its side listing file and folder names, and a series of tabs across the top. Search and replace can be undertaken across an entire project, and commands can interact with the selected files or folders in the drawer. Bundles for CVS, Subversion, darcs, and other revision control systems allow TextMate to manage versioned code.
TextMate has several other notable features:
- Folding code sections can be used to hide areas of a document not currently being edited, for a more compact view of code structure or to avoid distraction. The sections to be folded can be selected by hand, or the structure of the document itself can be used to determine foldings.
- Regular-expression–based search and replace speeds complicated text manipulations. TextMate uses the Oniguruma regular expression library developed by K. Kosako.
- A function pop-up provides a list of sections or functions in the current document.
- Clipboard history allows users to cut many sections of text at once, and then paste them.
- A column editing mode trivializes adding the same text to several rows of text, and is very useful for manipulating tabular data.
- A WebKit-based HTML view window shows live updates as an HTML document is edited.
- VoiceOver and Zoom users can use TextMate thanks to its accessibility support.
TextMate does have a few limitations when compared to other editors in its class:
- Because TextMate is not tightly coupled to a scripting language, as Emacs is to elisp, it is impossible for users to have complete control over the behavior of some built-in commands such as those which indent sections of text or those which move columns around; however, many useful actions can be accomplished with TextMate’s macros and commands. Allan Odgaard explained his thoughts on the subject in an email to the TextMate mailing list.
- There is no support for variable-width or wide fonts, meaning that languages such as Chinese, Japanese, Korean, and others are not supported, as their characters are wider than Latin characters.
- There is no support for right-to-left languages such as Hebrew and Arabic, though it seems the problem is resolved in version 2.
- TextMate has no built-in support for (S)FTP. There are workarounds on the TextMate Wiki.
- No built-in HTML validator — because TextMate uses the W3C validator for HTML validation, users must have an active network connection to validate HTML.
- Despite its substantial support for macros and snippets, TextMate has no built-in support for code-hinting or guided code-completion, so text editors that support these features may prove to be a better choice when learning the syntax of a new language.
- TextMate is not binary safe. It is explicitly text only, and does not guarantee that arbitrary binary data in a file will be preserved through a load/save cycle, regardless of whether that data is edited.
- There is no ability to split windows, though a split screen view is a part of the TextMate 2 alpha.
TextMate has a community of users, who contribute to the open-source bundle Subversion repository. The TextMate wiki has hints and tips, feature suggestions, and links to external resources. A ticket system exists for filing bug reports and feature requests, and an IRC channel (#textmate) is usually active.
TextMate users write code in many dozens of programming languages, and bundles have been written to support these. The Ruby and Ruby on Rails bundles are supported David Heinemeier Hansson, Ruby on Rails’ creator.
Other operating systems
There are no plans for a Windows/Linux port, as of 2013.
TextMate 1.5 won the Apple Design Award for best developer tool in 2006.
- David Hansson. “TextMate 1.0 is finally here!”, TextMate Blog, 5 October 2004.
- Allan Odgaard. “Profiles/Allan Odgaard” on the TextMate wiki, 20 November 2005.
- David Hansson. “TextMate 1.0.1 emerges after nine betas”, TextMate Blog, 21 October 2005.
- Matt Willmore. “TextMate 1.0.1 Review: A Checkmate for TextMate?”, Maczealots.com, 8 October 2004.
- Michael “drunkenbatman” Bell. “TextMate: The Missing Editor for OS X”, Drunkenblog, 4 November 2004.
- Kimbro Staken. “A cool new text editor - TextMate - Mac OS X”, Inspirational Technology, 6 October 2004.
- Allan Odgaard. “TextMate 1.5”, TextMate Blog, 6 January 2006.
- Rui Carmo. “Third Time’s The Charm”, Tao of Mac, 8 January 2006.
- John Gruber. “ADA: TextMate 1.5.2”, Daring Fireball Linked List, 8 August 2006.
- Allan Odgaard. “Future Directions”, TextMate Blog, 15 February 2006.
- TextMate Blog: Working on It, 14 June 2009
- TextMate Blog: , Dec 13, 2011
- GitHub, , Aug 9, 2012
- For information on getting more bundles, see the relevant section in the TextMate manual.
- "20 Regular Expressions". TextMate. Retrieved 2009-04-28.
- Support accessibility in text view - VoiceOver and Zoom. GitHub pull request
- Allan Odgaard. “Re: Changing cursor position from command”. TextMate mailing list. 14 February 2007.
- How to edit files from my FTP Server as a TextMate project. TextMate Wiki - FAQ: Projects
- TextMate Wiki, 2013-08-21
- Gray, James Edward II (January 2007). Textmate: Power Editing for the Mac. Pragmatic Bookshelf. ISBN 0-9787392-3-X.