Running Vim within IRB
If you work with ruby you will know that the interactive ruby shell, or ‘IRB’ for short, is a useful sketchpad for coding. But the command line interface of IRB can feel quite limiting in comparison with the power of your text editor. In this episode, I’m going to demonstrate how you can get the best of both worlds, by loading Vim from inside IRB.
IRB is great for trying out one liners, but if you need to sketch longer blocks of ruby, it soon falls down.
In his Utility Belt gem, Giles Bowkett has collected a grab-bag of tricks and techniques for IRB, the highlight of which is the ability to interactively edit code in your text editor. The Utility Belt gem hasn’t been updated in a little while, but the interactive editor has continued to evolve, thanks to Jan Berkel and with help from Charles Nutter.
Installation
Install the interactive editor gem by running this at the command line:
gem install interactive_editor
Create an ~/.irbrc file if you don’t already have one, then paste the
following into it:
require 'rubygems' require 'interactive_editor'
Note that the utility belt gem also includes an interactive editor, but
it is currently out of date. If you require both interactive_editor
and utility_belt gems in your .irbrc file, there may be some conflict
between them.
Vim: restore cursor position and highlight syntax
To get the most from this technique, you will want to ensure that you have enabled filetype detection and syntax highlighting in Vim. Additionally, it is helpful to have Vim restore the cursor position to where you left it. The following snippet of Vimscript takes care of these.
if has("autocmd")
" Enable filetype detection
filetype plugin indent on
" Restore cursor position
autocmd BufReadPost *
\ if line("'\"") > 1 && line("'\"") <= line("$") |
\ exe "normal! g`\"" |
\ endif
endif
if &t_Co > 2 || has("gui_running")
" Enable syntax highlighting
syntax on
endif
Note that the example vimrc file that comes with Vim includes all of the above, so don’t paste this into your vimrc without first checking if you already have this functionality.