TextMate is one of the best editors I have used on the Mac, and things like its macros, snippets, and tab triggers almost make me switch right away. Especially column-based typing is awesome.
However, there are a couple of limitations that are important enough for me to keep me from switching. In rough order of importance:
- Function parser is line-based
The functions popup or the symbol browser (Command-Shift-T) work line-based, i.e. they don't recognize functions such as
void foo( int param1, int param2) { }
We have a coding style that requires this layout for most functions, so the function popup/symbol browser is next to useless for us.
I understand that this is because the regular expression based function parser can only work line by line, but still this is one of the most severe limitations for me.
- Loses insertion point when document is changed by another app
If another application changes a document that is currently open in TextMate, TextMate notices this when you bring it to the front, and reloads the changed document. This is good; however, it loses track of where you were editing, and scrolls all the way to the top, setting the insertion point to the beginning of the text. I suppose this is intentional, because an existing selection may no longer be at the right place after the other application inserted or deleted text before the selection; however, in the majority of cases it makes more sense to me to keep the current selection and scroll position, even if it may be slightly off. For example, when I use TextMate for coding but Xcode for debugging, I often fix minor typos in the Xcode editor while debugging, and it is very annoying to have to go back to where you were editing in TextMate after that.
- Find has no "whole words only" option
I must be missing something here. This seems like such as basic feature of any serious text editor.
- Option-RightArrow stops too often
When stepping word by word through a sequence such as "abc / def", Option-RightArrow stops after 'abc' (which is fine), and then it stops *before* 'def', which is not; it should directly jump to after 'def'. In other words, it should jump from one end of a word to the end of the next word, skipping all non-words. Xcode and CodeWarrior do this right (in my opinion); in BBEdit it's even worse than in TM though.
- Bundle commands should be available without an open window
Some bundle commands are already available now when no window is open (e.g. "Relaunch TextMate"), but they don't do anything when chosen. For some commands this would be very useful though (e.g. Xcode/Run, or most Help commands).
- Undo is per-character
Typing sequences should be consolidated into a single undo step. Doesn't anybody use undo for typing? This is basically unusable in TextMate.
- Shift Left/Right should extend the selection to whole lines
I often put the insertion point somewhere in the middle of the first line of a paragraph, hit Shift-DownArrow until I'm in the middle of the last line of the paragraph, and then choose Shift Right; this will insert a tab in the middle of the first line, which makes absolutely no sense to me. Same for "Source/Comment Line". I think these commands should first extend the selection to the beginning of the first and end of the last selected line; I can't think of a single situation where you wouldn't want this. BBEdit gets this right.
- Remap keys for Shift Left/Right
If there's a multi-line selection, I'd like Tab and Shift-Tab to be bound to Shift Right/Shift-Left. I see no reason why I should have to hold down Option too.
- Control-RightArrow should jump by CamelCaps sub-words
Right now, Ctrl-Left/Right jump to the beginning/end of the line; there's already Command-Left/Right for that, so I think Ctrl-Left/Right would be free to jump over the sub-words of a CamelCapsVariableName. See Xcode.
- Show key binding for a particular key
With all those bundles and scope-based bindings, it can be very difficult to figure out what command a particular key is currently bound to in the current context. There's the Bundles/TextMate/Show Keyboard Shortcuts command, but it generates a huge list that you have to wade through. It would be very useful to have a function that lets you type a key and displays what it is bound to.