When it comes to keyboard navigation, Vim impresses the hell out of me, but TextMate keyboard shortcuts take up more of my muscle memory than any other app. I’m sure anyone who’s used any IDE for a while has their share of keyboard chops and preferences. Even in the graphics world, you are absolutely not considered a Photoshop pro until you’ve learned at least 36 keyboard shortcuts.
Note: I have a lot of custom, system-level keybindings for writing Markdown, so if I say something and you try it and it’s just not there, let me know. Though not likely, I might mix up my own hacks with Byword’s actual features.
Byword keyboard shortcuts for fun and profit
First off, there’s a very handy shortcut for increasing and decreasing the scope of a text selection. Command-Option-Up Arrow will expand your selection in both directions, selecting the closest word to the right of the caret1, or the current word if the caret is inside a word. Press it again and the sentence containing the word is selected. Unlike advanced text editors, it’s not aware of scopes, so it doesn’t stop between encompassing quotes or brackets, but for most writing purposes, this is just fine. Pressing it again will select the paragraph you’re working on. One more and you’ll select the whole document. At any point after expanding the selection, you can reduce it back to the next level with Command-Option-Down Arrow.
That’s super-handy, but it gets cooler.
Moving and sorting
Alternate section heading: “So much help with sorting and moving that you’ll have to buy them a 6-pack at the end of the day.” That one got a bit long.
It’s also worth pointing out the text movement shortcuts. The first handy one is Control-Command-Up/Down Arrow. This moves selected text up and down by lines. If you have a selection in the middle of a line, it will remove that selection from the line and put it above or below (depending on which arrow key you hit). You can reorganize paragraphs very easily with the first selection shortcut I mentioned and then some Control-Command-Up/Down action.
The real beauty of this text movement shortcut, though, is in Markdown list editing. Command-Option-Up-Up will select the full line of the list item your caret is in, and then you can use Control-Command-Up/Down to re-order items. It’s so much faster than copy/paste that it hurts just to think about doing it that way. Guess what? It works for indentation, too. You can indent and outdent with Control-Command-Left/Right. Not just lists, either. It works well on paragraphs and blockquotes, and is especially handy for tabbing a block of code (or poetry) in for Markdown formatting.
More Markdown List Love
Lastly, jumping back to Markdown lists for a moment… You may know Command-L is a shortcut for starting a bullet list. It will also instantly turn an existing line of text into bulleted list item, and you can run it from any point in the line without making a selection. Hitting return from the end of that line will automatically continue a list. You can also run it on any series of lines to turn every line break into a new list item all at once (blank lines will become blank list items, it doesn’t compress whitespace). You can also run it on a line that’s already a list item to remove the bullet, again without selecting anything.
Of course, you can do the same for numbered lists with Command-Option-L, same behavior across the board. Quickly create your lists–bullet, numbered or nested–reorder them with the text movement shortcuts and then you’ll come to my favorite of the list commands: Command-Shift-L converts lists between bullet and numbered.
Extensive elaboration on why I love ⌘⇧L
It’s not my favorite because I use it often, but because it’s one feature that I only ever see in the most well thought-out Markdown editors. Fletcher put it into the original MultiMarkdown TextMate bundle (and I expect it will be incorporated into MultiMarkdown Composer, eventually).
Anyway, you put the caret on any line of your list, type Command-Shift-L and every list item at that level gets toggled between numbered and bulleted. It’s smart, too. If you’re operating on an indented line that’s part of a nested list, it will only affect the items in that section of the list. If you run it on a root-level item, it won’t affect any sub-lists, only converting the root items.
Additionally, Command-Shift-L re-sequences the numbers when converting to numerical format, making it a breeze to re-build your lists after doing some of that speedy sorting I was talking about earlier. It also comes in handy when creating the list: you start a bulleted list, and then Control-Command-Right to indent the list item and hit Command-Shift-L to switch to numbers, and when you finish the nested list, outdenting and switching back to bullets is two key-combinations away.
When it toggles the type, it intelligently handles converting mismatches, too, turning a mix of numbers and asterisks first into a properly ordered numbered list and then toggles the whole thing to bullets on a repeat keypress.
That was a whole section about one keyboard shortcut, sorry. I just have a strong appreciation for really thoughtful developers and features like this2. There are more keyboard shortcuts in Byword, just browse through the menu system!
I love you, man
I know it sounds like I’m drunk now, screaming “man, I love you guys” at mere acquaintances, but I assure you I’m simply impressed enough to have to blabber on for a while.
I also know I’ve already reviewed Byword, but I’ll say this: they’ve already turned what started out as an (in my opinion) over-simplified “distraction-free” editor into a beautiful and powerful writing tool, while still maintaining its minimalist interface. It’s like the developers are hacking into my emails (and my brain) and just doing everything I’ve always wanted.
Keep up the awesome work, MetaClassy, you’re quickly setting the bar for Markdown editors.
I’m referring to the cursor in the text editor by its “proper” name (caret) to avoid confusion with the mouse cursor. ↩
Elastic Threads has worked his butt off on a bunch of equally well-thought-out and ingenious features for nvALT. When I get my act together and finish up my part, you’ll all see what I mean. Paste a url onto a selection and turn it into a Markdown link with intelligent detection of whether it should be a reference link or an inline link? Seriously. ↩