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]

32814 active golfers, 395804 entries, 535 challenges

Open VimGolf challenges

Every other line - 2815 entries


Paragraph breaks - 480 entries

Swap the blank lines and the aaa lines.

C Reformatting - 686 entries

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

Pretty multi-line bash - 213 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 - 274 entries

Please generate list of numbers from 1 to 20.

A grid of punctuation - 114 entries

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

Array of characters - 133 entries

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

Paragraph sort - 406 entries

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

Wrap text in quotes - 334 entries

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

Copy three lines - 2785 entries

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

Split line with dots - 2087 entries

This line is too long, split it.

Align commas - 1025 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 - 552 entries

Mirror and change this text block

SQL to YAML - 45 entries

Should be easy with vim, or not?

One number per line - 18365 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 - 772 entries

Four is NOT 1. One is 1.

underscore_to_camelCase - 147 entries

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

Mirrored text - 162 entries

backward and forward, and long enough to be challenging

ASCII Art - 80 entries

how good are you with simple regex?

Fun With The Diagonal - 96 entries

change the lowercase characters on the main diagonal to uppercase

Free hyphen! - 144 entries

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

Inner hyphens - 121 entries

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

Swap values - 4420 entries

Well, swap the values...

Sorting a glossary - 112 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 - 481 entries

I'm tweaking my ~/.asoundrc file!

JS notation to Immutable.js notation - 154 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 - 175 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 - 395 entries

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

comments galore - 967 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 - 280 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.

Sudoku table - 58 entries

Make this simple sudoku table look nice and legible.

Lower cased and dashed strings - 46 entries

As I have to generate big fixtures files, I wanted to find a way to format input data the way described by start and end files. Especially the lower-cased-and-dashed ids Not so good to find a pure Vim way, that's why I submit this challenge ;)

Vim's not included features - 168 entries

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

Assign numbers to fields - 91 entries

You are given a list of space-separated strings. Add an increasing numeric prefix to each one.

Add to end of each line... kinda - 286 entries

Visual-block mode can be used to add something to the end of each line, even if they are of differing lengths. However, what if it's not quite at the end?

Vice versa - 7508 entries

Little role switching.

Maze path - 32 entries

Follow the given motions and mark your path with Xs. Attention: This maze is quite big (20x20), please set your terminal size to at least 82.

Simple, Practical, and Common - 32879 entries

Simple things we do all the time should be able to be done with very few keystrokes, but sometimes I find something I need to do makes me go, "There MUST be a better way." This challenge is just a simple movement and entering text at a certain place.

Make HTML List - 987 entries

Turn the comma separated list into an unordered html list.

Collect List - 4172 entries

Convert to comma separated list.

Entries sort - 71 entries

It cames to my mind a weird idea : sorting parts of my .vimrc. Take few minutes to sort out this, it's easy !

Mirror Symmetry - 753 entries

Add backslashes.

Restore order to the alphabet - 162 entries

The numbers are OK. The letters are wonky.

VimGolf Chatter