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 4e7dedb4f447090001000002

Refactor to Helpers

This Rails partial is almost all template escapes. Put it into a helper, and refactor each case to methods so we can build out the controls for each. (I've converted to tabs - fighting with Vimgolf's default config shouldn't be part of the challenge.)

Start file
## _controls.html.erb
<div class='controls'>
	<% if event.author == current_user -%>
		<%= link_to "Edit Activity", edit_event_path(event), :class => 'button' %>
	<% else -%>
		<% if current_user.attending? event -%>
			<%= link_to "Leave", leave_event_path(event), :class => "button neg", :method => :post %>
		<% else -%>
			<% if current_user.invited_to? event -%>
				<%= link_to "Accept Invite", join_event_path(event), :class => "button pos", :method => :post %>
			<% else -%>
				<%= link_to "I'm Going", join_event_path(event), :class => "button pos", :method => :post %>
			<% end -%>
		<% end -%>
	<% end -%>
</div>

## event_helper.rb
module EventHelper
end
End file
## _controls.html.erb
<div class='controls'>
	<%= event_controls event %>
</div>

## event_helper.rb
module EventHelper
	def event_controls(event)
		if event.author == current_user
			author_controls(event)
		elsif current_user.attending? event
			attendee_controls(event)
		elsif current_user.invited_to? event
			invitee_controls(event)
		else
			public_controls(event)
		end
	end

	def author_controls(event)
		link_to "Edit Activity", edit_event_path(event), :class => 'button'
	end

	def attendee_controls(event)
		link_to "Leave", leave_event_path(event), :class => "button neg", :method => :post
	end

	def invitee_controls(event)
		link_to "Accept Invite", join_event_path(event), :class => "button pos", :method => :post
	end

	def public_controls(event)
		link_to "I'm Going", join_event_path(event), :class => "button pos", :method => :post
	end
end

View Diff

3,15c3
< 	<% if event.author == current_user -%>
< 		<%= link_to "Edit Activity", edit_event_path(event), :class => 'button' %>
< 	<% else -%>
< 		<% if current_user.attending? event -%>
< 			<%= link_to "Leave", leave_event_path(event), :class => "button neg", :method => :post %>
< 		<% else -%>
< 			<% if current_user.invited_to? event -%>
< 				<%= link_to "Accept Invite", join_event_path(event), :class => "button pos", :method => :post %>
< 			<% else -%>
< 				<%= link_to "I'm Going", join_event_path(event), :class => "button pos", :method => :post %>
< 			<% end -%>
< 		<% end -%>
< 	<% end -%>
---
> 	<%= event_controls event %>
19a8,34
> 	def event_controls(event)
> 		if event.author == current_user
> 			author_controls(event)
> 		elsif current_user.attending? event
> 			attendee_controls(event)
> 		elsif current_user.invited_to? event
> 			invitee_controls(event)
> 		else
> 			public_controls(event)
> 		end
> 	end
> 
> 	def author_controls(event)
> 		link_to "Edit Activity", edit_event_path(event), :class => 'button'
> 	end
> 
> 	def attendee_controls(event)
> 		link_to "Leave", leave_event_path(event), :class => "button neg", :method => :post
> 	end
> 
> 	def invitee_controls(event)
> 		link_to "Accept Invite", join_event_path(event), :class => "button pos", :method => :post
> 	end
> 
> 	def public_controls(event)
> 		link_to "I'm Going", join_event_path(event), :class => "button pos", :method => :post
> 	end

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 16 remaining solutions by signing in and submitting your own entry
#17 Ivan Brennan / ivanbrennan - Score: 407 - 08/24/14 @ 23:24
:3,15s:<%=\? ::<CR>:3,15s: -\?%>::<CR>c3G<Tab><%= event_controls event %><Esc>GPOdef<C-T> event_cont<C-N>(event)<C-O>21G<C-O>oend<Esc>kv9G>jjexJxjjexJx<<jjkv3j<.18G2dd9G$a<CR><Up><C-T><Down><Tab><Tab><Tab>author_controls(event)<Esc>j"addj"bcc<Tab>attendee_controls(event)<Esc>jj"ccc<Tab>invitee_controls(event)<Esc>jj"dcc<Tab>public_controls(event)<Esc>2jo<CR>def auth<C-N><C-N>(event)<CR><C-R>aend<C-D><C-D><C-D><CR><CR>def attend<C-N><C-N>(event)<CR>end<CR><CR>def invi<C-N><C-N>(event)<CR>end<CR><CR>def publi<C-N>(eve<C-N><C-N>)<CR>end<Esc>O<C-R>d<BS><Esc>dd4k"cP4k"bp4k2<<u<<.4j..4j..u4j..ZZ

0 comments

#18 You-Siang Lin / yslinnctu - Score: 423 - 12/15/11 @ 00:58
/ -\?%><CR>g&/<%=\? <CR>g&3GO<% <BS>= e<C-N> _<C-N><Esc>bXA e<C-N> %><Esc>17GdG<C-O>3Gp4jddidef e<C-P><C-P><C-P><C-P>(e<C-N>)<CR><Up><Tab><Down><kHome><Tab><Tab><kEnd><CR><Tab>au<C-P>_controls(e<C-N><C-N><C-N>)<Esc>jddGpi<CR><Up><kEnd><kHome><kEnd><Esc><kHome><Right><Left><Right><Down><Up><Left><Down><Up><Left><Left><Down><Up>dd<Up>o<Down>def au<C-P>(ev<C-N>)<CR><Tab><kEnd><CR><BS>end<Esc><C-O>ddiels<Esc>o<Tab>attendee _co<C-P><Esc>bX$a(ev<C-N>)<Esc>jddGo<CR>def att<C-P>(ev<C-N>)<BS><BS><BS><BS><BS><BS><BS><BS><BS><BS>)<CR><Esc>pXkddo<BS>end<Esc><C-O>ddXiels<Esc>jxd<Esc>ddGo<CR>def invitee_<BS> _con<C-P><Esc>bXA(ev<C-N><C-N>)<CR><Esc>puuuuui<Up><kEnd><CR><Up><BS><kEnd><Down><kEnd><Tab><Tab><Tab>invitee_controls(ev<C-N>)<Esc>jddGo<CR>def iv<BS>nv<C-P>(ev<C-N><C-N>)<CR><Esc>pXkddo<BS>end<Esc><C-O>i<BS><kEnd><Down><kHome><Del><Esc>ddGo<CR>def public_controls(ev<C-N><C-N>)<CR><Esc>pXkddo<BS>end<CR><BS>end<Esc><C-O>cwpu<C-P>(ev<C-N>)<Esc>ZZ

