Real Vim ninjas count every keystroke - do you?

Pick a challenge, fire up Vim, and show us what you got.

Changelog, Rules & FAQ, updates: @vimgolf, RSS.

Your VimGolf key: please sign in

$ gem install vimgolf
$ vimgolf setup
$ vimgolf put [challenge ID]

22739 active golfers, 238327 entries, 395 challenges

Open VimGolf challenges

Counting in binary - 322 entries

"a" represents 0; "A" represents 1. Start from zero and count to 15.

Wrap the text of an email message to 79 characters - 472 entries

You're replying to an email with silly long lines. Clean them up.

Stairs Indenting - 357 entries

Indent each line with <line number> whitespaces.

Increment, increment, increment.... - 465 entries

Vim likes macros

Delete unwanted lines - 315 entries

Delete all lines which does not end in "o.."

Reformat a C golf submission - 464 entries

Take this C golf submission (for the "tiny but standards-compliant Hello World program" category, naturally), and turn it into formatted C code.

Pairs of numbers - 316 entries

Line 1 represents x, line 2 y-data. Bring the corresponding pairs in the form "[x,y]\n"

A simple change - 350 entries

Just change the numbers in the most efficient way ...

Replacing some words - 402 entries

How fast could it be?

PHP Array Syntax -> MailChimp Merge Syntax - 407 entries

I recently needed to send an e-mail to our marketing department listing allowed merge tags for our MailChimp campaigns. The allowed merge tags were determined from a PHP array in one of our PHP classes. I transformed the PHP class to MailChimp's syntax and sent the e-mail. It was, however, a long, laborious process. I'm still fairly new to Vim and would love to see how an expert Vim user would tackle one of my own, real-world problems. Thanks and have fun!

Context insensitive completion 0 - 440 entries

Buried in the lines you're not supposed to add is the line "Add this line!" Add that line to the top of the file.

Add fold markers to a .c file - 439 entries

Fold markers can make it easier to navigate source code. Add them to this .c file.

Going underground.... - 277 entries

Simple reformatting: in this case changing from the format London underground supplies its customers with, to the format that Google Calendar likes...

Mirrored text - 149 entries

backward and forward, and long enough to be challenging

Sorting paragraphs - 437 entries

Order the paragraphs correctly, per prefixed index

Start coding format - 114 entries

I used to start coding with following format: int main(){ -(cursor here) }

Shuffled numbers - 195 entries

Each number is paired with the number it should follow. That's enough information to put them in order.

vim1001 - 221 entries

change number 1001 into a "vim1001 sequence". (My first challenge, hope it is not too bad... )

Line Zipper - 388 entries

Zip/pair related lines.

Indentation - 406 entries

Indent each line according to the right number of spaces it needs.

The Quick Brown Fox Jumps Over The Lazy Vim - 318 entries

Someone has vandalized this text file and replaced the beginning character of one word in each line with a Big "X." Please remove the big X's, and fix each line to read "The Quick Brown Fox Jumps Over The Lazy Dog."

FoodCritic023: Prefer conditional attributes - 150 entries

FoodCritic ( is a lint tool for your Chef ( cookbooks. FC023 indicates that you should prefer Chef guards over Ruby conditions. This challenge expects you to be able to fix this issue in a sample cookbook, given the FoodCritic output: ================================================================ FC023: Prefer conditional attributes: cookbooks/foo/recipes/default.rb:25 ================================================================ See for more details about the changes being made.

you're stuck on jQuery < 1.7 - 314 entries

replace calls to jQuery 1.7+'s `on` with calls to pre 1.7 `bind`

Case preserving word replacement - 383 entries

Half way through my project, my people turned into dogs. Now I have to change everything in my source.

NBCU Weekly Challenge - Test - 214 entries

Just testing.

underscore_to_camelCase - 134 entries

Pointy haired boss decided we need to switch to camelCase. Let's get this over with.

Generate English Alphabets - 387 entries

Start with a, get up to z.

Context Insensitive completion 1 - 387 entries

Finish writing this simple Python HTTP server.

Sorting database text output - 183 entries

Sometimes it is nice to be able to quickly take column-formatted text output from the SQL command line and turn it into a list of useful data. In this case we want a unique, sorted list of the values from the second column combined into one comma-separated list. What is the fewest strokes you can do this in?

JS notation to Immutable.js notation - 137 entries

Now Immutable.js made its way into many frontends. This challenge consists of a typical refactoring that many of us are facing now.

Reverse and count - 378 entries

Someone typed things upside down and now a Vim ninja needs to reverse the lines and count how many there are.

Insert a Markdown link - 377 entries

Put a link in a markdown document, using the after-the-paragraph format.

A grid of punctuation - 110 entries

Create a checkerboard of = and - in an 80×24 grid!

Vim's not included features - 150 entries

Filter not included (-) features in a hypothetical installation of vim.

Array of characters - 107 entries

We all copy paste things off the internet, but the syntax doesn't look right. Fix it as fast as possible.

Hatsuyume - 360 entries

Change attribute to getter - 84 entries

Wrap attributes with a getter method.

Rotating Philosophers Problem - 346 entries

Can you help the philosophers find a good place to sit before they get five forks and spaghetti?

Restore order to the alphabet - 149 entries

The numbers are OK. The letters are wonky.

learn vim in short time - 175 entries

so happy to learn vim.because vim is awesome

Neither Fizz nor Buzz - 187 entries

Not your regular increment macro! The gaps are tricky.

create arrows in a list - 62 entries

Add arrow at same distance

Sort the VimGolf challenges by popularity - 241 entries

"Sort by popularity" is a good order to play the challenges. Not perfect, but you could do a lot worse. ;) Input is a sample copy-pasted from Some of the challenge names have digits that will get in your way, so read ":help :sort" for hints on sorting with a regex. When you're done, try your solution on the full list!

Sort entries based on date - 292 entries

Sort some entries in a Ledger-file based on date.

Inner hyphens - 110 entries

Yet another hyphen challenge. Adding 5 hyphens to a file shouldn't be too hard.

Free hyphen! - 109 entries

Just like "Inner hyphens", but I'm giving you a free hyphen to play with. Will your solution be any different?

Extract HTML option values from tag values - 73 entries

Generate HTML option values from the text in the option tag. If the text contains multiple words, replace the spaces with an underscore and convert all capital letters to small letters.

Shift down - 162 entries

Number words are back.

abcd > a b c d - 237 entries

transform the single spaces into 4 spaces repeat for each line

Table Reshuffle - 312 entries

Fix the column order in this table... also append the new 'username' column.

VimGolf Chatter