TextMate: The Last Straw

That’s it. I’m done with TextMate. It hasn’t been updated in over 2 years, either for essential functionality (replace in path) or performance fixes (searching through log files) or UI issues (how many boxes must you click to enable autosave?) or bug fixes. Every few months the author pokes his head up and says “I’m working on TextMate 3.0!” and then disappears again, happily accepting new license fees into his PayPal account.

I’ve just been bitten twice in two weeks by a bug that caused not just data loss, but data mangling in a way that was very difficult to fix. Here’s the rough steps to reproduce:

Edit some files in TextMate

Leave TextMate running in the foreground

Switch to console and “git pull” in the latest code from your workmates

Run a search-and-replace that edits a file that was changed (by someone else) during the merge

Save that edit

You’ll see (with “git diff”) that your version of the file has your new post-merge changes… but it also has reverted your buddy’s changes from the merge. It’s like you decided that those changes were no good and reverted them yourself and then added your own.

If you fail to notice this before checking in, you will totally hose your version control… but just for that one file. You can’t just revert a whole commit… you’ll have to step through change by change to figure out which change was theirs, which change was yours, and which change looks like it was yours but was actually an inadvertent revert of theirs!

16 Comments

Olly says:

I’ve been using RubyMine since 1.0 and can’t say enough about how great it is. How anyone uses TextMate or vim or emacs or any other text editor on large projects is beyond me. RubyMine is worth the price for Cmd+B alone.

March 16, 2010 at 3:59 pm

Steve Conover says:

Well good luck with RM. You get some more power but at the cost of problems like:

– slow startup time
– the experience regularly degrades over the course of the day resulting in the need to restart
– all the sudden I’m sucking up 100% of both my cores, why?
– all the sudden menu options disappear, why?
– some types of files (erb templates that aren’t rails view) bring RM to a crawl

There are many features I wish I had in TM that RM has. But here’s what it comes down to for me (and it’s sort of a close call):

1) The base of every good IDE must be a GREAT text editor. That was a big difference between Intellij and the old bloated java IDE’s. RM is not a great text editor, it’s not snappy and it cares way too much about trying to eval the ruby code the way Intellij eval’ed java. Of course you get some power here when it works well but when it doesn’t…man do you lose time and, more importantly, flow.

And having lived with both, simply having good syntax highlighting on ruby code is kind of fine, for me. It’s not java where you needed a tool to deal with all the boilerplate.

2) Stability and performance. The issues that come up are exotic and often not reproducible, but they come up on a regular basis. I’m more or less certain that one or two flow states will be interrupted per day.

We don’t care to publish the latest RM issues people are having on our standup blog, but if we did I think you might think about this a lot differently.

Again this is not to say that TM is great. In fact RM blows TM away on the tools “around” the text editing – cross-project search, scm integration – it’s just (in my judgement) not that pleasant as a text editor that encourages flow, which is priority #1.

March 16, 2010 at 5:03 pm

Alex Neth says:

I’m nearing my evaluation period for tm and am very reluctant to chalk up the license fee given the staleness of the product. I have the same concerns about RM though. 90% of the time I just want a super responsive text editor and RM slows me down. I’m not sure what to do.

I use RubyMine almost exclusively, and I agree with everything Steve wrote above. I think it really depends on the person. How much are you willing to put up with to get all the kick-ass features that it has? Stuff like “Go to symbol”, or ⌘+click to make references to classes, files, methods, etc. hyperlinks… At this point I couldn’t get on without it.

For me, there is no vi-emulation worth using for textmate so I’ll put up with quite a lot from RubyMine. Plus it is actively developed and released frequently. It’s gotten *a lot* better over time and I expect it to keep getting better.

I’ll try TM2 if it ever comes out, but for me TM1 is little more than a replacement for TextEdit.

* Run the current test file
* Run the specific test under the cursor
* Jump between related test / controller / view / model files
* Replace highlighted code blocks with render partial calls and create the partial
* Syntax highlighting and completion for all of Rails
* All the other goodness that comes from an editor that has been under constant development for 10 years

Expect an exceptional intense learning curve, followed by a couple of decades without switching editors.

I started developing another generic text editor some time ago. Although I’m not a Rubyist myself it’s one of my number one priorities to support great syntax highlighting for Ruby. It is snappy and does also read full rails logs, asks you before you want to save smth. (also after find and replace)…

It’s probably not as feature complete as textmate.
If you feel there is something missing let me know.
(Excuse me for placing an add here so bluntly;)

March 18, 2010 at 9:01 am