0 comments

#19 Rob C. Grant / rob_c_grant - Score: 484 - 02/01/12 @ 18:39
jjV12jd:6<CR>o<Tab>def event_controls(event)<Esc>pV12j:s/<\%=? //<CR><CR>:qq!<BS><BS><Esc><Esc>/<%=?<BS><BS>=\? <BS><CR>nnn/ -\?%><CR>kkkkVjjjjjjjjjjjjj:s/<%=\? \| -\?%>//<CR>uVjjjjjjjjjjjj:s<Up>g<CR>o<CR>end<Esc>kdd=ggujV12j>:21<CR>:10<CR>JXxjj<<JXxjj<<<<jj<<<<jdjo<CR>def author_controls<CR>end<CR><CR>def attendee_controls<Esc>kkkA(event)<Esc>:22<CR>.oend<CR><CR>def invitee_C<BS>controls(event)<CR>end<CR><CR>def public_controls(event)<CR>end<Esc>:9<CR>dd:18<CR>p<<.u:8<CR>oau<C-N>(e<C-N><C-N>)>><BS><BS><BS>)>><BS><BS><Esc>>>jjcc<Tab>atte<C-N>(event)<Esc>:23<CR>p<<.:13<CR>ccinv<C-N>(e<C-P>)<Esc>>>:27<CR>p<<..:15<CR>cc<Tab>pub<C-N>(event)<Esc>:31<CR>p<<..:2<CR>o<5<BS>%= eve<C-N><C-N><C-N> event %><Esc>:<Esc>ZZ

0 comments

