TextMate

TextMate is a general-purpose GUI text editor for Mac OS X created by Allan Odgaard. Its users are mostly programmers, though it has been used for screenwriting . Notable features include declarative customizations, tabs for open documents, recordable macros, folding sections and snippets, shell integration, and an extensible bundle system.

History

In 2004, Allan Odgaard began the development of TextMate. 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 like BBEdit does, and had no options for printing. At the beginning only a small number of programming languages were supported, as only a few “language bundles” had been created. Despite all that, some developers found this early and incomplete version of TextMate a welcome change to a market that was considered stagnated by the 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 reviewers 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 will include wasn’t disclosed.

Features

Nested scopes

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.

Snippets

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.

Bundles

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 common key such as the return key and spacebar can be overridden to make coding seamless.

36 bundles ship with TextMate, but a Subversion repository contains 121 bundles, for everything from Markdown to blogging to MIPS assembly language.

Project Management

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.

Other features

TextMate has several other notable features:

Limitations

TextMate does have a few limitations:

Community

TextMate has a large and active community of users, dozens of whom contribute to the open-source bundle subversion repository. The TextMate wiki has many hints and tips, feature suggestions, and links to external resources. The mailing list has medium traffic, but with a relatively high signal-to-noise ratio. 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. Most bundles are supported by primary users – for instance the Ruby and Ruby on Rails bundles are supported by core developers for these languages libraries such as David Heinemeier Hansson, Rails’ creator.

Awards

TextMate 1.5 won the Apple Design Award for best developer tool in 2006.

Source