Update runtime files.
diff --git a/runtime/ftplugin/erlang.vim b/runtime/ftplugin/erlang.vim
new file mode 100644
index 0000000..4899020
--- /dev/null
+++ b/runtime/ftplugin/erlang.vim
@@ -0,0 +1,150 @@
+" Vim ftplugin file
+" Language:     Erlang
+" Author:       Oscar Hellström <oscar@oscarh.net>
+" Contributors: Ricardo Catalinas Jiménez <jimenezrick@gmail.com>
+"               Eduardo Lopez (http://github.com/tapichu)
+" License:      Vim license
+" Version:      2011/11/21
+
+if exists('b:did_ftplugin')
+	finish
+else
+	let b:did_ftplugin = 1
+endif
+
+if exists('s:did_function_definitions')
+	call s:SetErlangOptions()
+	finish
+else
+	let s:did_function_definitions = 1
+endif
+
+if !exists('g:erlang_keywordprg')
+	let g:erlang_keywordprg = 'erl -man'
+endif
+
+if !exists('g:erlang_folding')
+	let g:erlang_folding = 0
+endif
+
+" Local settings
+function s:SetErlangOptions()
+	compiler erlang
+	if version >= 700
+		setlocal omnifunc=erlang_complete#Complete
+	endif
+
+	if g:erlang_folding
+		setlocal foldmethod=expr
+		setlocal foldexpr=GetErlangFold(v:lnum)
+		setlocal foldtext=ErlangFoldText()
+	endif
+
+	setlocal comments=:%%%,:%%,:%
+	setlocal commentstring=%%s
+
+	setlocal formatoptions+=ro
+	let &l:keywordprg = g:erlang_keywordprg
+endfunction
+
+" Define folding functions
+if !exists('*GetErlangFold')
+	" Folding params
+	let s:erlang_fun_begin  = '^\a\w*(.*$'
+	let s:erlang_fun_end    = '^[^%]*\.\s*\(%.*\)\?$'
+	let s:erlang_blank_line = '^\s*\(%.*\)\?$'
+
+	" Auxiliary fold functions
+	function s:GetNextNonBlank(lnum)
+		let lnum = nextnonblank(a:lnum + 1)
+		let line = getline(lnum)
+		while line =~ s:erlang_blank_line && 0 != lnum
+			let lnum = nextnonblank(lnum + 1)
+			let line = getline(lnum)
+		endwhile
+		return lnum
+	endfunction
+
+	function s:GetFunName(str)
+		return matchstr(a:str, '^\a\w*(\@=')
+	endfunction
+
+	function s:GetFunArgs(str, lnum)
+		let str = a:str
+		let lnum = a:lnum
+		while str !~ '->\s*\(%.*\)\?$'
+			let lnum = s:GetNextNonBlank(lnum)
+			if 0 == lnum " EOF
+				return ''
+			endif
+			let str .= getline(lnum)
+		endwhile
+		return matchstr(str, 
+			\ '\(^(\s*\)\@<=.*\(\s*)\(\s\+when\s\+.*\)\?\s\+->\s*\(%.*\)\?$\)\@=')
+	endfunction
+
+	function s:CountFunArgs(arguments)
+		let pos = 0
+		let ac = 0 " arg count
+		let arguments = a:arguments
+		
+		" Change list / tuples into just one A(rgument)
+		let erlang_tuple = '{\([A-Za-z_,|=\-\[\]]\|\s\)*}'
+		let erlang_list  = '\[\([A-Za-z_,|=\-{}]\|\s\)*\]'
+
+		" FIXME: Use searchpair?
+		while arguments =~ erlang_tuple
+			let arguments = substitute(arguments, erlang_tuple, 'A', 'g')
+		endwhile
+		" FIXME: Use searchpair?
+		while arguments =~ erlang_list
+			let arguments = substitute(arguments, erlang_list, 'A', 'g')
+		endwhile
+		
+		let len = strlen(arguments)
+		while pos < len && pos > -1
+			let ac += 1
+			let pos = matchend(arguments, ',\s*', pos)
+		endwhile
+		return ac
+	endfunction
+
+	" Main fold function
+	function GetErlangFold(lnum)
+		let lnum = a:lnum
+		let line = getline(lnum)
+
+		if line =~ s:erlang_fun_end
+			return '<1'
+		endif
+
+		if line =~ s:erlang_fun_begin && foldlevel(lnum - 1) == 1
+			return '1'
+		endif
+
+		if line =~ s:erlang_fun_begin
+			return '>1'
+		endif
+
+		return '='
+	endfunction
+
+	" Erlang fold description (foldtext function)
+	function ErlangFoldText()
+		let foldlen = v:foldend - v:foldstart
+		if 1 < foldlen
+			let lines = 'lines'
+		else
+			let lines = 'line'
+		endif
+		let line = getline(v:foldstart)
+		let name = s:GetFunName(line)
+		let arguments = s:GetFunArgs(strpart(line, strlen(name)), v:foldstart)
+		let argcount = s:CountFunArgs(arguments)
+		let retval = '+' . v:folddashes . ' ' . name . '/' . argcount
+		let retval .= ' (' . foldlen . ' ' . lines . ')'
+		return retval
+	endfunction
+endif
+
+call s:SetErlangOptions()