diff --git a/runtime/ftplugin/eruby.vim b/runtime/ftplugin/eruby.vim
index ed010d0..d256831 100644
--- a/runtime/ftplugin/eruby.vim
+++ b/runtime/ftplugin/eruby.vim
@@ -2,14 +2,8 @@
 " Language:	eRuby
 " Maintainer:	Doug Kearns <djkea2 at gus.gscit.monash.edu.au>
 " Info:		$Id$
-" URL:		http://vim-ruby.sourceforge.net
+" URL:		http://vim-ruby.rubyforge.org
 " Anon CVS:	See above site
-" Licence:	GPL (http://www.gnu.org)
-" Disclaimer:
-"    This program is distributed in the hope that it will be useful,
-"    but WITHOUT ANY WARRANTY; without even the implied warranty of
-"    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-"    GNU General Public License for more details.
 " ----------------------------------------------------------------------------
 
 " Only do this when not done yet for this buffer
diff --git a/runtime/ftplugin/ocaml.vim b/runtime/ftplugin/ocaml.vim
index c2bc20e..322be55 100644
--- a/runtime/ftplugin/ocaml.vim
+++ b/runtime/ftplugin/ocaml.vim
@@ -1,38 +1,36 @@
-" Vim settings file
-" Language:     OCaml
-" Maintainers:  Mike Leary          <leary@nwlink.com>
-"               Markus Mottl        <markus@oefai.at>
-"               Stefano Zacchiroli  <zack@bononia.it>
-" URL:          http://www.oefai.at/~markus/vim/ftplugin/ocaml.vim
-" Last Change:  2004 Apr 12 - better .ml/.mli-switching without Python (SZ)
-"               2003 Nov 21 - match_words-patterns and .ml/.mli-switching (MM)
-"               2003 Oct 16 - re-entered variable 'did_ocaml_dtypes' (MM)
-"               2003 Oct 15 - added Stefano Zacchirolis (SZ) Python-code for
-"                             displaying type annotations (MM)
+" Language:    OCaml
+" Maintainer:  David Baelde        <firstname.name@ens-lyon.org>
+"              Mike Leary          <leary@nwlink.com>
+"              Markus Mottl        <markus.mottl@gmail.com>
+"              Stefano Zacchiroli  <zack@bononia.it>
+" URL:         http://www.ocaml.info/vim/ftplugin/ocaml.vim
+" Last Change: 2005 Oct 13 - removed GPL; better matchit support (MM, SZ)
+"
+" if exists("b:did_ftplugin")
+"   finish
+" endif
+let b:did_ftplugin=1
 
-" Only do these settings when not done yet for this buffer
-if exists("b:did_ftplugin")
-  finish
-endif
-
-" Don't do other file type settings for this buffer
-let b:did_ftplugin = 1
-
+" Error handling -- helps moving where the compiler wants you to go
+let s:cposet=&cpoptions
 set cpo-=C
-
-" Error formats
 setlocal efm=
-  \%EFile\ \"%f\"\\,\ line\ %l\\,\ characters\ %c-%*\\d:,
-  \%EFile\ \"%f\"\\,\ line\ %l\\,\ character\ %c:%m,
-  \%+EReference\ to\ unbound\ regexp\ name\ %m,
-  \%Eocamlyacc:\ e\ -\ line\ %l\ of\ \"%f\"\\,\ %m,
-  \%Wocamlyacc:\ w\ -\ %m,
-  \%-Zmake%.%#,
-  \%C%m
+      \%EFile\ \"%f\"\\,\ line\ %l\\,\ characters\ %c-%*\\d:,
+      \%EFile\ \"%f\"\\,\ line\ %l\\,\ character\ %c:%m,
+      \%+EReference\ to\ unbound\ regexp\ name\ %m,
+      \%Eocamlyacc:\ e\ -\ line\ %l\ of\ \"%f\"\\,\ %m,
+      \%Wocamlyacc:\ w\ -\ %m,
+      \%-Zmake%.%#,
+      \%C%m,
+      \%D%*\\a[%*\\d]:\ Entering\ directory\ `%f',
+      \%X%*\\a[%*\\d]:\ Leaving\ directory\ `%f',
+      \%D%*\\a:\ Entering\ directory\ `%f',
+      \%X%*\\a:\ Leaving\ directory\ `%f',
+      \%DMaking\ %*\\a\ in\ %f
 
 " Add mappings, unless the user didn't want this.
 if !exists("no_plugin_maps") && !exists("no_ocaml_maps")
