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]

34598 active golfers, 418817 entries, 548 challenges

Open VimGolf challenges

Nesting SASS - 257 entries

Move a block inside another block and indent it

Format java properties - 71 entries

Format java properties to a different format. The value which is the string following the first '=' cannot & should not change. All periods in the key get replaced with an underscore "_" and get a prefix of "b_".

Fiddle percentages into real numbers - 820 entries

Get rid of the '%' symbols and shift the decimal place. This is the easier version - all the columns line up.

Extract HTML option values from tag values - 85 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.

Turn a ninja to case-insensitive [Nn][Ii][Nn][Jj][Aa] regexp! - 55 entries

I bumped into this in a dailywtf code: I didn't want to translate a string whenever I wanted to be [Ss][Aa][Rr][Cc][Aa][Ss][Tt][Ii][Cc] on slack, so I figured a script (python, sed, whatever) would be helpful. Well, or a few vim keystroke!

Combines all items - 292 entries

For each line that starts with the same number I want to combine its contents

Change attribute to getter - 127 entries

Wrap attributes with a getter method.

replace 2nd column blanks with values in same column if blank - 226 entries

Where ,SOMELOGB and ,SOMELOGC replaces each /r carriage return if 2nd column is blank. The replace only happens if 2nd column is blank though and should replace up to the non blank row.

Double and switch - 37 entries

Aaaanother case switcher

Sort files from hosts - 167 entries

Resume files by host. I hope you enjoy with this challenge

Order and join - 913 entries

There's something special about the input order.

Start coding format - 136 entries

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

7th Birthday - 185 entries

We have a bunch of numbers written from 0 to 9 in the order present in the text input file. The task is to create 7 by replacing the numbers with dashes.

Every other line - 2856 entries


Paragraph breaks - 497 entries

Swap the blank lines and the aaa lines.

C Reformatting - 687 entries

You may use Visual mode... or not. #uppercase

Pretty multi-line bash - 218 entries

Bash line continuations are much prettier when they're column aligned.

ascii-art diamond - 34 entries

Simple ascii-art diamond. The grid is 40x40.

Generate a list of numbers - 282 entries

Please generate list of numbers from 1 to 20.

A grid of punctuation - 120 entries

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

Array of characters - 135 entries

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

Paragraph sort - 421 entries

My large herbivorous mammals, Vim commands, and POSIX utilities need to be sorted separately.

Wrap text in quotes - 348 entries

All the blocks of text should be wrapped in quotation marks.

Copy three lines - 2824 entries

If the site is up (by some miracle), make the text under every header identical.

Split line with dots - 2113 entries

This line is too long, split it.

Align commas - 1046 entries

There are 15,000 aligning challenges on, and they're all exactly the same. I hope this one is a little different.

From A to B - 562 entries

Mirror and change this text block

SQL to YAML - 45 entries

Should be easy with vim, or not?

One number per line - 18480 entries

Just give me the numbers.

Convert pasted text into Markdown - 21 entries

I often need to copy/paste text into Markdown files. The challenge here is to wrap the lines in a way that prefers breaks after periods, commas, or other logical demarcations. There should be no spaces at the beginning of a line.

Scrambled numbers - 775 entries

Four is NOT 1. One is 1.

underscore_to_camelCase - 154 entries

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

Mirrored text - 163 entries

backward and forward, and long enough to be challenging

ASCII Art - 82 entries

how good are you with simple regex?

Fun With The Diagonal - 99 entries

change the lowercase characters on the main diagonal to uppercase

Free hyphen! - 156 entries

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

Inner hyphens - 124 entries

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

Swap values - 4500 entries

Well, swap the values...

Sorting a glossary - 116 entries

Sort a glossary. Glossary head contains a header phrase ending with ':' and glossary body has multi line text indented with a tab.

Alsa configuration - 485 entries

I'm tweaking my ~/.asoundrc file!

JS notation to Immutable.js notation - 161 entries

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

Create bison tokens - 34 entries

Create tokens for bison out of a known list of words

FoodCritic023: Prefer conditional attributes - 178 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.

Replace and keep the case - 405 entries

Replace all instance of plugin and Plugin to device and Device.

comments galore - 982 entries

Basic comment reformatting

No naked if allowed! - 25 entries

House style forbids naked condition statements, comments should start with a space character and be on their own line. Good luck!

lipsum lines - 247 entries

Convert a quoted block of text into strings in a list.

Angular naming conventions - 285 entries

In angular, a directive name follows the camelCase convention. When the directive is used in an HTML template, the words are instead separated by a dash. Go from to the other the fastest!

Manual SQL - 114 entries

Change select and insert queries to simulate inserting a new record.

Forgot to follow the naming convention... - 25 entries

Rename everything like MY_VAR_SOMETHING to MyVarSomething.

VimGolf Chatter