I’ve been trying out Sublime Text 2 as a replacement for Vim. While I enjoy using it and I experienced the “Wow, this does 90% of what Vim does” moment, I kept a running list of all the features in the remaining 10% that I relied on every day.
These included:
- Better code wrapping (
gq) - Go to last edit (
'') - Go to file in Ack search output
- Display full path to current file (
:echo expand('%:p')<CR>)
However, Sublime Text 2 has a great Python API and I was able to whip up plugins for these tasks that perform just as well as in Vim.
Better code wrapping
Vim’s reformat text command (gq) can take multiple paragraphs and text in comments and flow them to the current textwidth setting. Some people don’t care about this, but I prefer to keep lines of code less than 80 characters wide, so I can open multiple files side-by-side. (Also, Pep-8.)
Sublime Text 2 had a “wrap” feature, but it failed to intelligently wrap comments, it joined separate paragraphs together and it wouldn’t reflow selected text (only the paragraph around the cursor).
The plugin I wrote creates a Wrap Code command (mapped to gq in Vintage mode) that works reasonably on commented lines of code (and uncommented lines), multiple paragraphs and selected text, thanks to the codewrap.py module written by Nir Soffer.
Download the WrapCode plugin on Github.
Go to last edit
I’m used to typing '' in a buffer in Vim to move the cursor to the last edit. Great feature. Totally underrated.
If you use Vintage mode in Sublime Text 2, you’ll quickly discover that this command does nothing — worse than nothing, in fact, as it seems to refocus your cursor somewhere other than the text of the buffer, forcing you to use your mouse to recover.
While I couldn’t bind my plugin to the '' command for some reason, I bound it to Super+' and it works the same way as Vim’s.
Download the GotoLastEdit plugin on Github.
Open search result
Another thing I missed about Vim was its Ack plugin. The “Find in Files” feature of Sublime Text 2 is great, but it didn’t provide an easy way to quickly open a file listed in the search results.
So I wrote a plugin that, in a Search Results window, allows you to do one of the following:
- On a “matched” line in the search output, open its file at the line of the match
- On a file path in the search output (without a line number), open the file in a new tab
Download the OpenSearchResult plugin on Github.
Display full path to file in status bar
I use Vim in OS X’s full screen mode, with no tabs or status line. Working this way, I don’t have reference to the path of the current file. Of course, I know the name of the file because I usually typed it, but sometimes the full path is important; e.g., if I have two Mercurial branches of the same code in different directories.
So, I have a command mapped to ,F that displays the full path. Then it silently goes away after a moment. I love that command.
I couldn’t find an ideal way to implement this in Sublime Text 2, other than to create a command that would toggle displaying the path to the current file in the status bar. It works well enough for me, however.
Download the FilenameStatus plugin on Github.
Installing the plugins
You install these plugins the same way as other Sublime Text 2 plugins, by downloading the files and dropping them into the Packages directory.
See this documentation for more details if you need additional help installing plugins.
The default key bindings are intended for Vintage mode and are oriented for OS X.