-  " Uncommenting
+  " (un)commenting
   if !hasmapto('<Plug>Comment')
     nmap <buffer> <LocalLeader>c <Plug>LUncomOn
     vmap <buffer> <LocalLeader>c <Plug>BUncomOn
@@ -41,46 +39,141 @@
   endif
 
   nnoremap <buffer> <Plug>LUncomOn mz0i(* <ESC>$A *)<ESC>`z
-  nnoremap <buffer> <Plug>LUncomOff <ESC>:s/^(\* \(.*\) \*)/\1/<CR>
+  nnoremap <buffer> <Plug>LUncomOff :s/^(\* \(.*\) \*)/\1/<CR>:noh<CR>
   vnoremap <buffer> <Plug>BUncomOn <ESC>:'<,'><CR>`<O<ESC>0i(*<ESC>`>o<ESC>0i*)<ESC>`<
   vnoremap <buffer> <Plug>BUncomOff <ESC>:'<,'><CR>`<dd`>dd`<
 
   if !hasmapto('<Plug>Abbrev')
-    iabbrev <buffer> ASS (assert false)
+    iabbrev <buffer> ASS (assert false (* XXX *))
   endif
 endif
 
 " Let % jump between structure elements (due to Issac Trotts)
-let b:mw='\<let\>:\<and\>:\(\<in\>\|;;\),'
-let b:mw=b:mw . '\<if\>:\<then\>:\<else\>,\<do\>:\<done\>,'
-let b:mw=b:mw . '\<\(object\|sig\|struct\|begin\)\>:\<end\>'
-let b:match_words=b:mw
+let b:mw = ''
+let b:mw = b:mw . ',\<let\>:\<and\>:\(\<in\>\|;;\)'
+let b:mw = b:mw . ',\<if\>:\<then\>:\<else\>'
+let b:mw = b:mw . ',\<\(for\|while\)\>:\<do\>:\<done\>,'
+let b:mw = b:mw . ',\<\(object\|sig\|struct\|begin\)\>:\<end\>'
+let b:mw = b:mw . ',\<\(match\|try\)\>:\<with\>'
+let b:match_words = b:mw
+
+let b:match_ignorecase=0
 
 " switching between interfaces (.mli) and implementations (.ml)
 if !exists("g:did_ocaml_switch")
   let g:did_ocaml_switch = 1
-  map ,s :call OCaml_switch(0)<CR>
-  map ,S :call OCaml_switch(1)<CR>
+  map <LocalLeader>s :call OCaml_switch(0)<CR>
+  map <LocalLeader>S :call OCaml_switch(1)<CR>
   fun OCaml_switch(newwin)
     if (match(bufname(""), "\\.mli$") >= 0)
       let fname = substitute(bufname(""), "\\.mli$", ".ml", "")
       if (a:newwin == 1)
-	exec "new " . fname
+        exec "new " . fname
       else
-	exec "arge " . fname
+        exec "arge " . fname
       endif
     elseif (match(bufname(""), "\\.ml$") >= 0)
       let fname = bufname("") . "i"
       if (a:newwin == 1)
-	exec "new " . fname
+        exec "new " . fname
       else
-	exec "arge " . fname
+        exec "arge " . fname
       endif
     endif
   endfun
 endif
 
-" Vim support for OCaml 3.07 .annot files (requires Vim with python support)
+" Folding support
+
+" Get the modeline because folding depends on indentation
+let s:s = line2byte(line('.'))+col('.')-1
+if search('^\s*(\*:o\?caml:')
+  let s:modeline = getline(".")
+else
+  let s:modeline = ""
+endif
+if s:s > 0
+  exe 'goto' s:s
+endif
+
+" Get the indentation params
+let s:m = matchstr(s:modeline,'default\s*=\s*\d\+')
+if s:m != ""
+  let s:idef = matchstr(s:m,'\d\+')
+elseif exists("g:omlet_indent")
+  let s:idef = g:omlet_indent
+else
+  let s:idef = 2
+endif
+let s:m = matchstr(s:modeline,'struct\s*=\s*\d\+')
+if s:m != ""
+  let s:i = matchstr(s:m,'\d\+')
+elseif exists("g:omlet_indent_struct")
+  let s:i = g:omlet_indent_struct
+else
+  let s:i = s:idef
+endif
+
+" Set the folding method
+if exists("g:ocaml_folding")
+  setlocal foldmethod=expr
+  setlocal foldexpr=OMLetFoldLevel(v:lnum)
+endif
+
+" - Only definitions below, executed once -------------------------------------
+
+if exists("*OMLetFoldLevel")
+  finish
+endif
+
+function s:topindent(lnum)
+  let l = a:lnum
+  while l > 0
+    if getline(l) =~ '\s*\%(\<struct\>\|\<sig\>\|\<object\>\)'
+      return indent(l)
+    endif
+    let l = l-1
+  endwhile
+  return -s:i
+endfunction
+
+function OMLetFoldLevel(l)
+
+  " This is for not merging blank lines around folds to them
+  if getline(a:l) !~ '\S'
+    return -1
+  endif
+
+  " We start folds for modules, classes, and every toplevel definition
+  if getline(a:l) =~ '^\s*\%(\<val\>\|\<module\>\|\<class\>\|\<type\>\|\<method\>\|\<initializer\>\|\<inherit\>\|\<exception\>\|\<external\>\)'
+    exe 'return ">' (indent(a:l)/s:i)+1 '"'
+  endif
+
+  " Toplevel let are detected thanks to the indentation
+  if getline(a:l) =~ '^\s*let\>' && indent(a:l) == s:i+s:topindent(a:l)
+    exe 'return ">' (indent(a:l)/s:i)+1 '"'
+  endif
+
+  " We close fold on end which are associated to struct, sig or object.
+  " We use syntax information to do that.
+  if getline(a:l) =~ '^\s*end\>' && synIDattr(synID(a:l, indent(a:l)+1, 0), "name") != "ocamlKeyword"
+    return (indent(a:l)/s:i)+1
+  endif
+
+  " Folds end on ;;
+  if getline(a:l) =~ '^\s*;;'
+    exe 'return "<' (indent(a:l)/s:i)+1 '"'
+  endif
+
+  " Comments around folds aren't merged to them.
+  if synIDattr(synID(a:l, indent(a:l)+1, 0), "name") == "ocamlComment"
+    return -1
+  endif
+
+  return '='
+endfunction
+
+" Vim support for OCaml .annot files (requires Vim with python support)
 "
 " Executing OCamlPrintType(<mode>) function will display in the Vim bottom
 " line(s) the type of an ocaml value getting it from the corresponding .annot
@@ -92,37 +185,15 @@
 " .annot files are parsed lazily the first time OCamlPrintType is invoked; is
 " also possible to force the parsing using the OCamlParseAnnot() function.
 "
-" Hitting the <F3> key will cause OCamlPrintType function to be invoked with
+" Typing ',3' will cause OCamlPrintType function to be invoked with
 " the right argument depending on the current mode (visual or not).
 "
-" Copyright (C) <2003> Stefano Zacchiroli <zack@bononia.it>
+" Copyright (C) <2003-2004> Stefano Zacchiroli <zack@bononia.it>
 "
 " Created:        Wed, 01 Oct 2003 18:16:22 +0200 zack
-" LastModified:   Mon, 06 Oct 2003 11:05:39 +0200 zack
-"
-" This program is free software; you can redistribute it and/or modify
-" it under the terms of the GNU General Public License as published by
-" the Free Software Foundation; either version 2 of the License, or
-" (at your option) any later version.
-"
-" This program is distributed in the hope that it will be useful,
-" but WITHOUT ANY WARRANTY; without even the implied warranty of
-" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-" GNU General Public License for more details.
-"
-" You should have received a copy of the GNU General Public License
-" along with this program; if not, write to the Free Software
-" Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-"
+" LastModified:   Wed, 25 Aug 2004 18:28:39 +0200 zack
 
 if !has("python")
-  echo "Python support not found: OCaml .annot support disabled"
-  finish
-endif
-
-if !exists("g:did_ocaml_dtypes")
-  let g:did_ocaml_dtypes = 1
-else
   finish
 endif
 
@@ -166,7 +237,7 @@
            at least two space characters.
 
       - in each block, the two positions are respectively the start and the
-      - end of the range described by the block.
+        end of the range described by the block.
       - in a position, the filename is the name of the file, the first num
         is the line number, the second num is the offset of the beginning
         of the line, the third num is the offset of the position itself.
@@ -182,7 +253,7 @@
         self.__timestamp = None # last parse action timestamp
         self.__annot = {}
         self.__re = re.compile(
-          '^"[^"]+"\s+(\d+)\s+(\d+)\s+(\d+)\s+"[^"]+"\s+(\d+)\s+(\d+)\s+(\d+)$')
+          '^"[^"]*"\s+(\d+)\s+(\d+)\s+(\d+)\s+"[^"]*"\s+(\d+)\s+(\d+)\s+(\d+)$')
 
     def __parse(self, fname):
         try:
@@ -210,7 +281,9 @@
                     lineno += 1
                     if (line == ""): raise malformed_annotations(lineno)
                 type = string.join(type, "\n")
-                self.__annot[(line1, col1), (line2, col2)] = type
+                key = ((line1, col1), (line2, col2))
+                if not self.__annot.has_key(key):
+                    self.__annot[key] = type
                 line = f.readline() # position line
             f.close()
             self.__filename = fname
@@ -285,7 +358,7 @@
 
 EOF
 
-fun OCamlPrintType(current_mode)
+fun! OCamlPrintType(current_mode)
   if (a:current_mode == "visual")
     python printOCamlType("visual")
   else
@@ -293,9 +366,15 @@
   endif
 endfun
 
-fun OCamlParseAnnot()
+fun! OCamlParseAnnot()
   python parseOCamlAnnot()
 endfun
 
-map <F3> :call OCamlPrintType("normal")<RETURN>
-vmap <F3> :call OCamlPrintType("visual")<RETURN>
+map <LocalLeader>t :call OCamlPrintType("normal")<RETURN>
+vmap <LocalLeader>t :call OCamlPrintType("visual")<RETURN>
+
+let &cpoptions=s:cposet
+unlet s:cposet
+
+" vim:sw=2
+
diff --git a/runtime/ftplugin/ruby.vim b/runtime/ftplugin/ruby.vim
index 6f06561..4c8db85 100644
--- a/runtime/ftplugin/ruby.vim
+++ b/runtime/ftplugin/ruby.vim
@@ -2,14 +2,8 @@
 " Language:	Ruby
 " Maintainer:	Gavin Sinclair <gsinclair at soyabean.com.au>
 " Info:		$Id$
-" URL:		http://vim-ruby.sourceforge.net
+" URL:		http://vim-ruby.rubyforge.org
 " Anon CVS:	See above site
-" Licence:	GPL (http://www.gnu.org)
-" Disclaimer:
-"    This program is distributed in the hope that it will be useful,
-"    but WITHOUT ANY WARRANTY; without even the implied warranty of
-"    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-"    GNU General Public License for more details.
 " ----------------------------------------------------------------------------
 "
 " Original matchit support thanks to Ned Konz.	See his ftplugin/ruby.vim at
diff --git a/runtime/ftplugin/xml.vim b/runtime/ftplugin/xml.vim
index 7bde8e7..8cff537 100644
--- a/runtime/ftplugin/xml.vim
+++ b/runtime/ftplugin/xml.vim
@@ -32,6 +32,15 @@
      \  '<\@<=\%([^ \t>/]\+\)\%(\s\+[^/>]*\|$\):/>'
 endif
 
+"
+" For Omni completion, by Mikolaj Machowski.
+if exists('&ofu')
+  setlocal ofu=xmlcomplete#CompleteTags
+endif
+command! -nargs=+ XMLns call xmlcomplete#CreateConnection(<f-args>)
+command! -nargs=? XMLent call xmlcomplete#CreateEntConnection(<f-args>)
+
+
 " Change the :browse e filter to primarily show xml-related files.
 if has("gui_win32")
     let  b:browsefilter="XML Files (*.xml)\t*.xml\n" .
