Real Vim ninjas count every keystroke - do you?

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

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

Your VimGolf key: please sign in

$ gem install vimgolf
$ vimgolf setup
$ vimgolf put 4dddc7c1ed7380000100000d

Multiplication table.

Create a multiplication table.

Start file
1
End file
1   2   3   4   5   6   7   8   9   10
2   4   6   8   10  12  14  16  18  20
3   6   9   12  15  18  21  24  27  30
4   8   12  16  20  24  28  32  36  40
5   10  15  20  25  30  35  40  45  50
6   12  18  24  30  36  42  48  54  60  
7   14  21  28  35  42  49  56  63  70
8   16  24  32  40  48  56  64  72  80
9   18  27  36  45  54  63  72  81  90
10  20  30  40  50  60  70  80  90  100

View Diff

1c1,10
< 1
---
> 1   2   3   4   5   6   7   8   9   10
> 2   4   6   8   10  12  14  16  18  20
> 3   6   9   12  15  18  21  24  27  30
> 4   8   12  16  20  24  28  32  36  40
> 5   10  15  20  25  30  35  40  45  50
> 6   12  18  24  30  36  42  48  54  60  
> 7   14  21  28  35  42  49  56  63  70
> 8   16  24  32  40  48  56  64  72  80
> 9   18  27  36  45  54  63  72  81  90
> 10  20  30  40  50  60  70  80  90  100

Solutions

The best way to learn is to practice. Below, you will find some of the solutions other golfers have entered. To unlock higher ranked solutions, submit your own entry which does as well or better than the solutions you can currently see - climb the ladder!

Check out these helpful resources to improve your Vim skills... Game on.

Unlock 44 remaining solutions by signing in and submitting your own entry
#45 h_east (DDD ready) / @h_east - Score: 98 - 05/26/11 @ 05:29
q:2afor y in range(1,10)|<Esc>FyrxAlet@A=printf("%-4d",y*x)<Esc>2a|endfo<Esc>bil<C-P>@A='<C-V><NL>'|<Esc><CR>s<C-R>a<C-H><C-H><Esc>k<C-V>H$x5ja  <Esc>ZZ

0 comments

#46 Christopher Erin / @Chris__Erin - Score: 104 - 09/20/11 @ 11:03
Y9p:%s/\d$/\=submatch(0)."<Tab>".(submatch(0)+1)<CR>8@:6GA<Tab><Esc>:%s/\d/\=submatch(0)*line(".")/g<CR>:se ts=4 et|ret|x<CR>

0 comments

#47 Torben Rasmussen / @rasmustorben - Score: 116 - 08/15/11 @ 09:03
qqyyp<C-A>q8@qgg10Jqayyp<C-A>w2<C-A>w3<C-A>w4<C-A>w5<C-A>w6<C-A>w7<C-A>w8<C-A>w9<C-A>w10<C-A>q8@a:%s/\<\(.\)\>/\1  /g<NL>:<Up><Left><Left><Left><BS><Left><Left><Left><Left><Left><Left><Left>.<NL>6ggA<Esc>gg$<C-V>jjjjjjjjd6ggA  <Esc>ZZ

0 comments

#48 mightyfoo / @mightyfoo - Score: 124 - 05/26/11 @ 03:24
Y9p<CR>:%s/\v(\d+(<Tab>+))*(\d+)/\=submatch(0)."<Tab>".(submatch(3)+1)<CR>6GA<Tab><Esc>8@:::%s/\v(\d+)/\=line(".")*submatch(0)/g|se ts=4 et|ret|x<CR>

0 comments

#49 Mathias Fussenegger / @mfussenegger - Score: 132 - 06/06/11 @ 14:12
Y9p<CR>:5<BS>%s<BS>s/\v(\d+(<Tab>+))*(\d+)/\=submatch(0)."<Tab>".(submatch(3)+1)<CR>6GA<Tab><Esc>8@:::<BS>%s/\v(\d+)/\=line(".")*submatch(0)/g|se ts=4 et|ret<0xc2><0xab><BS>|x<CR>

0 comments