#20  River / glacialrd - Score: 817 - 11/08/14 @ 10:17
:3,15d<CR>O<Tab><%= event_controls event %><Esc>Fe;;viwy/end<CR>O<Tab>def<Tab><BS><Esc>pua <Esc>pa(event)<CR>if event.author == current_user<CR>autu<BS><BS><BS><BS><Esc>pa(event)0<BS><Esc>05xiauthor<Esc>oelseif<BS><BS><BS>if current_user<Esc>viwy$a.attending? event<CR>elsif <Esc>pa.invited_to? event<Esc>oelse<CR>end<Esc>V10G><Esc>kV><Esc>jV>yyjpc6<CR><Esc>uklx6<CR><Esc>u6c<CR><Esc>ukl6xiattendee<Esc>yyjp6xiinvit<Esc>yyjp8xipublic_<Esc>viwyviWyGpuPuo<Esc>p0d<Esc>idef <Esc>oend<Esc>ko<Tab>link_to "Edit<BS><BS><BS><BS>", edit_event_pach<BS><BS>th(event), :class => p<BS>:post<Esc>hhhhi'button',<Esc>ld$jjpuo<Esc>p0iline<BS>k_to "", leave_event_path(event), :class=<BS> => "button neg", :ma<BS>ethc<BS>od => <Esc>kkkyyjjpllllx<Esc>5xiattendee<Esc>VkojyGppujjpGoend<Esc>:20<CR>f"aEdit Activity<Esc>$x/"<CR>aLeave<Esc>/li<CR>f"aAccept Invite<Right><Right><Right><Esc>6xi join<Esc>/neg<CR>dwpo<Esc>uuipos<Esc>ncwpos<Esc>F"';;iI'm Going<Esc>fl5xijoin<Esc>Goend<Esc>kVkkkkkkkkkkkkkkkkkkkkkk>:23<CR>V>:26<CR>V>:29<CR>V>:b18<CR>:b<BS>18<CR>o<Esc>ggG:20<CR>dd:b28<CR>2<Esc>:28<CR>pkdd:b19<CR>:19<CR>p/at<CR>8xiauthor<Esc>/def<CR>O<Esc>/att<CR>n<CR>N6xiinvit<Esc>P<Esc>uO<Esc>/end<CR>o<Esc>GZZ

0 comments

#21 Pavlo Klets / p01nt - Score: 855 - 10/27/11 @ 21:47
jdG:se paste<CR>o<div class='controls'><CR><Tab><%= event_controls event %><CR></div><CR><CR>## event_helper.rb<CR>module EventHelper<CR><Tab>def event_controls(event)<CR><Tab><Tab>if event.author == current_user<CR><Tab><Tab><Tab>author_controls(event)<CR><Tab><Tab>elsif current_user.attending? event<CR><Tab><Tab><Tab>attendee_controls(event)<CR><Tab><Tab>elsif current_user.invited_to? event<CR><Tab><Tab><Tab>invitee_controls(event)<CR><Tab><Tab>else<CR><Tab><Tab><Tab>public_controls(event)<CR><Tab><Tab>end<CR><Tab>end<CR><CR><Tab>def author_controls(event)<CR><Tab><Tab>link_to "Edit Activity", edit_event_path(event), :class => 'button'<CR><Tab>end<CR><CR><Tab>def attendee_controls(event)<CR><Tab><Tab>link_to "Leave", leave_event_path(event), :class => "button neg", :method => :post<CR><Tab>end<CR><CR><Tab>def invitee_controls(event)<CR><Tab><Tab>link_to "Accept Invite", join_event_path(event), :class => "button pos", :method => :post<CR><Tab>end<CR><CR><Tab>def public_controls(event)<CR><Tab><Tab>link_to "I'm Going", join_event_path(event), :class => "button pos", :method => :post<CR><Tab>end<CR>end<Esc>ZZ

0 comments

Created by: wondible

21 active golfers, 42 entries

Leaderboard (lowest score wins):
147
#1 - Urtica dioica / udioica

07/15/2013 at 01:20AM

147
#2 - Aaron Fresh / AaronFresh7

09/13/2014 at 09:05PM

148
#3 - Justin Love / wondible

12/24/2011 at 04:45AM

158
#4 - John Anderson / opejn

12/25/2011 at 07:53AM

160
#5 - YAMADA Yukimi / edp02

02/26/2014 at 01:48PM

171
#6 - h_east (トロッコ6個) / h_east

10/02/2011 at 05:49AM

176
#7 - Abdel Said / abdelsaid

02/17/2012 at 03:02PM

210
#8 - William Dunand / wdunand

02/28/2012 at 06:29AM

242
#9 - RobertT / techrt2050

10/10/2013 at 07:08AM

286
#10 - Vasil Sakarov / vsakarov

12/28/2011 at 11:38AM

286
#11 - pcdude2143 / pcdude2143

07/04/2013 at 07:38AM

288
#12 - maxthoursie / maxthoursie

01/31/2012 at 08:49AM

297
#13 - Yongho / YONG_HO

07/09/2013 at 03:02AM

325
#14 - i5513 / i5513

04/26/2015 at 10:01PM

352
#15 - Jonathan Lozinski / jlozinski

04/21/2012 at 06:07PM

386
#16 - rain / rain_1024

07/12/2014 at 08:25AM

407
#17 - Ivan Brennan / ivanbrennan

08/24/2014 at 11:24PM

423
#18 - You-Siang Lin / yslinnctu

12/15/2011 at 12:58AM

484
#19 - Rob C. Grant / rob_c_grant

02/01/2012 at 06:39PM

817
#20 -  River / glacialrd

11/08/2014 at 10:17AM

855
#21 - Pavlo Klets / p01nt

10/27/2011 at 09:47PM