I've had a bit of a chance today to take TextMate for a test drive, and unlike 2lmc and Erik, I must say that I'm pretty impressed on the whole. OK, very impressed. Sure, it has a few rough edges, but it is a beta. And there seems to me to be enough slickness there to promise good things for the future. It's very customisable and expandable, and I'm sure it won't be long before we're flooded with bundles to support syntax colouring, commands and snippets for dozens of languages. For now, the default tools are slanted towards HTML, PHP and Ruby. This is obviously disappointing if you're a Perl geek (or a Shell scripting geek, or a LaTeX geek). However, as I've mentioned before, I'm learning Ruby at the moment and it makes a nice change to find a text editor with really good support for Ruby.
As usual when I try out a new application, I headed for Preferences to
see what I could mess about with. Hmm. No Preferences. I'll save you
five minutes of hunting around on the menus and tell you that there's
no GUI for the preferences. It says in the Help file that you can set
some parameters at the command line using
defaults write com.macromates.textmate, but you'll be working in the
dark. Changes that you make to settings with the application running
(like turning line numbers on or off) do seem to get saved automatically
between launches. I don't know if there are plans to eventually
implement a GUI for the preferences, but it would seem likely.
Another standard command that seems to be missing is Print. I say
'seems' because I can't quite believe that it isn't there — surely
I must have just overlooked it somewhere? However, since TextMate
includes such comprehensive tools for issuing commands on a selection or
the whole document, it ought to be perfectly possible to pipe text out
lpr to print it, though I guess you need to convert it to
Postscript first to do it that way.
With those gripes out of the way, let's get on with the cool things
about TextMate. First, there are a lot of ways to customise it. You can
.plist file to specify syntax colouring and folding
according to regular expressions, so it's perfectly possible to provide
support for almost any language. You can record macros of editing
sequences to automate repetitive sequences. I produced one really
quickly to comment or uncomment selections with a # character. Your
last macro is stored as a 'scratch' macro, that you can replay until
you record another, but if you want to keep it, you can save it with a
name and an optional hot key. Commands can also be stored. These are
fragments of script (any of the scripting languages that MacOS X
understands — Shell, Perl, Ruby, Python or Applescript) that can be
performed on either the selection or the entire document. This is an
enormously powerful feature, as you can either overwrite the document
(or selection) with the result, insert it at the end, put it on the
clipboard, show it as a tooltip or open an new document window. There's
a nice example in the help file of setting up a command to search your
document for the word under the cursor. It then shows you the lines
containing the word in a separate window, and because it stores the line
numbers for the results, you can select a line in the results window and
see that line highlighted in your file. I set up a very simple command
to send the selected text as Standard Input to
wc -w and show the
results in a tool tip. This means that I can select a block of text (or
the whole document), and get the number of words in the selection in a
There are snippets, which allow you to insert a mini template for some
repetitively-used text (an if statement, an HTML anchor or a PHP
statement, for example), and you can filter a selection through a
command, which is ideal for munging text. Just to round things off,
it's possible to write a line of code in your document and execute that
line, inserting the result. This is handy for getting the current date,
using the Unix
date command, but it would be neater if you could
choose whether or not to overwrite the line of code itself.
I think this is the really strong point of TextMate: if you have the ability to add in functionality (provided that you have a bit of scripting know-how), you can build a text editor with exactly the features you need and no bloat. It's like Vim in that respect. Even if you don't have the know-how, syntax files, commands and snippets can be packaged up in a bundle, so users can share useful tools they have created.
Lastly (but not leastly), I think that TextMate looks like it belongs in MacOS X. The tabs are pretty (in my opinion), and the folding is neat. If you fold some text and hover over the ellipsis which denotes some folded text you get a tool tip showing you what's hidden. That's a nice touch.
TextMate seems to be really polarising opinion. Perhaps we'll look back on the 6th of October as the day when Mac users got their own Emacs/vi-style holy war. "Ah, yes Grandaughter. I was there back in '04 when the BBEdit/TextMate wars started..."