#50 Kevin Stewart / @stewkev - Score: 140 - 02/05/12 @ 17:25
Y9p:s<BS><C-]>s<BS><BS>%s/\v(\d+(<Tab>+))*(\d+)/\=submatch(0)."<Tab>><BS>".(submatch(3)+1)<CR>6GA<Tab><Esc>8@::::%d<BS>s/\v(\d+)/\=line(".")*submea<BS><BS>atch(0)/g|se ts=5<BS>4 et|ret|x<CR>

0 comments

#51 Bodaniel Jeanes / @bjeanes - Score: 143 - 05/31/11 @ 17:56
Y9p:%s/\v(\d+(<Tab>|<C-H>+))*(\d+_<C-H>)/\=submatch(0)."<Tab>".(submatch(3)+1)<CR>6GA<Tab><Esc>8@:<CR>:%s/\v(\d+_/\=<C-H><C-H><C-H><C-H>(<C-H>)/\=line(".")*submatch(0)/g|se ts=4 et|ret}|x<C-H><C-H><C-H>|x<CR>

0 comments

#52 Joey Geralnik / @jgeralnik - Score: 148 - 12/20/11 @ 05:45
x:for i in range(1,10)<CR>for j in range(1,10)<CR>if i*j<10<CR>put=i*j.'   '<CR>elseif i*j<100<CR>put=i*j.'  '<CR>else<CR>put='100'<CR>endif<CR>en<Tab><CR>en<Tab><CR>qqV9kJkxxq9@qdd5jA  <Esc>ZZ

0 comments

#53 Dan Masquelier / @danmasq - Score: 162 - 07/01/11 @ 01:22
x:for i in range(1,10)|for j in range(1,10)|if i*j<10|put=i*j.'   '|elseif i*j>=10 && i*j<100|put=i*j.'  '|else|put='100'|endif|end<Tab>|end<Tab><CR>qvV9kJkxxq9@vdd5j$a  <Esc>ZZ

0 comments

