Sublime Text 2 for Ruby
Matz has said he wants Ruby to be the “80% language”, the ideal tool for 80% of software development. After switching from TextMate to Sublime Text 2 (ST2) a few months ago, I believe it’s the “80% editor”. You should switch to it, especially if you’re using TextMate.
Why Sublime Text 2?
Speed. It’s got the responsiveness of Vim/Emacs but in a full GUI environment. It doesn’t freeze/beachball. No need to install a special plugin just to have a workable “Find In Project” solution.
Polish. Some examples: Quit with one keystroke and windows and unsaved buffers are retained when you restart. Searching for files by name includes fuzzy matching and directory names. Whitespace is trimmed and newlines are added at the end of files. Configuration changes are applied instantly.
Split screen. I never felt like I missed this that much with TextMate, but I really appreciate it now. It’s ideal for having a class and unit test side-by-side on a 27-inch monitor.
Extensibility. The Python API is great for easily building your own extensions. There’s lots of example code in the wild to learn from. (More about this later.) ST2 support TextMate snippets and themes out-of-the-box.
Great for pair programming. TextMate people feel right at home. Vim users can use Vintage mode. When pairing with Vim users, they use command mode when they are driving. I just switch out of command mode and everything “just works”. (It also works on Linux, if that’s your thing.)
Updates. This is mainly just a knock on TextMate, but it’s comforting to see new dev builds pushed every couple weeks. The author also seems to be quite responsive in the user community. A build already shipped with support for retina displays, which I believe is scheduled for a TextMate release in 2014.
Getting Started
I’ve helped a handful of new ST2 users get setup over the past few months. Here are the steps I usually follow to take a new install from good to awesome:
Install the
subl
command line tool. Assuming ~/bin is in your path:ln -s "/Applications/Sublime Text 2.app/Contents/SharedSupport/bin/subl" ~/bin/subl
It works like
mate
, but has more options. Checksubl --help
.Install Package Control. Package Control makes it easy to install/remove/upgrade ST2 packages.
Open the ST2 console with Ctrl+` (like Quake). Then paste this Python code from this page and hit enter. Reboot ST2. (You only need to do this once. From now on you’ll use Package Control to manage ST2 packages.)
Install the Soda theme. This dramatically improves the look and feel of the editor. Use Package Control to install the theme:
* Press ⌘⇧P to open the Command Palette.
* Select "Package Control: Install Package" and hit Enter.
* Type "Theme - Soda" and hit Enter to install the Soda package.
Start with a basic Settings file. You can use mine, which will activate the Soda Light theme. Reboot Sublime Text 2 so the Soda theme applies correctly. You can browse the default settings that ship with ST2 by choosing “Sublime Text 2” > “Preferences…” > “Settings - Default” to learn what you can configure.
Install more packages. My essentials are SCSS, RSpec, DetectSyntax and Git. DetectSyntax solves the problem of ensuring your RSpec, Rails and regular Ruby files open in the right mode.
Install CTags. CTags let you quickly navigate to code definitons (classes, methods, etc.). First:
$ brew install ctags
Then use Package Control to install the ST2 package. Check out the default CTags key bindings to see what you can do.
Leveling Up with Custom Commands
Sublime Text 2 makes it dead simple to write your own commands and key bindings in Python. Here are some custom bindings that I use:
- Copy the path of the current file to the clipboard. Source
- Close all tabs except the current one (reduces “tab sprawl”). Source
- Switch between test files and class definitions (much faster than TextMate). Source
- Compile CoffeeScript to JavaScript and display in a new buffer. Source
New key bindings are installed by dropping Python class files in ~/Library/Application Support/Sublime Text 2/Packages/User
and then binding them from Default (OSX).sublime-keymap
in the same directory. The ST2 Unofficial Documentation has more details.
Neil Sarkar, my colleague, wrote most of the code for all of the above within a few weeks of switching to ST2.
Running RSpec from Sublime Text 2
This is my favorite part of my Sublime Text 2 config. I’ll admit: Out of the box (even with the RSpec package installed), ST2 sucks for running tests. Fortunately, Neil wrote a Python script that makes running RSpec from Sublime Text 2 much better than running it from TextMate via the RSpec bundle.
With this script installed, you can bind ⌘R to run the current file and ⌘⇧R to run the current test. The tests will run in Terminal. This is great for a number of reasons:
- You can use any RSpec formatter and get nice, colored output.
- Adding calls to
debugger
orbinding.pry
works. No need to change how you run your tests when you want to debug. - Window management. It’s smart enough to reuse the Terminal window for new test runs if you don’t close it. I put my Terminal window on the right 40% of my monitor.
This has really improved my TDD workflow when working on individual classes.
More Resources
- Be sure to check out Brandon Keeper’s post on getting started with ST2.
- This article on NetTuts has some good tips. (Although it’s a little out of date.)
- My entire ST2 user directory is on GitHub, as is Neil’s.
- You can search for ST2 packages here. Don’t be afraid to dive into their source – it’s usually quite approachable.
If you’ve tried Sublime Text 2, what did you think? What packages, key bindings, etc. are your favorites? What do you miss most from other editors?