Brandon Keene says:

It’s all about the right tool for the right job.

I use TextMate 99% of the time for basic text editing and general Rails development. It’s simple, fast, and generally a good editor. Snippet support is awesome. Bundles (cucumber, haml, etc) are awesome.

TextMate also really sucks that the following:
– Large repositories (you can somewhat fix this with good folder ignore patterns)
– Searching (the default sucks, use ‘Ack in Project’, it’s pretty good)
– Search and replace (use RubyMine, seriously)
– Code folding (it sucks for Ruby but is good with other things like C, JS, Python, etc)
– Getting bugs fixed (“It’ll be fixed in TM2″)

For log files (or any file over 10,000 lines) I only use vi or unix command line tools. RubyMine isn’t much better than TextMate in this department in my experience.

RubyMine is pretty good at refactoring and search and replace, but it’s a pretty crappy text editor. It’s slow and crashes frequently (beach ball of death, 700m+ of memory, thanks!). Also, releases break lots of stuff, sometimes multiple times between releases. Everyone is always searching for the ‘least crippled’ release. I’ve never seen cucumber feature running work (everyone somehow lives with running features in a terminal when TM has amazing focused run support). I also kinda hate its fuzzy finder except on rails projects that have more than 100 controllers (admittedly, TextMate file finder falls down when you have 50 files named ‘_form.html.haml’)

I find your problem with ‘atomic saves’ in TextMate to be pretty hilarious considering RubyMine’s settings pane would make most 747 cockpits look pretty minimal. :)

I’ll cast my vote in for vim as well. Vim fuzzy_finder plugin + ctags covers all navigation needs. I’ve had trouble with the rails.vim plugin path breaking (seems like rails.vim doesn’t like HAML) so mapping Rrefresh! to r made it easy to fix on-demand.

March 31, 2010 at 11:05 pm

Alex Chaffee says:

Brandon – I agree with all your points save one. (Get it?)

Yes, RM has a million settings. But at least they’re all in one place, and there’s a search function, and they’re organized. TM also has a million settings, only in TM, the million settings are spread around the menus, the preferences dialog, and the bundle editor, and some of them (e.g. autosave and key bindings) can contradict each other with no way to resolve the contradictions.

April 1, 2010 at 6:33 am

Steve Conover says:

I had a last-straw moment with RM yesterday. We were doing a simple cross-project method inlining, and let’s say there were about 60 references (mostly in tests).

Here’s what this magical IDE got us:

* for starters, there’s no inline-method in RM like in Idea.
* so we apple-shift-F’d for references and were navigating around using option-apple-down (maybe my favorite Intellij flow)
* but as we skipped to a new file, the IDE starts evaluating the ruby code in a JIT manner, and you’re trying to type on the line you’re looking at but…it’s…..like…..you’re……typing…..in…mud and then you start making mistake and compounding the problem
* after about 20 of these the IDE got into a worse and worse state requiring a restart
* the restart meant things were back to being merely slow and not totally unworkable
* and I notice my own response to this is to mash keys harder in RM. I think users do that when the on-screen response isn’t immediate…I’m always leaning into keystrokes more, in a way saying to RM “did you get that?”

My pair pointed out that we could do a cross-project regexp search and replace. Like you do in a good text editor.

Then I started thinking about this whole it’s-an-IDE claim. It’s not really true…not like Intellij. I think I successfully F4 into maybe half of all the methods I hit F4 on. Shift-F6 has similarly limited capability and if you’re not careful with it in a dynamic language you can do damage. It’s a dynamic language and RM is doing its best, but do inconsistently-working IDE features really get you anywhere? Isn’t it almost worse that it works sometimes vs consistently-not-at-all?

One thing I think we can all agree on is it’s a FAR worse text editor than TM.

April 3, 2010 at 9:14 am

jeff says:

Have you tried Netbeans? I’ve been using it for over a year now and I’m pretty happy with it. Used it on both Windows and Mac. I don’t know if it has any Git integration since I still just use SVN, but then again the only SCM integration I “use” is when it shows me uncommitted changed lines in the gutter. I still do commits from the command line.

+1 I left TM (and went back to vim) quite a while ago when I realized that TM was essentially abandonware. The only thing I missed from TM was CMD+T but I replaced it with fuzzyfinder_textmate (which is now abandoned) and then Command+T (http://www.vim.org/scripts/script.php?script_id=3025) which is most excellent.

Vim is fast, versatile, reliable, cross-platform, and will be around forever. Your time is important, invest it in something that will last.