#54 Robert Robotter / @robrob12 - Score: 203 - 05/26/11 @ 02:07
:func! A()<CR>let o=''<CR>for x in range(1, 10)<CR>for y in range(1, 10)<CR>let m=x*y<CR>if m > 9<CR>let m=m."  "<CR>el<CR>let m=m."   "<CR>endif<CR>let o=o.m<CR>endfo<CR>let o=o."\n"<CR>endfo<CR>retu o<CR>endfunc<CR>i<C-R>=A()<CR><Esc>dd{$<Left><C-V>G$xG$i0<Esc>:6<CR>$i<Right>  <Esc>:x<CR>

0 comments

#55 Arton0306 / @Arton0306 - Score: 310 - 12/18/11 @ 05:15
:se ts=4 et<NL>i<Tab><BS><BS><BS><BS><Right><Tab>2<Tab>3<Tab>4<Tab>5<Tab>6<Tab>7<Tab>8<Tab>9<Tab>10<NL>2<Tab>4<Tab>6<Tab>8<Tab>10<Tab>12<Tab>14<Tab>16<Tab>18<Tab>20<NL>3<Tab>6<Tab>9<Tab>12<Tab>15<Tab>18<Tab>21<Tab>24<Tab>27<Tab>30<NL>4<Tab>8<Tab><End><k1><k2><Tab><k1><k6><Tab><k2><k0><Tab><k2><k4><Tab><k2><k8><Tab><k3><k2><Tab><k3><k6><Tab><k4><k0><NL><k5><Tab><k1><k0><Tab><k1><k5><Tab><k2><k0><Tab><k2><k5><Tab><k3><k0><Tab><k3><k5><Tab><k4><k0><Tab><k4><k5><Tab><k5><k0><NL><k6><Tab><k1><k2><Tab><k1><k8><Tab><k2><k4><Tab><k2><BS><k3><k0><Tab><k3><k4><Tab><BS><BS><BS><k6><Tab><k4><k2><Tab><k4><k8><Tab><k5><k4><Tab><k6><k0>  <NL><k7><Tab><k1><k4><Tab><k2><k1><Tab><k2><k8><Tab><k3><k5><Tab><k4><k2><Tab><k4><k9><Tab><k5><k6><Tab><k6><k3><Tab><k7><k0><NL><k8><Tab><k1><k6><Tab><k2><k4><Tab><k3><k2><Tab><k4><k0><Tab><k4><k8><Tab><k5><k6><Tab><k6><k4><Tab><k7><k2><Tab><k8><k0><NL><k9><Tab><k1><k8><Tab><k2><k7><Tab><k3><k6><Tab><k4><k5><Tab><k5><k4><Tab><k6><k4><BS><k3><Tab><k7><k2><Tab><k8><k1><Tab><k9><k0><NL><k1><k0><Tab><k2><k0><Tab><k3><k0><Tab><k4><k0><Tab><k5><k0><Tab><k6><k0><Tab><k7><k0><Tab><k8><k0><Tab><k9><k0><Tab><k1><k0><k0><Esc>ZZ

0 comments

#56 Ben Sherman / @bensherman - Score: 395 - 10/18/11 @ 16:51
A   2   3   4   5   6   7   8   9   10<CR>2   4   6   8   10  12  14  16  18  20<CR>3   6   9   12  15  18  21  24  27  30<CR>4   8   12  16  20  24  28  32  36  40<CR>5   10  15  20  25  30  35  40  45  50<CR>6   12  18  24  30  36  42  48  54  60  <CR>7   14  21  28  35  42  49  56  63  70<CR>8   16  24  32  40  48  56  64  72  80<CR>9   18  27  36  45  54  63  72  81  90<CR>10  20  30  40  50  60  70  80  90  100<Esc>ZZ

0 comments

Created by: @connermcd

56 active golfers, 166 entries

Leaderboard (lowest score wins):
Q6hrg93p4r3hn56thmd0_normal
37
#1 - Urtica dioica / @udioica

07/28/2013 at 06:17PM

8ig-egq0_normal
37
#2 - John Braxler / @braxler

08/01/2014 at 12:15PM

4654945923_eb2c60ee5f_normal
42
#3 - Kerson Hsiao / @KersonHsiao

08/19/2012 at 10:09PM

40051_789281885907_29616532_44170636_2091417_n_normal
42
#4 - Conner McDaniel / @connermcd

10/30/2012 at 09:41AM

0e620322b2c292d069fe93e27c081f9c_normal
42
#5 - Petro Тrouq / @zulolosi

05/08/2013 at 12:05PM

Default_profile_1_normal
49
#6 - John Anderson / @opejn

12/23/2011 at 05:02PM

Ewbdmdtg_normal
49
#7 - Tim Chase / @gumnos

01/03/2012 at 08:07AM

Abdel_normal
49
#8 - Abdel Said / @abdelsaid

04/07/2012 at 09:20AM

Default_profile_0_normal
49
#9 - Benoit Mortgat / @Benoit_Mortgat

06/06/2012 at 01:40PM

Gintoki_normal
50
#10 - You-Siang Lin / @yslinnctu

11/28/2011 at 06:49PM

Dsc_3301.redimensionado_normal
50
#11 - Jaime A. Sánchez / @jashbeta

12/21/2011 at 01:30PM

122_normal
51
#12 - not so punk :] / @notsopunk

06/19/2011 at 12:34AM

Jlove201003sq_normal
51
#13 - Justin Love / @wondible

09/18/2011 at 03:20PM

X_normal
52
#14 - xhtmlforum / @xhtmlforum

05/26/2011 at 01:53AM

Gravatar_normal
52
#15 - Stephen Morrow / @yawmark

05/26/2011 at 06:54AM

Avatar-small_normal
52
#16 - Hu Junfeng / @junfeng

08/05/2011 at 03:33AM

Default_profile_6_normal
52
#17 - derp derp / @derp__

01/02/2012 at 10:23AM

Pi2_normal
53
#18 - Utkarsh Kukreti / @utkarshkukreti

05/26/2011 at 03:46PM

Default_profile_0_normal
61
#19 - vimja / @vimja666

10/31/2011 at 05:33PM

Default_profile_4_normal
64
#20 - bmamax / @bmamax

01/14/2012 at 06:08AM

Profilepic_normal
64
#21 - Eric Andres / @eric_m_andres

12/05/2012 at 09:34AM

Default_profile_6_normal
68
#22 - Jomo / @yoyoyojomo

03/14/2012 at 01:34AM

Default_profile_2_normal
70
#23 - Ingo / @ist3fani

08/07/2013 at 08:25AM

Avatar_normal
71
#24 - Jer Wilson / @superjercom

10/28/2011 at 06:42PM

Default_profile_4_normal
73
#25 - Nonayo Biznast / @NonayoBiznast

09/10/2011 at 03:11AM

Mn_normal
74
#26 - Johan Sveholm / @rymdtjuren

06/23/2011 at 05:27PM

Default_profile_3_normal
74
#27 - learninghang / @learninghang

04/14/2012 at 09:13AM

3ubh7kcfj18s5m9erc6p_normal
74
#28 - Marcin Sza / @coot_

10/26/2013 at 01:55AM

Dadadi_normal
75
#29 - arno renevier / @dadadiblog

03/18/2012 at 12:14PM

Bf67e4fda36d0524a11d23efffd23139_normal
77
#30 - Pasha Klets / @p01nt

05/26/2011 at 01:50AM

Adium_icon_normal
77
#31 - Drew Olson / @drewolson

05/31/2011 at 05:58PM

Uwe_horns_by_joao_normal
78
#32 - Dave / @zzdave13

07/16/2011 at 03:09AM

Twitterprofile_normal
78
#33 - Daniel Lundin / @danielundin

05/07/2012 at 06:59AM

5569504_normal
80
#34 - Justin Hale / @jxl

05/26/2011 at 02:25AM

Avatar_normal
82
#35 - Dave Lyon / @daveisonthego

05/31/2011 at 05:55PM

Bc879469f279ee24b7fbdfad7c2216d9_normal
82
#36 - 無ん垢の叫び / @john_ababa

03/10/2012 at 07:59AM

Default_profile_5_normal
83
#37 - Jason Wolf / @zephyr_wolf

11/16/2012 at 12:57PM

Default_profile_6_normal
84
#38 - Jean-Rene David / @jeanrenedavid

06/11/2011 at 12:01PM

J_normal
85
#39 - Josh Davey / @joshuadavey

05/31/2011 at 05:59PM

Zia_normal
85
#40 - Gabriel Barta / @gbarta

12/03/2011 at 05:10AM

Default_profile_2_normal
86
#41 - Oliver Christ / @0liverChrist

11/08/2013 at 03:28PM

Default_profile_2_normal
89
#42 - Renat Aksitov / @Korvin79

02/23/2012 at 03:07AM

3df5ee82f60ff3c07d6beb61455758d2_normal
89
#43 - US Dollar Price / @USDollarPrice

11/07/2013 at 04:26PM

1dad4013c9d7688e54c2a2dbe0a059b3_normal
91
#44 - Paul Hinze / @phinze

05/31/2011 at 05:53PM

P1000007_normal
98
#45 - h_east (DDD ready) / @h_east

05/26/2011 at 05:29AM

Default_profile_6_normal
104
#46 - Christopher Erin / @Chris__Erin

09/20/2011 at 11:03AM

Bear_normal
116
#47 - Torben Rasmussen / @rasmustorben

08/15/2011 at 09:03AM

Foo-berk_normal
124
#48 - mightyfoo / @mightyfoo

05/26/2011 at 03:24AM

H3b1l1ct282h87hatwgp_normal
132
#49 - Mathias Fussenegger / @mfussenegger

06/06/2011 at 02:12PM

Default_profile_1_normal
140
#50 - Kevin Stewart / @stewkev

02/05/2012 at 05:25PM

5d2426169f531fc73249b5e11d41733c_normal
143
#51 - Bodaniel Jeanes / @bjeanes

05/31/2011 at 05:56PM

187602_568205942_4335755_n_normal
148
#52 - Joey Geralnik / @jgeralnik

12/20/2011 at 05:45AM

46a0320167ab007f0a98222e65c0f3b7_normal
162
#53 - Dan Masquelier / @danmasq

07/01/2011 at 01:22AM

2_normal
203
#54 - Robert Robotter / @robrob12

05/26/2011 at 02:07AM

Default_profile_1_normal
310
#55 - Arton0306 / @Arton0306

12/18/2011 at 05:15AM

Ben-mugshot_normal
395
#56 - Ben Sherman / @bensherman

10/18/2011 at 04:51PM