sponsor Vim development Vim logo Vim Book Ad

textobj-rubyblock : A custom text object for selecting ruby blocks.

 script karma  Rating 43/13, Downloaded by 1706  Comments, bugs, improvements  Vim wiki

created by
Drew Neil
script type
A custom text object for selecting ruby blocks.

Depends on vimscript #2100, which provides a framework for creating custom
text objects.

Also requires that matchit.vim vimscript #39 is enabled.

# Usage #

When textobj-rubyblock is installed you will gain two new text objects, which
are triggered by `ar` and `ir` respectively. These follow Vim convention, so
that `ar` selects _all_ of a ruby block, and `ir` selects the _inner_ portion
of a rubyblock.

In ruby, a block is always closed with the `end` keyword. Ruby blocks may be
opened using one of several keywords, including `module`, `class`, `def` `if`
and `do`. This example demonstrates a few of these:

    module Foo
      class Bar
        def Baz
          [1,2,3].each do |i|
            i + 1

Suppose your cursor was positioned on the word `def`. Typing `var` would
enable visual mode selecting _all_ of the method definition. Your selection
would comprise the following lines (also, see screenshot:

    def Baz
      [1,2,3].each do |i|
        i + 1

Whereas if you typed `vir`, you would select everything _inside_ of the method
definition, which looks like this (also, see screenshot:

    [1,2,3].each do |i|
      i + 1

Note that the `ar` and `ir` text objects always enable _visual line_ mode,
even if you were in visual character or block mode before you triggered the
rubyblock text object.

Note too that the `ar` and `ir` text objects always position your cursor on
the `end` keyword. If you want to move to the top of the selection, you can do
so with the `o` key.

# Limitations #

Some text objects in Vim respond to a count. For example, the `a{` text object
will select _all_ of the current `{}` delimited block, but if you prefix it
with the number 2 (e.g. `v2i{`) then it will select all of the block that
contains the current block. The rubyblock text object does not respond in this
way if you prefix a count. This is due to a limitation in vimscript #2100.

However, you can achieve a similar effect by repeating the rubyblock
text-object manually. So if you press `var` to select the current ruby block,
you can expand your selection outwards by repeating `ar`, or contract your
selection inwards by repeating `ir`.
install details
First of all, ensure that you have installed vimscript #2100, without which
this plugin will not work.

Then, ensure that you have enabled the matchit.vim vimscript #39 plugin. This
can be achieved by running (or placing this in your vimrc file):

    :runtime macros/matchit.vim

Finally, you need to ensure that Vim is not running in vi-compatiable mode, and
that filetype plugins are enabled. Placing these lines in your vimrc file will
set up this configuration for you:

    set nocompatible
    if has("autocmd")
      filetype indent plugin on

This plugin is distributed as a vimball, so to install it you just need to
open the file with Vim and run the command:

    :source %

If you prefer to manage your plugins using pathogen (vimscript #2332), then
you might prefer to checkout the latest version directly from github:

* https://github.com/nelstrom/vim-textobj-rubyblock
* https://github.com/kana/vim-textobj-user

rate this script Life Changing Helpful Unfulfilling 
script versions (upload new version)

Click on the package to download.

package script version date Vim version user release notes
textobj-rubyblock.vba 0.0.2 2010-12-29 7.2 Drew Neil Do not be fooled by postfix conditionals.
textobj-rubyblock.vba 0.0.1 2010-12-27 7.2 Drew Neil Initial upload
ip used for rating:

If you have questions or remarks about this site, visit the vimonline development pages. Please use this site responsibly.
Questions about Vim should go to the maillist. Help Bram help Uganda.