The Pug Automatic

Ruby DATA for quick-and-dirty jobs

Written October 22, 2014. Tagged Ruby, Vim.

Say you have a text file and need to extract all its email addresses, comma-separated.

I'm more comfortable solving a problem like that in Ruby than in pure Vim – especially if it gets more complicated, perhaps with sorting and grouping.

When it's a quick-and-dirty one-off thing that I don't need to save, I often write that Ruby in the data file itself, instead of bothering to create separate files. It's a convenient trick.

For example, if I had the file

foo one@example.com bar two@example.com
…more text here…

and wanted to extract comma-separated emails, I would just add something like

puts DATA.read.scan(/\S+@\S+/).join(",")

__END__
foo one@example.com bar two@example.com
…more text here…

You could then make Vim run the script with :w ! ruby.

If you want the output in a file, do :w ! ruby > emails.csv.

Or if you want the output to go into a buffer, try my vim-ruby-runner.

If you didn't know, anything following __END__ in a Ruby file becomes a kind of virtual file that DATA.read reads from.