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]

33975 active golfers, 412478 entries, 544 challenges

Open VimGolf challenges

Turn a ninja to case-insensitive [Nn][Ii][Nn][Jj][Aa] regexp! - 53 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 - 290 entries

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

Change attribute to getter - 121 entries

Wrap attributes with a getter method.

replace 2nd column blanks with values in same column if blank - 225 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 - 900 entries

There's something special about the input order.

Start coding format - 134 entries

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

7th Birthday - 183 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 - 2850 entries


Paragraph breaks - 497 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 - 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 - 280 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 - 345 entries

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

Copy three lines - 2819 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 - 18439 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 - 81 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 - 4484 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 - 155 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 - 177 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.

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 - 183 entries

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

Assign numbers to fields - 94 entries

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

VimGolf Chatter