Here at Mikamai It’s no secret I’m a happy TextMate user and early TM2 adopter. I’m always there if either an editor war is catching fire or if someone needs help setting up his editor.
Above all I still find that TextMate is the best choice for a Ruby developer, even if SublimeText, emacs and vim seem more fashionable these days. Even if I’m saving the full list of reasons for another post I’ll tell just this one: TextMate relies on Ruby for a big part of its implementation that has always been opensource*.
Of course I’m talking about bundles, if you’re not convinced look at the code used to align assignments (⌥⌘]) from the source bundle (which is responsible for actions common to any programming language).
Just to be clear I would still use SublimeText if I were to program from Linux or (ugh!) Windows.
That said I want to gather here some of the stuff that makes using TextMate2 for Ruby and Rails development so awesome.
* Of course I know about redcar (which seems quite dead, but I didn’t tried it recently) and other TM clones err enhancements like Chocolat
ALERT: shameless self promotion follows
The Bundles and Settings parade
1. Effortless opening of Bundled Gems ⌥⌘O
This I do all the time, opening the source of bundled gems. Please behold and don’t be horrified. Especially in Ruby-land the source of gems is the best source of documentation, and as explained by Glenn Vanderburg) there’s probably a good reason for that. Also the README and specs are included most of the time and reading other’s code is a healthy activity.
Needless to say that the best place to read source code is your editor.
⌥⌘O will present the complete list of gems from your Gemfile.lock
, start typing the first letters of a gem and use arrow if you don’t want to touch the mouse (or trackpad).
2. Beautiful Markdown rendering
No README.md reading activity would be on par with a the GFM rendered version without code blocks highlighting.
This bundle almost looks like GFM while typing, press ⌃⌥⌘P (the standard TM key equivalent for preview) to get it rendered to the HTML window.
Bonus Install the Scott Web Theme from Preferences → Bundles for a nice looking preview
Source: https://github.com/streeter/markdown-redcarpet.tmbundle
3. Restart Pow! in a single stroke ⌃⌥⌘R
Restarts the current app detecting a tmp/
directory in current project or in a parent dir.
4. Open the terminal in your current project folder
Works with both Terminal and iTerm, just press ⌃⌥⌘T from a project.
5. Trailing whitespace fix, cross-tab completion and more…
Command | Description |
---|---|
⌃⎋ | Cross tab completion |
⌃⌥⌘T | Open Project directory in Terminal |
⌃⌥⌘L | Keep current file as reference |
Installing the whole thing
Download the latest version of TextMate2 here: https://api.textmate.org/downloads/release
mkdir -p ~/Library/Application Support/Avian/Bundles
cd ~/Library/Application Support/Avian/Bundles
git clone https://github.com/elia/avian-missing.tmbundle
git clone https://github.com/elia/bundler.tmbundle
git clone https://github.com/streeter/markdown-redcarpet.tmbundle
# Activate the system ruby (if you're using a Ruby version manager):
type rvm &> /dev/null && rvm use system # for RVM
export RBENV_VERSION="system" # for rbenv
# Install the required gems
sudo gem install redcarpet -v 2.3.0
sudo gem install pygments.rb
# Trailing whitespace
defaults write com.macromates.TextMate.preview environmentVariables -array-add
'{ "enabled" = YES; "name" = "TM_STRIP_WHITESPACE_ON_SAVE"; "value" = "true"; }' # enable trailing whitespace removal and EOF fix
echo <<-INI >> ~/.tm_properties
[ "*.y{,a}ml" ]
# Disable trailing whitespace fix for YAML
# files that can be broken by this feat.
TM_STRIP_WHITESPACE_ON_SAVE = false
INI
The following will set the tabs/file-browser/html-windows to my current taste, I don’t pretend it matches everyone prefs but can still be useful for cherry-picking.
# File browser fixes and general UI fixes
defaults write com.macromates.TextMate.preview fileBrowserStyle SourceList # lighblue file browser background
defaults write com.macromates.TextMate.preview fileBrowserPlacement left # keep it on the left
defaults write com.macromates.TextMate.preview tabsAboveDocument -bool YES # no tabs above the file browser
defaults write com.macromates.TextMate.preview allowExpandingLinks -bool YES # make symlinks expandable
defaults write com.macromates.TextMate.preview htmlOutputPlacement right # place the html output to the right
defaults write com.macromates.TextMate.preview disableTabBarCollapsing -bool YES # keep the tab-bar alway visible
defaults write com.macromates.TextMate.preview scrollPastEnd -bool YES # give me some air after the file ends