Update runtime files.
diff --git a/runtime/autoload/rubycomplete.vim b/runtime/autoload/rubycomplete.vim
index f89be52..e1064c8 100644
--- a/runtime/autoload/rubycomplete.vim
+++ b/runtime/autoload/rubycomplete.vim
@@ -1,9 +1,7 @@
 " Vim completion script
 " Language:             Ruby
 " Maintainer:           Mark Guzman <segfault@hasno.info>
-" Last Change:          2009 Sep 28
-" URL:                  http://vim-ruby.rubyforge.org
-" Anon CVS:             See above site
+" URL:                  https://github.com/vim-ruby/vim-ruby
 " Release Coordinator:  Doug Kearns <dougkearns@gmail.com>
 " Maintainer Version:   0.8.1
 " ----------------------------------------------------------------------------
@@ -12,16 +10,23 @@
 " ----------------------------------------------------------------------------
 
 " {{{ requirement checks
+
+function! s:ErrMsg(msg)
+    echohl ErrorMsg
+    echo a:msg
+    echohl None
+endfunction
+
 if !has('ruby')
-    s:ErrMsg( "Error: Rubycomplete requires vim compiled with +ruby" )
-    s:ErrMsg( "Error: falling back to syntax completion" )
+    call s:ErrMsg( "Error: Rubycomplete requires vim compiled with +ruby" )
+    call s:ErrMsg( "Error: falling back to syntax completion" )
     " lets fall back to syntax completion
     setlocal omnifunc=syntaxcomplete#Complete
     finish
 endif
 
 if version < 700
-    s:ErrMsg( "Error: Required vim >= 7.0" )
+    call s:ErrMsg( "Error: Required vim >= 7.0" )
     finish
 endif
 " }}} requirement checks
@@ -51,12 +56,6 @@
 " {{{ vim-side support functions
 let s:rubycomplete_debug = 0
 
-function! s:ErrMsg(msg)
-    echohl ErrorMsg
-    echo a:msg
-    echohl None
-endfunction
-
 function! s:dprint(msg)
     if s:rubycomplete_debug == 1
         echom a:msg
@@ -133,7 +132,7 @@
     let stopline = 1
     let vtp = ''
     let pos = getpos('.')
-    let sstr = '^\s*#\s*@var\s*'.a:v.'\>\s\+[^ \t]\+\s*$'
+    let sstr = '^\s*#\s*@var\s*'.escape(a:v, '*').'\>\s\+[^ \t]\+\s*$'
     let [lnum,lcol] = searchpos(sstr,'nb',stopline)
     if lnum != 0 && lcol != 0
         call setpos('.',pos)
@@ -275,7 +274,7 @@
     pare = /^\s*class\s*(.*)\s*<\s*(.*)\s*\n/.match( classdef )
     load_buffer_class( $2 ) if pare != nil  && $2 != name # load parent class if needed
 
-    mixre = /.*\n\s*include\s*(.*)\s*\n/.match( classdef )
+    mixre = /.*\n\s*(include|prepend)\s*(.*)\s*\n/.match( classdef )
     load_buffer_module( $2 ) if mixre != nil && $2 != name # load mixins if needed
 
     begin
@@ -364,6 +363,10 @@
     print txt if @@debug
   end
 
+  def escape_vim_singlequote_string(str)
+    str.to_s.gsub(/'/,"\\'")
+  end
+
   def get_buffer_entity_list( type )
     # this will be a little expensive.
     loading_allowed = VIM::evaluate("exists('g:rubycomplete_buffer_loading') && g:rubycomplete_buffer_loading")
@@ -526,9 +529,9 @@
   end
 
   def clean_sel(sel, msg)
-    sel.delete_if { |x| x == nil }
-    sel.uniq!
-    sel.grep(/^#{Regexp.quote(msg)}/) if msg != nil
+    ret = sel.reject{|x|x.nil?}.uniq
+    ret = ret.grep(/^#{Regexp.quote(msg)}/) if msg != nil
+    ret
   end
 
   def get_rails_view_methods
@@ -767,10 +770,10 @@
     constants = clean_sel( constants, message )
 
     valid = []
-    valid += methods.collect { |m| { :name => m, :type => 'm' } }
-    valid += variables.collect { |v| { :name => v, :type => 'v' } }
-    valid += classes.collect { |c| { :name => c, :type => 't' } }
-    valid += constants.collect { |d| { :name => d, :type => 'd' } }
+    valid += methods.collect { |m| { :name => m.to_s, :type => 'm' } }
+    valid += variables.collect { |v| { :name => v.to_s, :type => 'v' } }
+    valid += classes.collect { |c| { :name => c.to_s, :type => 't' } }
+    valid += constants.collect { |d| { :name => d.to_s, :type => 'd' } }
     valid.sort! { |x,y| x[:name] <=> y[:name] }
 
     outp = ""
@@ -779,7 +782,7 @@
     rg.step(150) do |x|
       stpos = 0+x
       enpos = 150+x
-      valid[stpos..enpos].each { |c| outp += "{'word':'%s','item':'%s','kind':'%s'}," % [ c[:name], c[:name], c[:type] ] }
+      valid[stpos..enpos].each { |c| outp += "{'word':'%s','item':'%s','kind':'%s'}," % [ c[:name], c[:name], c[:type] ].map{|x|escape_vim_singlequote_string(x)} }
       outp.sub!(/,$/, '')
 
       VIM::command("call extend(g:rubycomplete_completions, [%s])" % outp)
diff --git a/runtime/compiler/eruby.vim b/runtime/compiler/eruby.vim
index 614fc17..45ad5ee 100644
--- a/runtime/compiler/eruby.vim
+++ b/runtime/compiler/eruby.vim
@@ -1,9 +1,7 @@
 " Vim compiler file
 " Language:		eRuby
 " Maintainer:		Doug Kearns <dougkearns@gmail.com>
-" Last Change:		2008 Aug 1
-" URL:			http://vim-ruby.rubyforge.org
-" Anon CVS:		See above site
+" URL:			https://github.com/vim-ruby/vim-ruby
 " Release Coordinator:	Doug Kearns <dougkearns@gmail.com>
 
 if exists("current_compiler")
diff --git a/runtime/compiler/rake.vim b/runtime/compiler/rake.vim
new file mode 100644
index 0000000..3bd9da0
--- /dev/null
+++ b/runtime/compiler/rake.vim
@@ -0,0 +1,35 @@
+" Vim compiler file
+" Language:		Rake
+" Maintainer:		Tim Pope <vimNOSPAM@tpope.org>
+" URL:			https://github.com/vim-ruby/vim-ruby
+" Release Coordinator:	Doug Kearns <dougkearns@gmail.com>
+
+if exists("current_compiler")
+  finish
+endif
+let current_compiler = "rake"
+
+if exists(":CompilerSet") != 2		" older Vim always used :setlocal
+  command -nargs=* CompilerSet setlocal <args>
+endif
+
+let s:cpo_save = &cpo
+set cpo-=C
+
+CompilerSet makeprg=rake
+
+CompilerSet errorformat=
+      \%D(in\ %f),
+      \%\\s%#from\ %f:%l:%m,
+      \%\\s%#from\ %f:%l:,
+      \%\\s%##\ %f:%l:%m,
+      \%\\s%##\ %f:%l,
+      \%\\s%#[%f:%l:\ %#%m,
+      \%\\s%#%f:%l:\ %#%m,
+      \%\\s%#%f:%l:,
+      \%m\ [%f:%l]:
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+" vim: nowrap sw=2 sts=2 ts=8:
diff --git a/runtime/compiler/rspec.vim b/runtime/compiler/rspec.vim
index f46527e..7c340ba 100644
--- a/runtime/compiler/rspec.vim
+++ b/runtime/compiler/rspec.vim
@@ -1,9 +1,7 @@
 " Vim compiler file
 " Language:		RSpec
 " Maintainer:		Tim Pope <vimNOSPAM@tpope.org>
-" Last Change:		2009 Dec 22
-" URL:			http://vim-ruby.rubyforge.org
-" Anon CVS:		See above site
+" URL:			https://github.com/vim-ruby/vim-ruby
 " Release Coordinator:	Doug Kearns <dougkearns@gmail.com>
 
 if exists("current_compiler")
@@ -18,21 +16,15 @@
 let s:cpo_save = &cpo
 set cpo-=C
 
-CompilerSet makeprg=spec
+CompilerSet makeprg=rspec
 
 CompilerSet errorformat=
-    \%+W'%.%#'\ FAILED,
-    \%+I'%.%#'\ FIXED,
-    \%-Cexpected:%.%#,
-    \%-C\ \ \ \ \ got:%.%#,
+    \%f:%l:\ %tarning:\ %m,
     \%E%.%#:in\ `load':\ %f:%l:%m,
-    \%C%f:%l:,
-    \%W%f:%l:\ warning:\ %m,
-    \%E%f:%l:in\ %*[^:]:\ %m,
-    \%E%f:%l:\ %m,
-    \%-Z%\tfrom\ %f:%l,
-    \%-Z%p^%.%#,
-    \%-C%.%#,
+    \%E%f:%l:in\ `%*[^']':\ %m,
+    \%-Z\ \ \ \ \ \#\ %f:%l:%.%#,
+    \%E\ \ %\\d%\\+)%.%#,
+    \%C\ \ \ \ \ %m,
     \%-G%.%#
 
 let &cpo = s:cpo_save
diff --git a/runtime/compiler/ruby.vim b/runtime/compiler/ruby.vim
index 9499ce1..dcf7a40 100644
--- a/runtime/compiler/ruby.vim
+++ b/runtime/compiler/ruby.vim
@@ -1,33 +1,10 @@
 " Vim compiler file
 " Language:		Ruby
 " Function:		Syntax check and/or error reporting
-" Maintainer:		Tim Hammerquist <timh at rubyforge.org>
-" Last Change:		2008 Aug 1
-" URL:			http://vim-ruby.rubyforge.org
-" Anon CVS:		See above site
+" Maintainer:		Tim Pope <vimNOSPAM@tpope.org>
+" URL:			https://github.com/vim-ruby/vim-ruby
 " Release Coordinator:	Doug Kearns <dougkearns@gmail.com>
 " ----------------------------------------------------------------------------
-"
-" Changelog:
-" 0.2:	script saves and restores 'cpoptions' value to prevent problems with
-"	line continuations
-" 0.1:	initial release
-"
-" Contributors:
-"   Hugh Sasse <hgs@dmu.ac.uk>
-"   Doug Kearns <djkea2@gus.gscit.monash.edu.au>
-"
-" Todo:
-"   match error type %m
-"
-" Comments:
-"   I know this file isn't perfect.  If you have any questions, suggestions,
-"   patches, etc., please don't hesitate to let me know.
-"
-"   This is my first experience with 'errorformat' and compiler plugins and
-"   I welcome any input from more experienced (or clearer-thinking)
-"   individuals.
-" ----------------------------------------------------------------------------
 
 if exists("current_compiler")
   finish
diff --git a/runtime/compiler/rubyunit.vim b/runtime/compiler/rubyunit.vim
index 524c205..93a0c8e 100644
--- a/runtime/compiler/rubyunit.vim
+++ b/runtime/compiler/rubyunit.vim
@@ -1,9 +1,7 @@
 " Vim compiler file
 " Language:		Test::Unit - Ruby Unit Testing Framework
 " Maintainer:		Doug Kearns <dougkearns@gmail.com>
-" Last Change:		2008 Aug 1
-" URL:			http://vim-ruby.rubyforge.org
-" Anon CVS:		See above site
+" URL:			https://github.com/vim-ruby/vim-ruby
 " Release Coordinator:	Doug Kearns <dougkearns@gmail.com>
 
 if exists("current_compiler")
diff --git a/runtime/compiler/xmllint.vim b/runtime/compiler/xmllint.vim
index 8fde4e1..ddd4960 100644
--- a/runtime/compiler/xmllint.vim
+++ b/runtime/compiler/xmllint.vim
@@ -1,8 +1,7 @@
 " Vim compiler file
 " Compiler:	xmllint
-" Maintainer:	Doug Kearns <djkea2@gus.gscit.monash.edu.au>
-" URL:		http://gus.gscit.monash.edu.au/~djkea2/vim/compiler/xmllint.vim
-" Last Change:	2004 Nov 27
+" Maintainer:	Doug Kearns <dougkearns@gmail.com>
+" Last Change:	2013 Jun 1
 
 if exists("current_compiler")
   finish
@@ -18,10 +17,8 @@
 
 CompilerSet makeprg=xmllint\ --valid\ --noout\ 
 
-CompilerSet errorformat=%E%f:%l:\ error:\ %m,
-		    \%W%f:%l:\ warning:\ %m,
-		    \%E%f:%l:\ validity\ error:\ %m,
-		    \%W%f:%l:\ validity\ warning:\ %m,
+CompilerSet errorformat=%+E%f:%l:\ %.%#\ error\ :\ %m,
+		    \%+W%f:%l:\ %.%#\ warning\ :\ %m,
 		    \%-Z%p^,
 		    \%-G%.%#
 
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index 09eb22d..4dad269 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -1,4 +1,4 @@
-*eval.txt*	For Vim version 7.3.  Last change: 2013 May 21
+*eval.txt*	For Vim version 7.3.  Last change: 2013 Jun 11
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -2775,7 +2775,8 @@
 		file name contains a space]
 
 		If the expansion fails, the result is an empty string.	A name
-		for a non-existing file is not included.
+		for a non-existing file is not included, unless {expr} does
+		not start with '%', '#' or '<', see below.
 
 		When {expr} starts with '%', '#' or '<', the expansion is done
 		like for the |cmdline-special| variables with their associated
diff --git a/runtime/doc/gui.txt b/runtime/doc/gui.txt
index 6b46c9f..70c1a68 100644
--- a/runtime/doc/gui.txt
+++ b/runtime/doc/gui.txt
@@ -1,4 +1,4 @@
-*gui.txt*       For Vim version 7.3.  Last change: 2011 Jul 22
+*gui.txt*       For Vim version 7.3.  Last change: 2013 Jun 12
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
diff --git a/runtime/doc/indent.txt b/runtime/doc/indent.txt
index 0dd632b..7e89059 100644
--- a/runtime/doc/indent.txt
+++ b/runtime/doc/indent.txt
@@ -1,4 +1,4 @@
-*indent.txt*    For Vim version 7.3.  Last change: 2013 May 20
+*indent.txt*    For Vim version 7.3.  Last change: 2013 Jun 12
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -729,6 +729,50 @@
   let b:fortran_indent_less=1
 
 
+HTML				*ft-html-indent* *html-indent* *html-indenting*
+
+This is about variables you can set in your vimrc to customize HTML indenting.
+
+You can set the indent for the first line after <script> and <style>
+"blocktags" (default "zero"): >
+
+      :let g:html_indent_script1 = "inc"
+      :let g:html_indent_style1 = "inc"
+<
+      VALUE	MEANING ~
+      "zero"	zero indent
+      "auto"	auto indent (same indent as the blocktag)
+      "inc"	auto indent + one indent step
+
+Many tags increase the indent for what follows per default (see "Add Indent
+Tags" below in this script).  You can add further tags with: >
+
+      :let g:html_indent_inctags = "html,body,head,tbody"
+
+You can also remove such tags with: >
+
+      :let g:html_indent_autotags = "th,td,tr,tfoot,thead"
+
+Default value is empty for both variables.  Note: the initial "inctags" are
+only defined once per Vim session.
+
+User variables are only read when the script is sourced.  To enable your
+changes during a session, without reloaind the html file, you can manually
+do: >
+
+      :call HtmlIndent_CheckUserSettings()
+
+Detail:
+  Calculation of indent inside "blocktags" with "alien" content:
+      BLOCKTAG   INDENT EXPR	    WHEN APPLICABLE ~
+      <script> : {customizable}   if first line of block
+      	 : cindent(v:lnum)  if attributes empty or contain "java"
+      	 : -1		    else (vbscript, tcl, ...)
+      <style>  : {customizable}   if first line of block
+      	 : GetCSSIndent()   else
+      <!-- --> : -1
+
+
 PHP				*ft-php-indent* *php-indent* *php-indenting*
 
 NOTE:	PHP files will be indented correctly only if PHP |syntax| is active.
diff --git a/runtime/doc/insert.txt b/runtime/doc/insert.txt
index 43fedbc..fc0edb3 100644
--- a/runtime/doc/insert.txt
+++ b/runtime/doc/insert.txt
@@ -1468,9 +1468,9 @@
 minimal language-sensitive completion.
 
 To enable syntax code completion you can run: >
-	setlocal omnifunc=syntaxcomplete#Complete
+    setlocal omnifunc=syntaxcomplete#Complete
 
-You can automate this by placing the following in your vimrc (after any
+You can automate this by placing the following in your |.vimrc| (after any
 ":filetype" command): >
     if has("autocmd") && exists("+omnifunc")
 	autocmd Filetype *
@@ -1487,7 +1487,7 @@
 a look at the PHP filetype to see how this works.
 
 If you edit a file called, index.php, run the following command: >
-	:syntax list
+    syntax list
 
 The first thing you will notice is that there are many different syntax groups.
 The PHP language can include elements from different languages like HTML,
@@ -1496,24 +1496,38 @@
 groups are included by default with the PHP: phpEnvVar, phpIntVar,
 phpFunctions.
 
-The PHP language has an enormous number of items which it knows how to syntax
-highlight.  This means these items will be available within the omni
-completion list.  Some people may find this list unwieldy or are only
-interested in certain items.
+If you wish non-filetype syntax items to also be included, you can use a 
+regular expression syntax (added in version 13.0 of autoload\syntaxcomplete.vim)
+to add items.  Looking at the output from ":syntax list" while editing a PHP file 
+I can see some of these entries: >
+    htmlArg,htmlTag,htmlTagName,javaScriptStatement,javaScriptGlobalObjects
 
-There are two ways to prune this list (if necessary).  If you find certain
-syntax groups you do not wish displayed you can add the following to your
-vimrc: >
-	let g:omni_syntax_group_exclude_php = 'phpCoreConstant,phpConstant'
+To pick up any JavaScript and HTML keyword syntax groups while editing a PHP
+file, you can use 3 different regexs, one for each language.  Or you can 
+simply restrict the include groups to a particular value, without using 
+a regex string: >
+    let g:omni_syntax_group_include_php = 'php\w\+,javaScript\w\+,html\w\+'
+    let g:omni_syntax_group_include_php = 'phpFunctions,phpMethods'
+<
+The basic form of this variable is: >
+    let g:omni_syntax_group_include_{filetype} = 'regex,comma,separated'
+
+The PHP language has an enormous number of items which it knows how to syntax
+highlight.  These these items will be available within the omni completion
+list.  
+
+Some people may find this list unwieldy or are only interested in certain
+items.  There are two ways to prune this list (if necessary).  If you find
+certain syntax groups you do not wish displayed you can use two different 
+methods to identify these groups.  The first specifically lists the syntax 
+groups by name.  The second uses a regular expression to identify both 
+syntax groups.  Simply add one the following to your vimrc: >
+    let g:omni_syntax_group_exclude_php = 'phpCoreConstant,phpConstant'
+    let g:omni_syntax_group_exclude_php = 'php\w*Constant'
 
 Add as many syntax groups to this list by comma separating them.  The basic
 form of this variable is: >
-	let g:omni_syntax_group_exclude_{filetype} = 'comma,separated,list'
-
-For completeness the opposite is also true.  Creating this variable in your
-vimrc will only include the items in the phpFunctions and phpMethods syntax
-groups: >
-	let g:omni_syntax_group_include_php = 'phpFunctions,phpMethods'
+    let g:omni_syntax_group_exclude_{filetype} = 'regex,comma,separated'
 
 You can create as many of these variables as you need, varying only the
 filetype at the end of the variable name.
@@ -1554,6 +1568,9 @@
 To retrieve all syntax items for both the sqlOperator and sqlType groups: >
     echo OmniSyntaxList( ['sqlOperator', 'sqlType'] )
 
+A regular expression can also be used: >
+    echo OmniSyntaxList( ['sql\w\+'] )
+
 From within a plugin, you would typically assign the output to a List: >
     let myKeywords = []
     let myKeywords = OmniSyntaxList( ['sqlKeyword'] )
diff --git a/runtime/doc/map.txt b/runtime/doc/map.txt
index 0ae0cf3..e5e7720 100644
--- a/runtime/doc/map.txt
+++ b/runtime/doc/map.txt
@@ -1,4 +1,4 @@
-*map.txt*       For Vim version 7.3.  Last change: 2013 May 05
+*map.txt*       For Vim version 7.3.  Last change: 2013 Jun 12
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -175,6 +175,7 @@
 	:mapclear <buffer>
 Local mappings are also cleared when a buffer is deleted, but not when it is
 unloaded.  Just like local option values.
+Also see |map-precedence|.
 
 						*:map-<silent>* *:map-silent*
 To define a mapping which will not be echoed on the command line, add
@@ -654,6 +655,18 @@
 you type slowly, or your system is slow, reset the 'timeout' option.  Then you
 might want to set the 'ttimeout' option.
 
+                            				*map-precedence*
+Buffer-local mappings (defined using |:map-<buffer>|) take precedence over
+global mappings.  When a buffer-local mapping is the same as a global mapping,
+Vim will use the buffer-local mapping.  In addition, Vim will use a complete
+buffer-local mapping immediately, even if a longer global mapping has the
+buffer-local mapping as a prefix.  For example, given the following two
+mappings: >
+    :map <buffer> \a   :echo "Local \a"<CR>
+    :map          \abc :echo "Global \abc"<CR>
+The buffer-local mapping \a will be used immediately.  Vim will not wait for
+more characters to see if the user might be typing \abc.
+
 							*map-keys-fails*
 There are situations where key codes might not be recognized:
 - Vim can only read part of the key code.  Mostly this is only the first
diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt
index d7f9db0..93504a4 100644
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -1,4 +1,4 @@
-*options.txt*	For Vim version 7.3.  Last change: 2013 Jun 04
+*options.txt*	For Vim version 7.3.  Last change: 2013 Jun 12
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -2243,7 +2243,7 @@
 	Specifies whether to use quickfix window to show cscope results.
 	See |cscopequickfix|.
 
-						*'cscoperelative'* *'csre'*
+		*'cscoperelative'* *'csre'* *'nocscoperelative'* *'nocsre'*
 'cscoperelative' 'csre' boolean (default off)
 			global
 			{not available when compiled without the |+cscope|
diff --git a/runtime/doc/starting.txt b/runtime/doc/starting.txt
index 41f6d8c..d0b15c3 100644
--- a/runtime/doc/starting.txt
+++ b/runtime/doc/starting.txt
@@ -1,4 +1,4 @@
-*starting.txt*  For Vim version 7.3.  Last change: 2013 May 29
+*starting.txt*  For Vim version 7.3.  Last change: 2013 Jun 12
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -757,11 +757,21 @@
 	file, but "exrc" is what Vi always used, "vimrc" is a Vim specific
 	name.  Also see |vimrc-intro|.
 
-	Recommended place for your personal initializations:
-		Unix		    $HOME/.vimrc
-		OS/2		    $HOME/.vimrc or $VIM/.vimrc (or _vimrc)
-		MS-DOS and Win32    $HOME/_vimrc or $VIM/_vimrc
-		Amiga		    s:.vimrc or $VIM/.vimrc
+	Places for your personal initializations:
+		Unix		$HOME/.vimrc or $HOME/.vim/vimrc
+		OS/2		$HOME/.vimrc, $HOME/vimfiles/vimrc
+				or $VIM/.vimrc (or _vimrc)
+		MS-Windows	$HOME/_vimrc, $HOME/vimfiles/vimrc
+				or $VIM/_vimrc
+		Amiga		s:.vimrc, home:.vimrc, home:vimfiles:vimrc
+				or $VIM/.vimrc
+
+	The files are searched in the order specified above and only the first
+	one that is found is read.
+
+	RECOMMENDATION: Put all your Vim configuration stuff in the
+	$HOME/.vim/ directory ($HOME/vimfiles/ for MS-Windows). That makes it
+	easy to copy it to another system.
 
 	If Vim was started with "-u filename", the file "filename" is used.
 	All following initializations until 4. are skipped.
@@ -791,12 +801,15 @@
 	-  The environment variable VIMINIT (see also |compatible-default|) (*)
 	   The value of $VIMINIT is used as an Ex command line.
 	-  The user vimrc file(s):
-		    "$HOME/.vimrc"	(for Unix and OS/2) (*)
-		    "s:.vimrc"		(for Amiga) (*)
-		    "home:.vimrc"	(for Amiga) (*)
-		    "$VIM/.vimrc"	(for OS/2 and Amiga) (*)
-		    "$HOME/_vimrc"	(for MS-DOS and Win32) (*)
-		    "$VIM/_vimrc"	(for MS-DOS and Win32) (*)
+		    "$HOME/.vimrc"	   (for Unix and OS/2) (*)
+		    "$HOME/.vim/vimrc"	   (for Unix and OS/2) (*)
+		    "s:.vimrc"		   (for Amiga) (*)
+		    "home:.vimrc"	   (for Amiga) (*)
+		    "home:vimfiles:vimrc"  (for Amiga) (*)
+		    "$VIM/.vimrc"	   (for OS/2 and Amiga) (*)
+		    "$HOME/_vimrc"	   (for MS-DOS and Win32) (*)
+		    "$HOME/vimfiles/vimrc" (for MS-DOS and Win32) (*)
+		    "$VIM/_vimrc"	   (for MS-DOS and Win32) (*)
 		Note: For Unix, OS/2 and Amiga, when ".vimrc" does not exist,
 		"_vimrc" is also tried, in case an MS-DOS compatible file
 		system is used.  For MS-DOS and Win32 ".vimrc" is checked
diff --git a/runtime/doc/tags b/runtime/doc/tags
index 69ed533..f41f74d 100644
--- a/runtime/doc/tags
+++ b/runtime/doc/tags
@@ -496,8 +496,10 @@
 'nocopyindent'	options.txt	/*'nocopyindent'*
 'nocp'	options.txt	/*'nocp'*
 'nocrb'	options.txt	/*'nocrb'*
+'nocscoperelative'	options.txt	/*'nocscoperelative'*
 'nocscopetag'	options.txt	/*'nocscopetag'*
 'nocscopeverbose'	options.txt	/*'nocscopeverbose'*
+'nocsre'	options.txt	/*'nocsre'*
 'nocst'	options.txt	/*'nocst'*
 'nocsverb'	options.txt	/*'nocsverb'*
 'nocuc'	options.txt	/*'nocuc'*
@@ -5716,6 +5718,7 @@
 ft-groff-syntax	syntax.txt	/*ft-groff-syntax*
 ft-gsp-syntax	syntax.txt	/*ft-gsp-syntax*
 ft-haskell-syntax	syntax.txt	/*ft-haskell-syntax*
+ft-html-indent	indent.txt	/*ft-html-indent*
 ft-html-omni	insert.txt	/*ft-html-omni*
 ft-html-syntax	syntax.txt	/*ft-html-syntax*
 ft-htmlos-syntax	syntax.txt	/*ft-htmlos-syntax*
@@ -6342,6 +6345,8 @@
 hpterm	term.txt	/*hpterm*
 hpterm-color	syntax.txt	/*hpterm-color*
 html-flavor	insert.txt	/*html-flavor*
+html-indent	indent.txt	/*html-indent*
+html-indenting	indent.txt	/*html-indenting*
 html.vim	syntax.txt	/*html.vim*
 htmlos.vim	syntax.txt	/*htmlos.vim*
 http	pi_netrw.txt	/*http*
@@ -6708,6 +6713,7 @@
 map-modes	map.txt	/*map-modes*
 map-multibyte	map.txt	/*map-multibyte*
 map-overview	map.txt	/*map-overview*
+map-precedence	map.txt	/*map-precedence*
 map-self-destroy	tips.txt	/*map-self-destroy*
 map-typing	map.txt	/*map-typing*
 map-which-keys	map.txt	/*map-which-keys*
@@ -7352,6 +7358,8 @@
 python-Dictionary	if_pyth.txt	/*python-Dictionary*
 python-Function	if_pyth.txt	/*python-Function*
 python-List	if_pyth.txt	/*python-List*
+python-VIM_SPECIAL_PATH	if_pyth.txt	/*python-VIM_SPECIAL_PATH*
+python-_get_paths	if_pyth.txt	/*python-_get_paths*
 python-bindeval	if_pyth.txt	/*python-bindeval*
 python-bindeval-objects	if_pyth.txt	/*python-bindeval-objects*
 python-buffer	if_pyth.txt	/*python-buffer*
@@ -7365,11 +7373,15 @@
 python-eval	if_pyth.txt	/*python-eval*
 python-examples	if_pyth.txt	/*python-examples*
 python-fchdir	if_pyth.txt	/*python-fchdir*
+python-find_module	if_pyth.txt	/*python-find_module*
+python-foreach_rtp	if_pyth.txt	/*python-foreach_rtp*
 python-input	if_pyth.txt	/*python-input*
 python-options	if_pyth.txt	/*python-options*
 python-output	if_pyth.txt	/*python-output*
+python-path_hook	if_pyth.txt	/*python-path_hook*
 python-pyeval	if_pyth.txt	/*python-pyeval*
 python-range	if_pyth.txt	/*python-range*
+python-special-path	if_pyth.txt	/*python-special-path*
 python-strwidth	if_pyth.txt	/*python-strwidth*
 python-tabpage	if_pyth.txt	/*python-tabpage*
 python-tabpages	if_pyth.txt	/*python-tabpages*
@@ -7379,7 +7391,10 @@
 python-window	if_pyth.txt	/*python-window*
 python-windows	if_pyth.txt	/*python-windows*
 python.vim	syntax.txt	/*python.vim*
+python2-directory	if_pyth.txt	/*python2-directory*
 python3	if_pyth.txt	/*python3*
+python3-directory	if_pyth.txt	/*python3-directory*
+pythonx-directory	if_pyth.txt	/*pythonx-directory*
 q	repeat.txt	/*q*
 q/	cmdline.txt	/*q\/*
 q:	cmdline.txt	/*q:*
@@ -7550,6 +7565,8 @@
 save-settings	starting.txt	/*save-settings*
 scheme.vim	syntax.txt	/*scheme.vim*
 scp	pi_netrw.txt	/*scp*
+screenattr()	eval.txt	/*screenattr()*
+screenchar()	eval.txt	/*screenchar()*
 screencol()	eval.txt	/*screencol()*
 screenrow()	eval.txt	/*screenrow()*
 script	usr_41.txt	/*script*
diff --git a/runtime/doc/todo.txt b/runtime/doc/todo.txt
index 5f01603..f5ac22d 100644
--- a/runtime/doc/todo.txt
+++ b/runtime/doc/todo.txt
@@ -1,4 +1,4 @@
-*todo.txt*      For Vim version 7.3.  Last change: 2013 Jun 06
+*todo.txt*      For Vim version 7.3.  Last change: 2013 Jun 12
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -34,18 +34,11 @@
 							*known-bugs*
 -------------------- Known bugs and current work -----------------------
 
-Make it possible to test the status line: add screenchar(col, row).
-Use screen_getbytes().
-Could also add screenattr(col, row), but value is unpredictable.
-Functions to read the actual contents of the screen, so that things like
-conceal can be tested. (Nazri Ramliy, 2013 Feb 18)
-
-function() does not work like before. (lilydjwg, 2013 Jun 4)
-I guess this is caused by patch 7.3.1058:
-"Call of funcref does not succeed in other script."
-
 --- Python interface
 
+Test 87 fails.
+Test 86 fails on some systems.
+
 Python: ":py raw_input('prompt')" doesn't work. (Manu Hack)
 
 Win32: The Python interface only works with one version of Python, selected at
@@ -59,62 +52,6 @@
 exception and give an error. (Yasuhiro Matsumoto)
 Does not work, tests fail.
 
-Python: crash in test 86 because of int/size_t mixup? (Jun Takimoto, 2013 Jun
-6)
-
-Add a $VIMRUNTIME/python and $VIMRUNTIME/python3 directories?
-
---- runtime files
-
-Alternate html indent file by Andy Wokula, script 2075.
-
-Syntax file for protocol buffers. (Feng Xiao, 2013 May 9)
-Has an ugly copyright notice.
-Add statement that it does not conflict with Vim license.
-
-Patch for JavaScript syntax. (Kevin Locke, 2013 May 9)
-Claudio didn't respond yet.
-
-upstream_dat, usserver_log et al. syntax files. (Rob Owens, 2013 Jun 5)
-
---- New regexp engine
-
-Does not work (yet) with NFA:
-- \%u, \%x, \%o, \%d followed by a composing character
-
-Don't call nfa_regmatch() recursively if the "out" state is not going to be
-added anyway.  In run log:
-    > Not adding state 6 to list 4. char -971: NFA_SKIP
-
-Profiling:
-    ./vim -s ~/vim/test/alsa.vim
-    ./vim -s ~/vim/test/todo.vim
-    ./vim -s ~/vim/test/loop.vim
-    ./vim -s ~/vim/test/xml.vim
-
-More test files from the src/pkg/regexp/testdata directory in the Go repo.
-
-It's very slow compared to the old engine...
-Performance tests:
-- ~/vim/text/FeiqCfg.xml (file from Netjune)
-- ~/vim/text/edl.svg  (also XML)
-- glts has five tests. (May 25)
-- ~/vim/test/veryslow.js  display last line (file from Daniel Fetchinson)
-- ~/vim/test/slowsearch
-- ~/vim/test/rgb.vim
-- search for  a.*e*exn  in the vim executable.  Go to last line to use
-  'hlsearch'.
-- Slow combination of folding and PHP syntax highlighting.  Script to
-  reproduce it.  Caused by "syntax sync fromstart" in combination with patch
-  7.2.274.  (Christian Brabandt, 2010 May 27) Generally, folding with
-  'foldmethod' set to "syntax" is slow.  Do profiling to find out why.
-- It does not use any of the optimizations, such as required start pattern.
-- When lists are empty in nfa_regmatch() and match is true, it keeps looping
-  without doing anything.
-
-BT engine: After \@> match and failing submatches are not cleared.
-See test64.
-
 --- bug fixes
 
 :wviminfo does not write old history entries. (Roland Eggner, 2013 Jun 5)
@@ -157,6 +94,8 @@
 
 Patch to fix finding toolbar bitmaps.  Issue 129.
 
+Suggestion to remove __QNXNTO__ in gui.c. (Sean Boudreau, 2013 Jun 7)
+
 Combining characters are not used when executing a register with :@w.
 (William Fugh, 2013 Apr 5, more info from Ben Fritz)
 Patch by Christian Brabandt, 2013 Apr 6.  Second one.
@@ -174,6 +113,8 @@
 Patch to fix "gn" on single character matches. (Christian Brabandt, 2013 Jun
 2)
 
+Patch for cscope connection (Narendran, 2013 Jun 10)
+
 'cursorline' is drawn incorrectly in diff mode. Patch by Christian Brabandt,
 2012 Apr 2.
 
@@ -192,24 +133,11 @@
 Patch to fix glob() and globpath() with escaped special characters.
 (Adnan Zafar, 2013 Jun 2, tests Jun 3)
 
---- slightly incompatible changes
-
-Patch to load ~/.vim/vimrc when ~/.vimrc isn't found. (Lech Lorens, 2013 Apr
-13)
-
-It's probably a good idea to make a negative value for 'sts' use the value of
-'sw'.  Patch by So8res, Oct 3 2012
-
-When a buffer-local mapping is used, but a global mapping starts with the same
-characters, Vim currently waits for the next typed character to find out if
-the global mapping matches.  It is probably better to let the local mapping
-win and not wait. (discussion with Andy Wokula, 2013 Jan 30)
-Patch by Michael Henry, 2013 Jan 30, update Feb 15.
-
-Patch to store absolute path for cscope. (Christian Brabandt, 2013 May 31)
-
 ---- Fixes to be included before 7.4 above, less important stuff below ----
 
+Patch to make has() check for Vim version and patch at the same time.
+(Marc Weber, 2013 Jun 7)
+
 Several syntax file match "^\s*" which may get underlined if that's in the
 highlight group.  Add a "\zs" after it?
 
@@ -219,6 +147,9 @@
 
 Checking runtime scripts: Thilo Six, 2012 Jun 6.
 
+Fold can't be opened after ":move". (Ein Brown)
+Patch from Christian Brabandt doesn't fix it completely.
+
 GTK: problem with 'L' in 'guioptions' changing the window width.
 (Aaron Cornelius, 2012 Feb 6)
 
@@ -539,6 +470,9 @@
 
 Vim using lots of memory when joining lines. (John Little, 2010 Dec 3)
 
+BT regexp engine: After trying a \@> match and failing, submatches are not
+cleared.  See test64.
+
 Changes to manpage plugin. (Elias Toivanen, 2011 Jul 25)
 
 Patch to make "z=" work when 'spell' is off.  Does this have nasty side
@@ -679,6 +613,32 @@
 Since patch 7.2.46 Yankring plugin has become very slow, eventually make Vim
 crash? (Raiwil, 2010 Nov 17)
 
+Does not work with NFA regexp engine:
+- \%u, \%x, \%o, \%d followed by a composing character
+
+Regexp engine performance:
+- Profiling:
+	./vim -u NONE -s ~/vim/test/ruby.vim
+	./vim -u NONE -s ~/vim/test/loop.vim
+	./vim -u NONE -s ~/vim/test/alsa.vim
+	./vim -s ~/vim/test/todo.vim
+	./vim -s ~/vim/test/xml.vim
+    Dominique Pelle:  xmlSyncDT is particularly slow (Jun 7)
+- More test files from the src/pkg/regexp/testdata directory in the Go repo.
+- Performance tests:
+  - Using asciidoc syntax. (Marek Schimara, 2013 Jun 6)
+  - ~/vim/text/FeiqCfg.xml (file from Netjune)
+  - ~/vim/text/edl.svg  (also XML)
+  - glts has five tests. (May 25)
+  - ~/vim/test/slowsearch
+  - ~/vim/test/rgb.vim
+  - search for  a.*e*exn  in the vim executable.  Go to last line to use
+    'hlsearch'.
+  - Slow combination of folding and PHP syntax highlighting.  Script to
+    reproduce it.  Caused by "syntax sync fromstart" in combination with patch
+    7.2.274.  (Christian Brabandt, 2010 May 27) Generally, folding with
+    'foldmethod' set to "syntax" is slow.  Do profiling to find out why.
+
 Patch to add 'systemencoding', convert between 'encoding' and this for file
 names, shell commands and the like.  (Kikuchan, 2010 Oct 14)
 Assume the system converts between the actual encoding of the filesystem to
diff --git a/runtime/filetype.vim b/runtime/filetype.vim
index d5d85fd..ab10a50 100644
--- a/runtime/filetype.vim
+++ b/runtime/filetype.vim
@@ -1,7 +1,7 @@
 " Vim support file to detect file types
 "
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last Change:	2013 Jun 01
+" Last Change:	2013 Jun 12
 
 " Listen very carefully, I will say this only once
 if exists("did_load_filetypes")
@@ -870,6 +870,9 @@
 " Hyper Builder
 au BufNewFile,BufRead *.hb			setf hb
 
+" Httest
+au BufNewFile,BufRead *.htt,*.htb		setf httest
+
 " Icon
 au BufNewFile,BufRead *.icn			setf icon
 
@@ -1548,6 +1551,9 @@
 " Promela
 au BufNewFile,BufRead *.pml			setf promela
 
+" Google protocol buffers
+au BufNewFile,BufRead *.proto			setf proto
+
 " Protocols
 au BufNewFile,BufRead */etc/protocols		setf protocols
 
diff --git a/runtime/ftplugin/eruby.vim b/runtime/ftplugin/eruby.vim
index 870f45e..9bb8e86 100644
--- a/runtime/ftplugin/eruby.vim
+++ b/runtime/ftplugin/eruby.vim
@@ -1,9 +1,7 @@
 " Vim filetype plugin
 " Language:		eRuby
 " Maintainer:		Tim Pope <vimNOSPAM@tpope.org>
-" Last Change:		2012 Mar 11
-" URL:			http://vim-ruby.rubyforge.org
-" Anon CVS:		See above site
+" URL:			https://github.com/vim-ruby/vim-ruby
 " Release Coordinator:	Doug Kearns <dougkearns@gmail.com>
 
 " Only do this when not done yet for this buffer
@@ -23,13 +21,12 @@
   let g:eruby_default_subtype = "html"
 endif
 
-if !exists("b:eruby_subtype")
+if &filetype =~ '^eruby\.'
+  let b:eruby_subtype = matchstr(&filetype,'^eruby\.\zs\w\+')
+elseif !exists("b:eruby_subtype")
   let s:lines = getline(1)."\n".getline(2)."\n".getline(3)."\n".getline(4)."\n".getline(5)."\n".getline("$")
   let b:eruby_subtype = matchstr(s:lines,'eruby_subtype=\zs\w\+')
   if b:eruby_subtype == ''
-    let b:eruby_subtype = matchstr(&filetype,'^eruby\.\zs\w\+')
-  endif
-  if b:eruby_subtype == ''
     let b:eruby_subtype = matchstr(substitute(expand("%:t"),'\c\%(\.erb\|\.eruby\|\.erubis\)\+$','',''),'\.\zs\w\+$')
   endif
   if b:eruby_subtype == 'rhtml'
diff --git a/runtime/ftplugin/falcon.vim b/runtime/ftplugin/falcon.vim
index 2e1e7fa..4fc135b 100644
--- a/runtime/ftplugin/falcon.vim
+++ b/runtime/ftplugin/falcon.vim
@@ -1,10 +1,9 @@
 " Vim filetype plugin file
 " Language:     Falcon
 " Author:       Steven Oliver <oliver.steven@gmail.com>
-" Copyright:    Copyright (c) 2009, 2010, 2011, 2012 Steven Oliver
+" Copyright:    Copyright (c) 2009-2013 Steven Oliver
 " License:      You may redistribute this under the same terms as Vim itself
 " --------------------------------------------------------------------------
-" GetLatestVimScripts: 2762 1 :AutoInstall: falcon.vim
 
 " Only do this when not done yet for this buffer
 if (exists("b:did_ftplugin"))
@@ -15,7 +14,7 @@
 let s:cpo_save = &cpo
 set cpo&vim
 
-setlocal tabstop=4 shiftwidth=4 expandtab fileencoding=utf-8
+setlocal softtabstop=4 shiftwidth=4 fileencoding=utf-8
 setlocal suffixesadd=.fal,.ftd
 
 " Matchit support
@@ -31,7 +30,6 @@
 	\ ',{:},\[:\],(:)'
 endif
 
-" Set comments to include dashed lines
 setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,://
 
 " Windows allows you to filter the open file dialog
diff --git a/runtime/ftplugin/gprof.vim b/runtime/ftplugin/gprof.vim
index f76dd31..750751c 100644
--- a/runtime/ftplugin/gprof.vim
+++ b/runtime/ftplugin/gprof.vim
@@ -1,6 +1,6 @@
 " Language:    gprof
 " Maintainer:  Dominique Pelle <dominique.pelle@gmail.com>
-" Last Change: 2012 May 20
+" Last Change: 2013 Jun 09
 
 " When cursor is on one line of the gprof call graph,
 " calling this function jumps to this function in the call graph.
@@ -13,20 +13,20 @@
   let l:line = getline('.')
   if l:line =~ '[\d\+\]$'
     " We're in a line in the call graph.
-    norm $y%
+    norm! $y%
     call search('^' . escape(@", '[]'), 'sw')
-    norm zz
+    norm! zz
   elseif l:line =~ '^\(\s\+[0-9\.]\+\)\{3}\s\+'
     " We're in line in the flat profile.
-    norm 55|y$
-    call search('^\[\d\+\].*\d\s\+' .  escape(@", '[]*.'), 'sW')
-    norm zz
+    norm! 55|eby$
+    call search('^\[\d\+\].*\d\s\+' .  escape(@", '[]*.') . '\>', 'sW')
+    norm! zz
   endif
 endfun
 
 " Pressing <C-]> on a line in the gprof flat profile or in
 " the call graph, jumps to the corresponding function inside
 " the flat profile.
-map <silent> <C-]> :call <SID>GprofJumpToFunctionIndex()<CR>
+map <buffer> <silent> <C-]> :call <SID>GprofJumpToFunctionIndex()<CR>
 
 " vim:sw=2 fdm=indent
diff --git a/runtime/ftplugin/ruby.vim b/runtime/ftplugin/ruby.vim
index 6b9363e..9630a94 100644
--- a/runtime/ftplugin/ruby.vim
+++ b/runtime/ftplugin/ruby.vim
@@ -1,17 +1,10 @@
 " Vim filetype plugin
 " Language:		Ruby
-" Maintainer:		Gavin Sinclair <gsinclair at gmail.com>
-" Last Change:		2010 Mar 15
-" URL:			http://vim-ruby.rubyforge.org
-" Anon CVS:		See above site
+" Maintainer:		Tim Pope <vimNOSPAM@tpope.org>
+" URL:			https://github.com/vim-ruby/vim-ruby
 " Release Coordinator:  Doug Kearns <dougkearns@gmail.com>
 " ----------------------------------------------------------------------------
-"
-" Original matchit support thanks to Ned Konz.  See his ftplugin/ruby.vim at
-"   http://bike-nomad.com/vim/ruby.vim.
-" ----------------------------------------------------------------------------
 
-" Only do this when not done yet for this buffer
 if (exists("b:did_ftplugin"))
   finish
 endif
@@ -21,7 +14,7 @@
 set cpo&vim
 
 if has("gui_running") && !has("gui_win32")
-  setlocal keywordprg=ri\ -T
+  setlocal keywordprg=ri\ -T\ -f\ bs
 else
   setlocal keywordprg=ri
 endif
@@ -49,7 +42,7 @@
 
 setlocal formatoptions-=t formatoptions+=croql
 
-setlocal include=^\\s*\\<\\(load\\\|\w*require\\)\\>
+setlocal include=^\\s*\\<\\(load\\>\\\|require\\>\\\|autoload\\s*:\\=[\"']\\=\\h\\w*[\"']\\=,\\)
 setlocal includeexpr=substitute(substitute(v:fname,'::','/','g'),'$','.rb','')
 setlocal suffixesadd=.rb
 
@@ -69,41 +62,90 @@
 setlocal comments=:#
 setlocal commentstring=#\ %s
 
-if !exists("s:ruby_path")
-  if exists("g:ruby_path")
-    let s:ruby_path = g:ruby_path
-  elseif has("ruby") && has("win32")
-    ruby VIM::command( 'let s:ruby_path = "%s"' % ($: + begin; require %q{rubygems}; Gem.all_load_paths.sort.uniq; rescue LoadError; []; end).join(%q{,}) )
-    let s:ruby_path = '.,' . substitute(s:ruby_path, '\%(^\|,\)\.\%(,\|$\)', ',,', '')
-  elseif executable("ruby")
-    let s:code = "print ($: + begin; require %q{rubygems}; Gem.all_load_paths.sort.uniq; rescue LoadError; []; end).join(%q{,})"
-    if &shellxquote == "'"
-      let s:ruby_path = system('ruby -e "' . s:code . '"')
-    else
-      let s:ruby_path = system("ruby -e '" . s:code . "'")
-    endif
-    let s:ruby_path = '.,' . substitute(s:ruby_path, '\%(^\|,\)\.\%(,\|$\)', ',,', '')
+if !exists('g:ruby_version_paths')
+  let g:ruby_version_paths = {}
+endif
+
+function! s:query_path(root)
+  let code = "print $:.join %q{,}"
+  if &shell =~# 'sh' && $PATH !~# '\s'
+    let prefix = 'env PATH='.$PATH.' '
   else
-    " If we can't call ruby to get its path, just default to using the
-    " current directory and the directory of the current file.
-    let s:ruby_path = ".,,"
+    let prefix = ''
+  endif
+  if &shellxquote == "'"
+    let path_check = prefix.'ruby -e "' . code . '"'
+  else
+    let path_check = prefix."ruby -e '" . code . "'"
+  endif
+
+  let cd = haslocaldir() ? 'lcd' : 'cd'
+  let cwd = getcwd()
+  try
+    exe cd fnameescape(a:root)
+    let path = split(system(path_check),',')
+    exe cd fnameescape(cwd)
+    return path
+  finally
+    exe cd fnameescape(cwd)
+  endtry
+endfunction
+
+function! s:build_path(path)
+  let path = join(map(copy(a:path), 'v:val ==# "." ? "" : v:val'), ',')
+  if &g:path !~# '\v^\.%(,/%(usr|emx)/include)=,,$'
+    let path = substitute(&g:path,',,$',',','') . ',' . path
+  endif
+  return path
+endfunction
+
+if !exists('b:ruby_version') && !exists('g:ruby_path') && isdirectory(expand('%:p:h'))
+  let s:version_file = findfile('.ruby-version', '.;')
+  if !empty(s:version_file)
+    let b:ruby_version = get(readfile(s:version_file, '', 1), '')
+    if !has_key(g:ruby_version_paths, b:ruby_version)
+      let g:ruby_version_paths[b:ruby_version] = s:query_path(fnamemodify(s:version_file, ':p:h'))
+    endif
   endif
 endif
 
-let &l:path = s:ruby_path
+if exists("g:ruby_path")
+  let s:ruby_path = type(g:ruby_path) == type([]) ? join(g:ruby_path, ',') : g:ruby_path
+elseif has_key(g:ruby_version_paths, get(b:, 'ruby_version', ''))
+  let s:ruby_paths = g:ruby_version_paths[b:ruby_version]
+  let s:ruby_path = s:build_path(s:ruby_paths)
+else
+  if !exists('g:ruby_default_path')
+    if has("ruby") && has("win32")
+      ruby ::VIM::command( 'let g:ruby_default_path = split("%s",",")' % $:.join(%q{,}) )
+    elseif executable('ruby')
+      let g:ruby_default_path = s:query_path($HOME)
+    else
+      let g:ruby_default_path = map(split($RUBYLIB,':'), 'v:val ==# "." ? "" : v:val')
+    endif
+  endif
+  let s:ruby_paths = g:ruby_default_path
+  let s:ruby_path = s:build_path(s:ruby_paths)
+endif
+
+if stridx(&l:path, s:ruby_path) == -1
+  let &l:path = s:ruby_path
+endif
+if exists('s:ruby_paths') && stridx(&l:tags, join(map(copy(s:ruby_paths),'v:val."/tags"'),',')) == -1
+  let &l:tags = &tags . ',' . join(map(copy(s:ruby_paths),'v:val."/tags"'),',')
+endif
 
 if has("gui_win32") && !exists("b:browsefilter")
   let b:browsefilter = "Ruby Source Files (*.rb)\t*.rb\n" .
                      \ "All Files (*.*)\t*.*\n"
 endif
 
-let b:undo_ftplugin = "setl fo< inc< inex< sua< def< com< cms< path< kp<"
+let b:undo_ftplugin = "setl fo< inc< inex< sua< def< com< cms< path< tags< kp<"
       \."| unlet! b:browsefilter b:match_ignorecase b:match_words b:match_skip"
       \."| if exists('&ofu') && has('ruby') | setl ofu< | endif"
       \."| if has('balloon_eval') && exists('+bexpr') | setl bexpr< | endif"
 
 if !exists("g:no_plugin_maps") && !exists("g:no_ruby_maps")
-
   nnoremap <silent> <buffer> [m :<C-U>call <SID>searchsyn('\<def\>','rubyDefine','b','n')<CR>
   nnoremap <silent> <buffer> ]m :<C-U>call <SID>searchsyn('\<def\>','rubyDefine','','n')<CR>
   nnoremap <silent> <buffer> [M :<C-U>call <SID>searchsyn('\<end\>','rubyDefine','b','n')<CR>
@@ -126,6 +168,26 @@
         \."| sil! exe 'unmap <buffer> [[' | sil! exe 'unmap <buffer> ]]' | sil! exe 'unmap <buffer> []' | sil! exe 'unmap <buffer> ]['"
         \."| sil! exe 'unmap <buffer> [m' | sil! exe 'unmap <buffer> ]m' | sil! exe 'unmap <buffer> [M' | sil! exe 'unmap <buffer> ]M'"
 
+  if maparg('im','n') == ''
+    onoremap <silent> <buffer> im :<C-U>call <SID>wrap_i('[m',']M')<CR>
+    onoremap <silent> <buffer> am :<C-U>call <SID>wrap_a('[m',']M')<CR>
+    xnoremap <silent> <buffer> im :<C-U>call <SID>wrap_i('[m',']M')<CR>
+    xnoremap <silent> <buffer> am :<C-U>call <SID>wrap_a('[m',']M')<CR>
+    let b:undo_ftplugin = b:undo_ftplugin
+          \."| sil! exe 'ounmap <buffer> im' | sil! exe 'ounmap <buffer> am'"
+          \."| sil! exe 'xunmap <buffer> im' | sil! exe 'xunmap <buffer> am'"
+  endif
+
+  if maparg('iM','n') == ''
+    onoremap <silent> <buffer> iM :<C-U>call <SID>wrap_i('[[','][')<CR>
+    onoremap <silent> <buffer> aM :<C-U>call <SID>wrap_a('[[','][')<CR>
+    xnoremap <silent> <buffer> iM :<C-U>call <SID>wrap_i('[[','][')<CR>
+    xnoremap <silent> <buffer> aM :<C-U>call <SID>wrap_a('[[','][')<CR>
+    let b:undo_ftplugin = b:undo_ftplugin
+          \."| sil! exe 'ounmap <buffer> iM' | sil! exe 'ounmap <buffer> aM'"
+          \."| sil! exe 'xunmap <buffer> iM' | sil! exe 'xunmap <buffer> aM'"
+  endif
+
   if maparg("\<C-]>",'n') == ''
     nnoremap <silent> <buffer> <C-]>       :<C-U>exe  v:count1."tag <C-R>=RubyCursorIdentifier()<CR>"<CR>
     nnoremap <silent> <buffer> g<C-]>      :<C-U>exe         "tjump <C-R>=RubyCursorIdentifier()<CR>"<CR>
@@ -142,6 +204,17 @@
           \."| sil! exe 'nunmap <buffer> <C-W>g<C-]>'| sil! exe 'nunmap <buffer> <C-W>g]'"
           \."| sil! exe 'nunmap <buffer> <C-W>}'| sil! exe 'nunmap <buffer> <C-W>g}'"
   endif
+
+  if maparg("gf",'n') == ''
+    " By using findfile() rather than gf's normal behavior, we prevent
+    " erroneously editing a directory.
+    nnoremap <silent> <buffer> gf         :<C-U>exe <SID>gf(v:count1,"gf",'edit')<CR>
+    nnoremap <silent> <buffer> <C-W>f     :<C-U>exe <SID>gf(v:count1,"\<Lt>C-W>f",'split')<CR>
+    nnoremap <silent> <buffer> <C-W><C-F> :<C-U>exe <SID>gf(v:count1,"\<Lt>C-W>\<Lt>C-F>",'split')<CR>
+    nnoremap <silent> <buffer> <C-W>gf    :<C-U>exe <SID>gf(v:count1,"\<Lt>C-W>gf",'tabedit')<CR>
+    let b:undo_ftplugin = b:undo_ftplugin
+          \."| sil! exe 'nunmap <buffer> gf' | sil! exe 'nunmap <buffer> <C-W>f' | sil! exe 'nunmap <buffer> <C-W><C-F>' | sil! exe 'nunmap <buffer> <C-W>gf'"
+  endif
 endif
 
 let &cpo = s:cpo_save
@@ -191,7 +264,7 @@
     if str !~ '^\w'
       return ''
     endif
-    silent! let res = substitute(system("ri -f simple -T \"".str.'"'),'\n$','','')
+    silent! let res = substitute(system("ri -f rdoc -T \"".str.'"'),'\n$','','')
     if res =~ '^Nothing known about' || res =~ '^Bad argument:' || res =~ '^More than one method'
       return ''
     endif
@@ -202,29 +275,57 @@
 endfunction
 
 function! s:searchsyn(pattern,syn,flags,mode)
-    norm! m'
-    if a:mode ==# 'v'
-      norm! gv
-    endif
-    let i = 0
-    let cnt = v:count ? v:count : 1
-    while i < cnt
-        let i = i + 1
-        let line = line('.')
-        let col  = col('.')
-        let pos = search(a:pattern,'W'.a:flags)
-        while pos != 0 && s:synname() !~# a:syn
-            let pos = search(a:pattern,'W'.a:flags)
-        endwhile
-        if pos == 0
-            call cursor(line,col)
-            return
-        endif
+  norm! m'
+  if a:mode ==# 'v'
+    norm! gv
+  endif
+  let i = 0
+  let cnt = v:count ? v:count : 1
+  while i < cnt
+    let i = i + 1
+    let line = line('.')
+    let col  = col('.')
+    let pos = search(a:pattern,'W'.a:flags)
+    while pos != 0 && s:synname() !~# a:syn
+      let pos = search(a:pattern,'W'.a:flags)
     endwhile
+    if pos == 0
+      call cursor(line,col)
+      return
+    endif
+  endwhile
 endfunction
 
 function! s:synname()
-    return synIDattr(synID(line('.'),col('.'),0),'name')
+  return synIDattr(synID(line('.'),col('.'),0),'name')
+endfunction
+
+function! s:wrap_i(back,forward)
+  execute 'norm k'.a:forward
+  let line = line('.')
+  execute 'norm '.a:back
+  if line('.') == line - 1
+    return s:wrap_a(a:back,a:forward)
+  endif
+  execute 'norm jV'.a:forward.'k'
+endfunction
+
+function! s:wrap_a(back,forward)
+  execute 'norm '.a:forward
+  if line('.') < line('$') && getline(line('.')+1) ==# ''
+    let after = 1
+  endif
+  execute 'norm '.a:back
+  while getline(line('.')-1) =~# '^\s*#' && line('.')
+    -
+  endwhile
+  if exists('after')
+    execute 'norm V'.a:forward.'j'
+  elseif line('.') > 1 && getline(line('.')-1) =~# '^\s*$'
+    execute 'norm kV'.a:forward
+  else
+    execute 'norm V'.a:forward
+  endif
 endfunction
 
 function! RubyCursorIdentifier()
@@ -241,6 +342,26 @@
   return stripped == '' ? expand("<cword>") : stripped
 endfunction
 
+function! s:gf(count,map,edit) abort
+  if getline('.') =~# '^\s*require_relative\s*\(["'']\).*\1\s*$'
+    let target = matchstr(getline('.'),'\(["'']\)\zs.\{-\}\ze\1')
+    return a:edit.' %:h/'.target.'.rb'
+  elseif getline('.') =~# '^\s*\%(require[( ]\|load[( ]\|autoload[( ]:\w\+,\)\s*\s*\%(::\)\=File\.expand_path(\(["'']\)\.\./.*\1,\s*__FILE__)\s*$'
+    let target = matchstr(getline('.'),'\(["'']\)\.\./\zs.\{-\}\ze\1')
+    return a:edit.' %:h/'.target.'.rb'
+  elseif getline('.') =~# '^\s*\%(require \|load \|autoload :\w\+,\)\s*\(["'']\).*\1\s*$'
+    let target = matchstr(getline('.'),'\(["'']\)\zs.\{-\}\ze\1')
+  else
+    let target = expand('<cfile>')
+  endif
+  let found = findfile(target, &path, a:count)
+  if found ==# ''
+    return 'norm! '.a:count.a:map
+  else
+    return a:edit.' '.fnameescape(found)
+  endif
+endfunction
+
 "
 " Instructions for enabling "matchit" support:
 "
diff --git a/runtime/indent/eruby.vim b/runtime/indent/eruby.vim
index a4de118..80cab70 100644
--- a/runtime/indent/eruby.vim
+++ b/runtime/indent/eruby.vim
@@ -1,9 +1,7 @@
 " Vim indent file
 " Language:		eRuby
 " Maintainer:		Tim Pope <vimNOSPAM@tpope.org>
-" Last Change:		2010 May 28
-" URL:			http://vim-ruby.rubyforge.org
-" Anon CVS:		See above site
+" URL:			https://github.com/vim-ruby/vim-ruby
 " Release Coordinator:	Doug Kearns <dougkearns@gmail.com>
 
 if exists("b:did_indent")
@@ -50,29 +48,32 @@
   call cursor(v:lnum,1)
   let inruby = searchpair('<%','','%>','W')
   call cursor(v:lnum,vcol)
-  if inruby && getline(v:lnum) !~ '^<%\|^\s*-\=%>'
-    let ind = GetRubyIndent()
+  if inruby && getline(v:lnum) !~ '^<%\|^\s*[-=]\=%>'
+    let ind = GetRubyIndent(v:lnum)
   else
     exe "let ind = ".b:eruby_subtype_indentexpr
   endif
   let lnum = prevnonblank(v:lnum-1)
   let line = getline(lnum)
   let cline = getline(v:lnum)
-  if cline =~# '^\s*<%-\=\s*\%(}\|end\|else\|\%(ensure\|rescue\|elsif\|when\).\{-\}\)\s*\%(-\=%>\|$\)'
+  if cline =~# '^\s*<%[-=]\=\s*\%(}\|end\|else\|\%(ensure\|rescue\|elsif\|when\).\{-\}\)\s*\%([-=]\=%>\|$\)'
     let ind = ind - &sw
   endif
-  if line =~# '\S\s*<%-\=\s*\%(}\|end\).\{-\}\s*\%(-\=%>\|$\)'
+  if line =~# '\S\s*<%[-=]\=\s*\%(}\|end\).\{-\}\s*\%([-=]\=%>\|$\)'
     let ind = ind - &sw
   endif
-  if line =~# '\%({\|\<do\)\%(\s*|[^|]*|\)\=\s*-\=%>'
+  if line =~# '\%({\|\<do\)\%(\s*|[^|]*|\)\=\s*[-=]\=%>'
     let ind = ind + &sw
-  elseif line =~# '<%-\=\s*\%(module\|class\|def\|if\|for\|while\|until\|else\|elsif\|case\|when\|unless\|begin\|ensure\|rescue\)\>.*%>'
+  elseif line =~# '<%[-=]\=\s*\%(module\|class\|def\|if\|for\|while\|until\|else\|elsif\|case\|when\|unless\|begin\|ensure\|rescue\)\>.*%>'
     let ind = ind + &sw
   endif
   if line =~# '^\s*<%[=#-]\=\s*$' && cline !~# '^\s*end\>'
     let ind = ind + &sw
   endif
-  if cline =~# '^\s*-\=%>\s*$'
+  if line !~# '^\s*<%' && line =~# '%>\s*$'
+    let ind = ind - &sw
+  endif
+  if cline =~# '^\s*[-=]\=%>\s*$'
     let ind = ind - &sw
   endif
   return ind
diff --git a/runtime/indent/falcon.vim b/runtime/indent/falcon.vim
index 46a228e..84b16d5 100644
--- a/runtime/indent/falcon.vim
+++ b/runtime/indent/falcon.vim
@@ -2,13 +2,10 @@
 " Language: Falcon
 " Maintainer: Steven Oliver <oliver.steven@gmail.com>
 " Website: https://steveno@github.com/steveno/falconpl-vim.git
-" Credits: Thanks to the ruby.vim authors, I borrow a lot!
-" Previous Maintainer: Brent A. Fulgham <bfulgham@debian.org>
-" -----------------------------------------------------------
+" Credits: This is, to a great extent, a copy n' paste of ruby.vim.
 
-"======================================
-"       SETUP
-"======================================
+" 1. Setup {{{1
+" ============
 
 " Only load this indent file when no other was loaded.
 if exists("b:did_indent")
@@ -19,7 +16,7 @@
 setlocal nosmartindent
 
 " Setup indent function and when to use it
-setlocal indentexpr=FalconGetIndent()
+setlocal indentexpr=FalconGetIndent(v:lnum)
 setlocal indentkeys=0{,0},0),0],!^F,o,O,e
 setlocal indentkeys+==~case,=~catch,=~default,=~elif,=~else,=~end,=~\"
 
@@ -31,9 +28,8 @@
 let s:cpo_save = &cpo
 set cpo&vim
 
-"======================================
-"       VARIABLES
-"======================================
+" 2. Variables {{{1
+" ============
 
 " Regex of syntax group names that are strings AND comments
 let s:syng_strcom = '\<falcon\%(String\|StringEscape\|Comment\)\>'
@@ -41,6 +37,31 @@
 " Regex of syntax group names that are strings
 let s:syng_string = '\<falcon\%(String\|StringEscape\)\>'
 
+" Regex that defines blocks.
+"
+" Note that there's a slight problem with this regex and s:continuation_regex.
+" Code like this will be matched by both:
+"
+"   method_call do |(a, b)|
+"
+" The reason is that the pipe matches a hanging "|" operator.
+"
+let s:block_regex =
+      \ '\%(\<do:\@!\>\|%\@<!{\)\s*\%(|\s*(*\s*\%([*@&]\=\h\w*,\=\s*\)\%(,\s*(*\s*[*@&]\=\h\w*\s*)*\s*\)*|\)\=\s*\%(#.*\)\=$'
+
+let s:block_continuation_regex = '^\s*[^])}\t ].*'.s:block_regex
+
+" Regex that defines continuation lines.
+" TODO: this needs to deal with if ...: and so on
+let s:continuation_regex =
+      \ '\%(%\@<![({[\\.,:*/%+]\|\<and\|\<or\|\%(<%\)\@<![=-]\|\W[|&?]\|||\|&&\)\s*\%(#.*\)\=$'
+
+" Regex that defines bracket continuations
+let s:bracket_continuation_regex = '%\@<!\%([({[]\)\s*\%(#.*\)\=$'
+
+" Regex that defines continuation lines, not including (, {, or [.
+let s:non_bracket_continuation_regex = '\%([\\.,:*/%+]\|\<and\|\<or\|\%(<%\)\@<![=-]\|\W[|&?]\|||\|&&\)\s*\%(#.*\)\=$'
+
 " Keywords to indent on
 let s:falcon_indent_keywords = '^\s*\(case\|catch\|class\|enum\|default\|elif\|else' .
     \ '\|for\|function\|if.*"[^"]*:.*"\|if \(\(:\)\@!.\)*$\|loop\|object\|select' .
@@ -49,109 +70,381 @@
 " Keywords to deindent on
 let s:falcon_deindent_keywords = '^\s*\(case\|catch\|default\|elif\|else\|end\)'
 
-"======================================
-"       FUNCTIONS
-"======================================
+" 3. Functions {{{1
+" ============
 
-" Check if the character at lnum:col is inside a string
+" Check if the character at lnum:col is inside a string, comment, or is ascii.
 function s:IsInStringOrComment(lnum, col)
     return synIDattr(synID(a:lnum, a:col, 1), 'name') =~ s:syng_strcom
 endfunction
 
-"======================================
-"       INDENT ROUTINE
-"======================================
+" Check if the character at lnum:col is inside a string.
+function s:IsInString(lnum, col)
+    return synIDattr(synID(a:lnum, a:col, 1), 'name') =~ s:syng_string
+endfunction
 
-function FalconGetIndent()
-    " Get the line to be indented
-    let cline = getline(v:lnum)
+" Check if the character at lnum:col is inside a string delimiter
+function s:IsInStringDelimiter(lnum, col)
+    return synIDattr(synID(a:lnum, a:col, 1), 'name') == 'falconStringDelimiter'
+endfunction
 
-    " Don't reindent comments on first column
-    if cline =~ '^\/\/'
-        return 0
-    endif
+" Find line above 'lnum' that isn't empty, in a comment, or in a string.
+function s:PrevNonBlankNonString(lnum)
+    let in_block = 0
+    let lnum = prevnonblank(a:lnum)
+    while lnum > 0
+	" Go in and out of blocks comments as necessary.
+	" If the line isn't empty (with opt. comment) or in a string, end search.
+	let line = getline(lnum)
+	if line =~ '^=begin'
+	    if in_block
+		let in_block = 0
+	    else
+		break
+	    endif
+	elseif !in_block && line =~ '^=end'
+	    let in_block = 1
+	elseif !in_block && line !~ '^\s*#.*$' && !(s:IsInStringOrComment(lnum, 1)
+		    \ && s:IsInStringOrComment(lnum, strlen(line)))
+	    break
+	endif
+	let lnum = prevnonblank(lnum - 1)
+    endwhile
+    return lnum
+endfunction
 
-    " Find the previous non-blank line
-    let lnum = prevnonblank(v:lnum - 1)
+" Find line above 'lnum' that started the continuation 'lnum' may be part of.
+function s:GetMSL(lnum)
+    " Start on the line we're at and use its indent.
+    let msl = a:lnum
+    let msl_body = getline(msl)
+    let lnum = s:PrevNonBlankNonString(a:lnum - 1)
+    while lnum > 0
+	" If we have a continuation line, or we're in a string, use line as MSL.
+	" Otherwise, terminate search as we have found our MSL already.
+	let line = getline(lnum)
+	
+	if s:Match(line, s:non_bracket_continuation_regex) &&
+          	\ s:Match(msl, s:non_bracket_continuation_regex)
+	    " If the current line is a non-bracket continuation and so is the
+	    " previous one, keep its indent and continue looking for an MSL.
+	    "    
+	    " Example:
+	    "   method_call one,
+	    "       two,
+	    "           three
+	    "           
+	    let msl = lnum
+	elseif s:Match(lnum, s:non_bracket_continuation_regex) &&
+		    \ (s:Match(msl, s:bracket_continuation_regex) || s:Match(msl, s:block_continuation_regex))
+	    " If the current line is a bracket continuation or a block-starter, but
+	    " the previous is a non-bracket one, respect the previous' indentation,
+	    " and stop here.
+	    " 
+	    " Example:
+	    "   method_call one,
+	    "       two {
+	    "           three
+	    "
+	    return lnum
+	elseif s:Match(lnum, s:bracket_continuation_regex) &&
+		    \ (s:Match(msl, s:bracket_continuation_regex) || s:Match(msl, s:block_continuation_regex))
+	    " If both lines are bracket continuations (the current may also be a
+	    " block-starter), use the current one's and stop here
+	    "
+	    " Example:
+	    "   method_call(
+	    "       other_method_call(
+	    "             foo
+	    return msl
+	elseif s:Match(lnum, s:block_regex) &&
+		    \ !s:Match(msl, s:continuation_regex) &&
+		    \ !s:Match(msl, s:block_continuation_regex)
+	    " If the previous line is a block-starter and the current one is
+	    " mostly ordinary, use the current one as the MSL.
+	    " 
+	    " Example:
+	    "   method_call do
+	    "       something
+	    "           something_else
+	    return msl
+	else
+	    let col = match(line, s:continuation_regex) + 1
+	    if (col > 0 && !s:IsInStringOrComment(lnum, col))
+			\ || s:IsInString(lnum, strlen(line))
+		let msl = lnum
+	    else
+		break
+	    endif
+	endif
+	
+	let msl_body = getline(msl)
+	let lnum = s:PrevNonBlankNonString(lnum - 1)
+    endwhile
+    return msl
+endfunction
+
+" Check if line 'lnum' has more opening brackets than closing ones.
+function s:ExtraBrackets(lnum)
+    let opening = {'parentheses': [], 'braces': [], 'brackets': []}
+    let closing = {'parentheses': [], 'braces': [], 'brackets': []}
+
+    let line = getline(a:lnum)
+    let pos  = match(line, '[][(){}]', 0)
+
+    " Save any encountered opening brackets, and remove them once a matching
+    " closing one has been found. If a closing bracket shows up that doesn't
+    " close anything, save it for later.
+    while pos != -1
+	if !s:IsInStringOrComment(a:lnum, pos + 1)
+	    if line[pos] == '('
+		call add(opening.parentheses, {'type': '(', 'pos': pos})
+	    elseif line[pos] == ')'
+		if empty(opening.parentheses)
+		    call add(closing.parentheses, {'type': ')', 'pos': pos})
+		else
+		    let opening.parentheses = opening.parentheses[0:-2]
+		endif
+	    elseif line[pos] == '{'
+		call add(opening.braces, {'type': '{', 'pos': pos})
+	    elseif line[pos] == '}'
+		if empty(opening.braces)
+		    call add(closing.braces, {'type': '}', 'pos': pos})
+		else
+		    let opening.braces = opening.braces[0:-2]
+		endif
+	    elseif line[pos] == '['
+		call add(opening.brackets, {'type': '[', 'pos': pos})
+	    elseif line[pos] == ']'
+		if empty(opening.brackets)
+		    call add(closing.brackets, {'type': ']', 'pos': pos})
+		else
+		    let opening.brackets = opening.brackets[0:-2]
+		endif
+	    endif
+	endif
+	
+	let pos = match(line, '[][(){}]', pos + 1)
+    endwhile
+
+    " Find the rightmost brackets, since they're the ones that are important in
+    " both opening and closing cases
+    let rightmost_opening = {'type': '(', 'pos': -1}
+    let rightmost_closing = {'type': ')', 'pos': -1}
+
+    for opening in opening.parentheses + opening.braces + opening.brackets
+	if opening.pos > rightmost_opening.pos
+	    let rightmost_opening = opening
+	endif
+    endfor
+
+    for closing in closing.parentheses + closing.braces + closing.brackets
+	if closing.pos > rightmost_closing.pos
+	    let rightmost_closing = closing
+	endif
+    endfor
+
+    return [rightmost_opening, rightmost_closing]
+endfunction
+
+function s:Match(lnum, regex)
+    let col = match(getline(a:lnum), '\C'.a:regex) + 1
+    return col > 0 && !s:IsInStringOrComment(a:lnum, col) ? col : 0
+endfunction
+
+function s:MatchLast(lnum, regex)
+    let line = getline(a:lnum)
+    let col = match(line, '.*\zs' . a:regex)
+    while col != -1 && s:IsInStringOrComment(a:lnum, col)
+	let line = strpart(line, 0, col)
+	let col = match(line, '.*' . a:regex)
+    endwhile
+    return col + 1
+endfunction
+
+" 4. FalconGetIndent Routine {{{1
+" ============
+
+function FalconGetIndent(...)
+    " For the current line, use the first argument if given, else v:lnum
+    let clnum = a:0 ? a:1 : v:lnum
 
     " Use zero indent at the top of the file
-    if lnum == 0
+    if clnum == 0
         return 0
     endif
 
-    let prevline=getline(lnum)
+    let line = getline(clnum)
+    let ind = -1
+
+    " If we got a closing bracket on an empty line, find its match and indent
+    " according to it.  For parentheses we indent to its column - 1, for the
+    " others we indent to the containing line's MSL's level.  Return -1 if fail.
+    let col = matchend(line, '^\s*[]})]')
+    if col > 0 && !s:IsInStringOrComment(clnum, col)
+	call cursor(clnum, col)
+	let bs = strpart('(){}[]', stridx(')}]', line[col - 1]) * 2, 2)
+	if searchpair(escape(bs[0], '\['), '', bs[1], 'bW', s:skip_expr) > 0
+	    if line[col-1]==')' && col('.') != col('$') - 1
+		let ind = virtcol('.') - 1
+	    else
+		let ind = indent(s:GetMSL(line('.')))
+	    endif
+	endif
+	return ind
+    endif
+
+    " If we have a deindenting keyword, find its match and indent to its level.
+    " TODO: this is messy
+    if s:Match(clnum, s:falcon_deindent_keywords)
+	call cursor(clnum, 1)
+	if searchpair(s:end_start_regex, s:end_middle_regex, s:end_end_regex, 'bW',
+		    \ s:end_skip_expr) > 0
+	    let msl  = s:GetMSL(line('.'))
+	    let line = getline(line('.'))
+
+	    if strpart(line, 0, col('.') - 1) =~ '=\s*$' &&
+			\ strpart(line, col('.') - 1, 2) !~ 'do'
+		let ind = virtcol('.') - 1
+	    elseif getline(msl) =~ '=\s*\(#.*\)\=$'
+		let ind = indent(line('.'))
+	    else
+		let ind = indent(msl)
+	    endif
+	endif
+	return ind
+    endif
+
+    " If we are in a multi-line string or line-comment, don't do anything to it.
+    if s:IsInString(clnum, matchend(line, '^\s*') + 1)
+	return indent('.')
+    endif
+
+    " Find a non-blank, non-multi-line string line above the current line.
+    let lnum = s:PrevNonBlankNonString(clnum - 1)
+
+    " If the line is empty and inside a string, use the previous line.
+    if line =~ '^\s*$' && lnum != prevnonblank(clnum - 1)
+	return indent(prevnonblank(clnum))
+    endif
+
+    " At the start of the file use zero indent.
+    if lnum == 0
+	return 0
+    endif
+
+    " Set up variables for the previous line.
+    let line = getline(lnum)
     let ind = indent(lnum)
-    let chg = 0
 
-    " If we are in a multi-line string or line-comment, don't do anything
-    if s:IsInStringOrComment(v:lnum, matchend(cline, '^\s*') + 1 )
-        return indent('.')
+    " If the previous line ended with a block opening, add a level of indent.
+    if s:Match(lnum, s:block_regex)
+	return indent(s:GetMSL(lnum)) + &sw
     endif
 
-    " If the start of the line equals a double quote, then indent to the
-    " previous lines first double quote
-    if cline =~? '^\s*"'
-        let chg = chg + &sw
+    " If it contained hanging closing brackets, find the rightmost one, find its
+    " match and indent according to that.
+    if line =~ '[[({]' || line =~ '[])}]\s*\%(#.*\)\=$'
+	let [opening, closing] = s:ExtraBrackets(lnum)
+
+	if opening.pos != -1
+	    if opening.type == '(' && searchpair('(', '', ')', 'bW', s:skip_expr) > 0
+		if col('.') + 1 == col('$')
+		    return ind + &sw
+		else
+		    return virtcol('.')
+		endif
+	    else
+		let nonspace = matchend(line, '\S', opening.pos + 1) - 1
+		return nonspace > 0 ? nonspace : ind + &sw
+	    endif
+	elseif closing.pos != -1
+	    call cursor(lnum, closing.pos + 1)
+	    normal! %
+
+	    if s:Match(line('.'), s:falcon_indent_keywords)
+		return indent('.') + &sw
+	    else
+		return indent('.')
+	    endif
+	else
+	    call cursor(clnum, vcol)
+	end
     endif
 
-    " If previous line started with a double quote and this one
-    " doesn't, unindent
-    if prevline =~? '^\s*"' && cline =~? '^\s*'
-        let chg = chg - &sw
+    " If the previous line ended with an "end", match that "end"s beginning's
+    " indent.
+    let col = s:Match(lnum, '\%(^\|[^.:@$]\)\<end\>\s*\%(#.*\)\=$')
+    if col > 0
+	call cursor(lnum, col)
+	if searchpair(s:end_start_regex, '', s:end_end_regex, 'bW',
+		    \ s:end_skip_expr) > 0
+	    let n = line('.')
+	    let ind = indent('.')
+	    let msl = s:GetMSL(n)
+	    if msl != n
+		let ind = indent(msl)
+	    end
+	    return ind
+	endif
+    end
+
+    let col = s:Match(lnum, s:falcon_indent_keywords)
+    if col > 0
+	call cursor(lnum, col)
+	let ind = virtcol('.') - 1 + &sw
+	" TODO: make this better (we need to count them) (or, if a searchpair
+	" fails, we know that something is lacking an end and thus we indent a
+	" level
+	if s:Match(lnum, s:end_end_regex)
+	    let ind = indent('.')
+	endif
+	return ind
     endif
 
-    " Indent if proper keyword
-    if prevline =~? s:falcon_indent_keywords
-        let chg = &sw
-    " If previous line opened a parenthesis, and did not close it, indent
-    elseif prevline =~ '^.*(\s*[^)]*\((.*)\)*[^)]*$'
-        " Make sure this isn't just a function split between two lines
-        if prevline =~ ',\s*$'
-            return indent(prevnonblank(v:lnum - 1)) + &sw
-        else
-            return match(prevline, '(.*\((.*)\|[^)]\)*.*$') + 1
-        endif
-    elseif prevline =~ '^[^(]*)\s*$'
-        " This line closes a parenthesis. Finds opening.
-        let curr_line = prevnonblank(lnum - 1)
-        while curr_line >= 0
-            let str = getline(curr_line)
-            if str !~ '^.*(\s*[^)]*\((.*)\)*[^)]*$'
-                let curr_line = prevnonblank(curr_line - 1)
-            else
-                break
-            endif
-        endwhile
-        if curr_line < 0
-            return -1
-        endif
-        let ind = indent(curr_line)
+    " Set up variables to use and search for MSL to the previous line.
+    let p_lnum = lnum
+    let lnum = s:GetMSL(lnum)
+
+    " If the previous line wasn't a MSL and is continuation return its indent.
+    " TODO: the || s:IsInString() thing worries me a bit.
+    if p_lnum != lnum
+	if s:Match(p_lnum, s:non_bracket_continuation_regex) || s:IsInString(p_lnum,strlen(line))
+	    return ind
+	endif
     endif
 
-    " If previous line ends in a semi-colon reset indent to previous
-    " lines setting
-    if prevline =~? ';\s*$' && prevnonblank(prevline) =~? ',\s*$'
-        let chg = chg - (2 * &sw)
+    " Set up more variables, now that we know we wasn't continuation bound.
+    let line = getline(lnum)
+    let msl_ind = indent(lnum)
+
+    " If the MSL line had an indenting keyword in it, add a level of indent.
+    " TODO: this does not take into account contrived things such as
+    " module Foo; class Bar; end
+    if s:Match(lnum, s:falcon_indent_keywords)
+	let ind = msl_ind + &sw
+	if s:Match(lnum, s:end_end_regex)
+	    let ind = ind - &sw
+	endif
+	return ind
     endif
 
-    " If previous line ended in a comma, indent again
-    if prevline =~? ',\s*$'
-        let chg = chg + &sw
+    " If the previous line ended with [*+/.,-=], but wasn't a block ending or a
+    " closing bracket, indent one extra level.
+    if s:Match(lnum, s:non_bracket_continuation_regex) && !s:Match(lnum, '^\s*\([\])}]\|end\)')
+	if lnum == p_lnum
+	    let ind = msl_ind + &sw
+	else
+	    let ind = msl_ind
+	endif
+	return ind
     endif
 
-    " If previous line ended in a =>, indent again
-    if prevline =~? '=>\s*$'
-        let chg = chg + &sw
-    endif
-
-    " Deindent on proper keywords
-    if cline =~? s:falcon_deindent_keywords
-        let chg = chg - &sw
-    endif
-
-    return ind + chg
+  return ind
 endfunction
 
+" }}}1
+
 let &cpo = s:cpo_save
 unlet s:cpo_save
 
diff --git a/runtime/indent/html.vim b/runtime/indent/html.vim
index 6f016ad..d9a3d4f 100644
--- a/runtime/indent/html.vim
+++ b/runtime/indent/html.vim
@@ -1,242 +1,492 @@
-" Description:	html indenter
-" Author:	Johannes Zellner <johannes@zellner.org>
-" Last Change:	Mo, 05 Jun 2006 22:32:41 CEST
-" 		Restoring 'cpo' and 'ic' added by Bram 2006 May 5
-" Globals:	g:html_indent_tags	   -- indenting tags
-"		g:html_indent_strict       -- inhibit 'O O' elements
-"		g:html_indent_strict_table -- inhibit 'O -' elements
+" Vim indent script for HTML
+" General: "{{{
+" File:		html.vim (Vimscript #2075)
+" Author:	Andy Wokula <anwoku@yahoo.de>
+" Last Change:	2013 Jun 12
+" Rev Days:     9
+" Version:	0.8
+" Vim Version:	Vim7
+" Description:
+"   Improved version of the distributed html indent script, faster on a
+"   range of lines.
+"
+" Credits:
+"	indent/html.vim (2006 Jun 05) from J. Zellner
+"	indent/css.vim (2006 Dec 20) from N. Weibull
+"
+" History:
+" 2011 Sep 09	added HTML5 tags (thx to J. Zuckerman)
+" }}}
 
-" Only load this indent file when no other was loaded.
+" Init Folklore, check user settings (2nd time ++) "{{{
 if exists("b:did_indent")
     finish
 endif
 let b:did_indent = 1
 
+setlocal indentexpr=HtmlIndent()
+setlocal indentkeys=o,O,<Return>,<>>,{,},!^F
 
-" [-- local settings (must come before aborting the script) --]
-setlocal indentexpr=HtmlIndentGet(v:lnum)
-setlocal indentkeys=o,O,*<Return>,<>>,{,}
+let b:indent = {"lnum": -1}
+let b:undo_indent = "set inde< indk<| unlet b:indent"
 
-
-if exists('g:html_indent_tags')
-    unlet g:html_indent_tags
+" Load Once:
+if exists("*HtmlIndent")
+    call HtmlIndent_CheckUserSettings()
+    finish
 endif
 
-" [-- helper function to assemble tag list --]
-fun! <SID>HtmlIndentPush(tag)
-    if exists('g:html_indent_tags')
-	let g:html_indent_tags = g:html_indent_tags.'\|'.a:tag
-    else
-	let g:html_indent_tags = a:tag
-    endif
-endfun
-
-
-" [-- <ELEMENT ? - - ...> --]
-call <SID>HtmlIndentPush('a')
-call <SID>HtmlIndentPush('abbr')
-call <SID>HtmlIndentPush('acronym')
-call <SID>HtmlIndentPush('address')
-call <SID>HtmlIndentPush('b')
-call <SID>HtmlIndentPush('bdo')
-call <SID>HtmlIndentPush('big')
-call <SID>HtmlIndentPush('blockquote')
-call <SID>HtmlIndentPush('button')
-call <SID>HtmlIndentPush('caption')
-call <SID>HtmlIndentPush('center')
-call <SID>HtmlIndentPush('cite')
-call <SID>HtmlIndentPush('code')
-call <SID>HtmlIndentPush('colgroup')
-call <SID>HtmlIndentPush('del')
-call <SID>HtmlIndentPush('dfn')
-call <SID>HtmlIndentPush('dir')
-call <SID>HtmlIndentPush('div')
-call <SID>HtmlIndentPush('dl')
-call <SID>HtmlIndentPush('em')
-call <SID>HtmlIndentPush('fieldset')
-call <SID>HtmlIndentPush('font')
-call <SID>HtmlIndentPush('form')
-call <SID>HtmlIndentPush('frameset')
-call <SID>HtmlIndentPush('h1')
-call <SID>HtmlIndentPush('h2')
-call <SID>HtmlIndentPush('h3')
-call <SID>HtmlIndentPush('h4')
-call <SID>HtmlIndentPush('h5')
-call <SID>HtmlIndentPush('h6')
-call <SID>HtmlIndentPush('i')
-call <SID>HtmlIndentPush('iframe')
-call <SID>HtmlIndentPush('ins')
-call <SID>HtmlIndentPush('kbd')
-call <SID>HtmlIndentPush('label')
-call <SID>HtmlIndentPush('legend')
-call <SID>HtmlIndentPush('map')
-call <SID>HtmlIndentPush('menu')
-call <SID>HtmlIndentPush('noframes')
-call <SID>HtmlIndentPush('noscript')
-call <SID>HtmlIndentPush('object')
-call <SID>HtmlIndentPush('ol')
-call <SID>HtmlIndentPush('optgroup')
-" call <SID>HtmlIndentPush('pre')
-call <SID>HtmlIndentPush('q')
-call <SID>HtmlIndentPush('s')
-call <SID>HtmlIndentPush('samp')
-call <SID>HtmlIndentPush('script')
-call <SID>HtmlIndentPush('select')
-call <SID>HtmlIndentPush('small')
-call <SID>HtmlIndentPush('span')
-call <SID>HtmlIndentPush('strong')
-call <SID>HtmlIndentPush('style')
-call <SID>HtmlIndentPush('sub')
-call <SID>HtmlIndentPush('sup')
-call <SID>HtmlIndentPush('table')
-call <SID>HtmlIndentPush('textarea')
-call <SID>HtmlIndentPush('title')
-call <SID>HtmlIndentPush('tt')
-call <SID>HtmlIndentPush('u')
-call <SID>HtmlIndentPush('ul')
-call <SID>HtmlIndentPush('var')
-
-
-" [-- <ELEMENT ? O O ...> --]
-if !exists('g:html_indent_strict')
-    call <SID>HtmlIndentPush('body')
-    call <SID>HtmlIndentPush('head')
-    call <SID>HtmlIndentPush('html')
-    call <SID>HtmlIndentPush('tbody')
-endif
-
-
-" [-- <ELEMENT ? O - ...> --]
-if !exists('g:html_indent_strict_table')
-    call <SID>HtmlIndentPush('th')
-    call <SID>HtmlIndentPush('td')
-    call <SID>HtmlIndentPush('tr')
-    call <SID>HtmlIndentPush('tfoot')
-    call <SID>HtmlIndentPush('thead')
-endif
-
-delfun <SID>HtmlIndentPush
-
 let s:cpo_save = &cpo
 set cpo-=C
+"}}}
 
-" [-- count indent-increasing tags of line a:lnum --]
-fun! <SID>HtmlIndentOpen(lnum, pattern)
-    let s = substitute('x'.getline(a:lnum),
-    \ '.\{-}\(\(<\)\('.a:pattern.'\)\>\)', "\1", 'g')
-    let s = substitute(s, "[^\1].*$", '', '')
-    return strlen(s)
-endfun
-
-" [-- count indent-decreasing tags of line a:lnum --]
-fun! <SID>HtmlIndentClose(lnum, pattern)
-    let s = substitute('x'.getline(a:lnum),
-    \ '.\{-}\(\(<\)/\('.a:pattern.'\)\>>\)', "\1", 'g')
-    let s = substitute(s, "[^\1].*$", '', '')
-    return strlen(s)
-endfun
-
-" [-- count indent-increasing '{' of (java|css) line a:lnum --]
-fun! <SID>HtmlIndentOpenAlt(lnum)
-    return strlen(substitute(getline(a:lnum), '[^{]\+', '', 'g'))
-endfun
-
-" [-- count indent-decreasing '}' of (java|css) line a:lnum --]
-fun! <SID>HtmlIndentCloseAlt(lnum)
-    return strlen(substitute(getline(a:lnum), '[^}]\+', '', 'g'))
-endfun
-
-" [-- return the sum of indents respecting the syntax of a:lnum --]
-fun! <SID>HtmlIndentSum(lnum, style)
-    if a:style == match(getline(a:lnum), '^\s*</')
-	if a:style == match(getline(a:lnum), '^\s*</\<\('.g:html_indent_tags.'\)\>')
-	    let open = <SID>HtmlIndentOpen(a:lnum, g:html_indent_tags)
-	    let close = <SID>HtmlIndentClose(a:lnum, g:html_indent_tags)
-	    if 0 != open || 0 != close
-		return open - close
-	    endif
-	endif
+func! HtmlIndent_CheckUserSettings() "{{{
+    if exists("g:html_indent_inctags")
+	call s:AddITags(split(g:html_indent_inctags, ","))
     endif
-    if '' != &syntax &&
-	\ synIDattr(synID(a:lnum, 1, 1), 'name') =~ '\(css\|java\).*' &&
-	\ synIDattr(synID(a:lnum, strlen(getline(a:lnum)), 1), 'name')
-	\ =~ '\(css\|java\).*'
-	if a:style == match(getline(a:lnum), '^\s*}')
-	    return <SID>HtmlIndentOpenAlt(a:lnum) - <SID>HtmlIndentCloseAlt(a:lnum)
-	endif
-    endif
-    return 0
-endfun
-
-fun! HtmlIndentGet(lnum)
-    " Find a non-empty line above the current line.
-    let lnum = prevnonblank(a:lnum - 1)
-
-    " Hit the start of the file, use zero indent.
-    if lnum == 0
-	return 0
+    if exists("g:html_indent_autotags")
+	call s:RemoveITags(split(g:html_indent_autotags, ","))
     endif
 
-    let restore_ic = &ic
-    setlocal ic " ignore case
+    let indone = {"zero": 0
+		\,"auto": "indent(prevnonblank(v:lnum-1))"
+		\,"inc": "b:indent.blocktagind + &shiftwidth"}
+    if exists("g:html_indent_script1")
+	let s:js1indent = get(indone, g:html_indent_script1, indone.zero)
+    endif
+    if exists("g:html_indent_style1")
+	let s:css1indent = get(indone, g:html_indent_style1, indone.zero)
+    endif
+endfunc "}}}
 
-    " [-- special handling for <pre>: no indenting --]
-    if getline(a:lnum) =~ '\c</pre>'
-		\ || 0 < searchpair('\c<pre>', '', '\c</pre>', 'nWb')
-		\ || 0 < searchpair('\c<pre>', '', '\c</pre>', 'nW')
-	" we're in a line with </pre> or inside <pre> ... </pre>
-	if restore_ic == 0
-	  setlocal noic
+" Init Script Vars  "{{{
+let s:usestate = 1
+let s:css1indent = 0
+let s:js1indent = 0
+" not to be changed:
+let s:endtags = [0,0,0,0,0,0,0,0]   " some places unused
+let s:newstate = {}
+let s:countonly = 0
+ "}}}
+func! s:AddITags(taglist) "{{{
+    for itag in a:taglist
+	let s:indent_tags[itag] = 1
+	let s:indent_tags['/'.itag] = -1
+    endfor
+endfunc "}}}
+func! s:AddBlockTag(tag, id, ...) "{{{
+    if !(a:id >= 2 && a:id < 2+len(s:endtags))
+	return
+    endif
+    let s:indent_tags[a:tag] = a:id
+    if a:0 == 0
+	let s:indent_tags['/'.a:tag] = -a:id
+	let s:endtags[a:id-2] = "</".a:tag.">"
+    else
+	let s:indent_tags[a:1] = -a:id
+	let s:endtags[a:id-2] = a:1
+    endif
+endfunc "}}}
+func! s:RemoveITags(taglist) "{{{
+    " remove itags (protect blocktags from being removed)
+    for itag in a:taglist
+	if !has_key(s:indent_tags, itag) || s:indent_tags[itag] != 1
+	    continue
 	endif
+	unlet s:indent_tags[itag]
+	if itag =~ '^\w\+$'
+	    unlet s:indent_tags["/".itag]
+	endif
+    endfor
+endfunc "}}}
+" Add Indent Tags: {{{
+if !exists("s:indent_tags")
+    let s:indent_tags = {}
+endif
+
+" old tags:
+call s:AddITags(['a', 'abbr', 'acronym', 'address', 'b', 'bdo', 'big',
+    \ 'blockquote', 'button', 'caption', 'center', 'cite', 'code', 'colgroup',
+    \ 'del', 'dfn', 'dir', 'div', 'dl', 'em', 'fieldset', 'font', 'form',
+    \ 'frameset', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'i', 'iframe', 'ins', 'kbd',
+    \ 'label', 'legend', 'map', 'menu', 'noframes', 'noscript', 'object', 'ol',
+    \ 'optgroup', 'q', 's', 'samp', 'select', 'small', 'span', 'strong', 'sub',
+    \ 'sup', 'table', 'textarea', 'title', 'tt', 'u', 'ul', 'var', 'th', 'td',
+    \ 'tr', 'tfoot', 'thead'])
+
+" tags added 2011 Sep 09 (especially HTML5 tags):
+call s:AddITags(['area', 'article', 'aside', 'audio', 'bdi', 'canvas',
+    \ 'command', 'datalist', 'details', 'embed', 'figure', 'footer',
+    \ 'header', 'group', 'keygen', 'mark', 'math', 'meter', 'nav', 'output',
+    \ 'progress', 'ruby', 'section', 'svg', 'texture', 'time', 'video',
+    \ 'wbr', 'text'])
+
+"}}}
+" Add Block Tags: contain alien content "{{{
+call s:AddBlockTag('pre', 2)
+call s:AddBlockTag('script', 3)
+call s:AddBlockTag('style', 4)
+call s:AddBlockTag('<!--', 5, '-->')
+"}}}
+
+func! s:CountITags(...) "{{{
+
+    " relative indent steps for current line [unit &sw]:
+    let s:curind = 0
+    " relative indent steps for next line [unit &sw]:
+    let s:nextrel = 0
+
+    if a:0==0
+	let s:block = s:newstate.block
+	let tmpline = substitute(s:curline, '<\zs\/\=\w\+\>\|<!--\|-->', '\=s:CheckTag(submatch(0))', 'g')
+	if s:block == 3
+	    let s:newstate.scripttype = s:GetScriptType(matchstr(tmpline, '\C.*<SCRIPT\>\zs[^>]*'))
+	endif
+	let s:newstate.block = s:block
+    else
+	let s:block = 0		" assume starting outside of a block
+	let s:countonly = 1	" don't change state
+	let tmpline = substitute(s:altline, '<\zs\/\=\w\+\>\|<!--\|-->', '\=s:CheckTag(submatch(0))', 'g')
+	let s:countonly = 0
+    endif
+endfunc "}}}
+func! s:CheckTag(itag) "{{{
+    " "tag" or "/tag" or "<!--" or "-->"
+    let ind = get(s:indent_tags, a:itag)
+    if ind == -1
+	" closing tag
+	if s:block != 0
+	    " ignore itag within a block
+	    return "foo"
+	endif
+	if s:nextrel == 0
+	    let s:curind -= 1
+	else
+	    let s:nextrel -= 1
+	endif
+	" if s:curind >= 1
+	"     let s:curind -= 1
+	" else
+	"     let s:nextrel -= 1
+	" endif
+    elseif ind == 1
+	" opening tag
+	if s:block != 0
+	    return "foo"
+	endif
+	let s:nextrel += 1
+    elseif ind != 0
+	" block-tag (opening or closing)
+	return s:Blocktag(a:itag, ind)
+    endif
+    " else ind==0 (other tag found): keep indent
+    return "foo"   " no matter
+endfunc "}}}
+func! s:Blocktag(blocktag, ind) "{{{
+    if a:ind > 0
+	" a block starts here
+	if s:block != 0
+	    " already in a block (nesting) - ignore
+	    " especially ignore comments after other blocktags
+	    return "foo"
+	endif
+	let s:block = a:ind		" block type
+	if s:countonly
+	    return "foo"
+	endif
+	let s:newstate.blocklnr = v:lnum
+	" save allover indent for the endtag
+	let s:newstate.blocktagind = b:indent.baseindent + (s:nextrel + s:curind) * &shiftwidth
+	if a:ind == 3
+	    return "SCRIPT"    " all except this must be lowercase
+	    " line is to be checked again for the type attribute
+	endif
+    else
+	let s:block = 0
+	" we get here if starting and closing block-tag on same line
+    endif
+    return "foo"
+endfunc "}}}
+func! s:GetScriptType(str) "{{{
+    if a:str == "" || a:str =~ "java"
+	return "javascript"
+    else
+	return ""
+    endif
+endfunc "}}}
+
+func! s:FreshState(lnum) "{{{
+    " Look back in the file (lines 1 to a:lnum-1) to calc a state for line
+    " a:lnum.  A state is to know ALL relevant details about the lines
+    " 1..a:lnum-1, initial calculating (here!) can be slow, but updating is
+    " fast (incremental).
+    " State:
+    "	lnum		last indented line == prevnonblank(a:lnum - 1)
+    "	block = 0	a:lnum located within special tag: 0:none, 2:<pre>,
+    "			3:<script>, 4:<style>, 5:<!--
+    "	baseindent	use this indent for line a:lnum as a start - kind of
+    "			autoindent (if block==0)
+    "	scripttype = ''	type attribute of a script tag (if block==3)
+    "	blocktagind	indent for current opening (get) and closing (set)
+    "			blocktag (if block!=0)
+    "	blocklnr	lnum of starting blocktag (if block!=0)
+    "	inattr		line {lnum} starts with attributes of a tag
+    let state = {}
+    let state.lnum = prevnonblank(a:lnum - 1)
+    let state.scripttype = ""
+    let state.blocktagind = -1
+    let state.block = 0
+    let state.baseindent = 0
+    let state.blocklnr = 0
+    let state.inattr = 0
+
+    if state.lnum == 0
+	return state
+    endif
+
+    " Heuristic:
+    " remember startline state.lnum
+    " look back for <pre, </pre, <script, </script, <style, </style tags
+    " remember stopline
+    " if opening tag found,
+    "	assume a:lnum within block
+    " else
+    "	look back in result range (stopline, startline) for comment
+    "	    \ delimiters (<!--, -->)
+    "	if comment opener found,
+    "	    assume a:lnum within comment
+    "	else
+    "	    assume usual html for a:lnum
+    "	    if a:lnum-1 has a closing comment
+    "		look back to get indent of comment opener
+    " FI
+
+    " look back for blocktag
+    call cursor(a:lnum, 1)
+    let [stopline, stopcol] = searchpos('\c<\zs\/\=\%(pre\>\|script\>\|style\>\)', "bW")
+    " fugly ... why isn't there searchstr()
+    let tagline = tolower(getline(stopline))
+    let blocktag = matchstr(tagline, '\/\=\%(pre\>\|script\>\|style\>\)', stopcol-1)
+    if stopline > 0 && blocktag[0] != "/"
+	" opening tag found, assume a:lnum within block
+	let state.block = s:indent_tags[blocktag]
+	if state.block == 3
+	    let state.scripttype = s:GetScriptType(matchstr(tagline, '\>[^>]*', stopcol))
+	endif
+	let state.blocklnr = stopline
+	" check preceding tags in the line:
+	let s:altline = tagline[: stopcol-2]
+	call s:CountITags(1)
+	let state.blocktagind = indent(stopline) + (s:curind + s:nextrel) * &shiftwidth
+	return state
+    elseif stopline == state.lnum
+	" handle special case: previous line (= state.lnum) contains a
+	" closing blocktag which is preceded by line-noise;
+	" blocktag == "/..."
+	let swendtag = match(tagline, '^\s*</') >= 0
+	if !swendtag
+	    let [bline, bcol] = searchpos('<'.blocktag[1:].'\>', "bW")
+	    let s:altline = tolower(getline(bline)[: bcol-2])
+	    call s:CountITags(1)
+	    let state.baseindent = indent(bline) + (s:nextrel+s:curline) * &shiftwidth
+	    return state
+	endif
+    endif
+
+    " else look back for comment
+    call cursor(a:lnum, 1)
+    let [comline, comcol, found] = searchpos('\(<!--\)\|-->', 'bpW', stopline)
+    if found == 2
+	" comment opener found, assume a:lnum within comment
+	let state.block = 5
+	let state.blocklnr = comline
+	" check preceding tags in the line:
+	let s:altline = tolower(getline(comline)[: comcol-2])
+	call s:CountITags(1)
+	let state.blocktagind = indent(comline) + (s:curind + s:nextrel) * &shiftwidth
+	return state
+    endif
+
+    " else within usual html
+    let s:altline = tolower(getline(state.lnum))
+    " check a:lnum-1 for closing comment (we need indent from the opening line)
+    let comcol = stridx(s:altline, '-->')
+    if comcol >= 0
+	call cursor(state.lnum, comcol+1)
+	let [comline, comcol] = searchpos('<!--', 'bW')
+	if comline == state.lnum
+	    let s:altline = s:altline[: comcol-2]
+	else
+	    let s:altline = tolower(getline(comline)[: comcol-2])
+	endif
+	call s:CountITags(1)
+	let state.baseindent = indent(comline) + (s:nextrel+s:curline) * &shiftwidth
+	return state
+	" TODO check tags that follow "-->"
+    endif
+
+    " else no comments
+    call s:CountITags(1)
+    let state.baseindent = indent(state.lnum) + s:nextrel * &shiftwidth
+    " line starts with end tag
+    let swendtag = match(s:altline, '^\s*</') >= 0
+    if !swendtag
+	let state.baseindent += s:curind * &shiftwidth
+    endif
+    return state
+endfunc "}}}
+
+func! s:Alien2() "{{{
+    " <pre> block
+    return -1
+endfunc "}}}
+func! s:Alien3() "{{{
+    " <script> javascript
+    if prevnonblank(v:lnum-1) == b:indent.blocklnr
+	" indent for the first line after <script>
+	return eval(s:js1indent)
+    endif
+    if b:indent.scripttype == "javascript"
+	return cindent(v:lnum)
+    else
 	return -1
     endif
+endfunc "}}}
+func! s:Alien4() "{{{
+    " <style>
+    if prevnonblank(v:lnum-1) == b:indent.blocklnr
+	" indent for first content line
+	return eval(s:css1indent)
+    endif
+    return s:CSSIndent()
+endfunc
 
-    " [-- special handling for <javascript>: use cindent --]
-    let js = '<script.*type\s*=\s*.*java'
-
-    """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-    " by Tye Zdrojewski <zdro@yahoo.com>, 05 Jun 2006
-    " ZDR: This needs to be an AND (we are 'after the start of the pair' AND
-    "      we are 'before the end of the pair').  Otherwise, indentation
-    "      before the start of the script block will be affected; the end of
-    "      the pair will still match if we are before the beginning of the
-    "      pair.
-    "
-    if   0 < searchpair(js, '', '</script>', 'nWb')
-    \ && 0 < searchpair(js, '', '</script>', 'nW')
-	" we're inside javascript
-	if getline(lnum) !~ js && getline(a:lnum) != '</script>'
-	    if restore_ic == 0
-	      setlocal noic
+func! s:CSSIndent() "{{{
+    " adopted $VIMRUNTIME/indent/css.vim
+    if getline(v:lnum) =~ '^\s*[*}]'
+	return cindent(v:lnum)
+    endif
+    let minline = b:indent.blocklnr
+    let pnum = s:css_prevnoncomment(v:lnum - 1, minline)
+    if pnum <= minline
+	" < is to catch errors
+	" indent for first content line after comments
+	return eval(s:css1indent)
+    endif
+    let ind = indent(pnum) + s:css_countbraces(pnum, 1) * &sw
+    let pline = getline(pnum)
+    if pline =~ '}\s*$'
+	let ind -= (s:css_countbraces(pnum, 0) - (pline =~ '^\s*}')) * &sw
+    endif
+    return ind
+endfunc "}}}
+func! s:css_prevnoncomment(lnum, stopline) "{{{
+    " caller starts from a line a:lnum-1 that is not a comment
+    let lnum = prevnonblank(a:lnum)
+    let ccol = match(getline(lnum), '\*/')
+    if ccol < 0
+	return lnum
+    endif
+    call cursor(lnum, ccol+1)
+    let lnum = search('/\*', 'bW', a:stopline)
+    if indent(".") == virtcol(".")-1
+	return prevnonblank(lnum-1)
+    else
+	return lnum
+    endif
+endfunc "}}}
+func! s:css_countbraces(lnum, count_open) "{{{
+    let brs = substitute(getline(a:lnum),'[''"].\{-}[''"]\|/\*.\{-}\*/\|/\*.*$\|[^{}]','','g')
+    let n_open = 0
+    let n_close = 0
+    for brace in split(brs, '\zs')
+	if brace == "{"
+	    let n_open += 1
+	elseif brace == "}"
+	    if n_open > 0
+		let n_open -= 1
+	    else
+		let n_close += 1
 	    endif
-	    return cindent(a:lnum)
 	endif
+    endfor
+    return a:count_open ? n_open : n_close
+endfunc "}}}
+
+"}}}
+func! s:Alien5() "{{{
+    " <!-- -->
+    return -1
+endfunc "}}}
+
+func! HtmlIndent() "{{{
+    let s:curline = tolower(getline(v:lnum))
+
+    let s:newstate = {}
+    let s:newstate.lnum = v:lnum
+
+    " is the first non-blank in the line the start of a tag?
+    let swendtag = match(s:curline, '^\s*</') >= 0
+
+    if prevnonblank(v:lnum-1) == b:indent.lnum && s:usestate
+	" use state (continue from previous line)
+    else
+	" start over (know nothing)
+	let b:indent = s:FreshState(v:lnum)
     endif
 
-    if getline(lnum) =~ '\c</pre>'
-	" line before the current line a:lnum contains
-	" a closing </pre>. --> search for line before
-	" starting <pre> to restore the indent.
-	let preline = prevnonblank(search('\c<pre>', 'bW') - 1)
-	if preline > 0
-	    if restore_ic == 0
-	      setlocal noic
+    if b:indent.block >= 2
+	" within block
+	let endtag = s:endtags[b:indent.block-2]
+	let blockend = stridx(s:curline, endtag)
+	if blockend >= 0
+	    " block ends here
+	    let s:newstate.block = 0
+	    " calc indent for REST OF LINE (may start more blocks):
+	    let s:curline = strpart(s:curline, blockend+strlen(endtag))
+	    call s:CountITags()
+	    if swendtag && b:indent.block != 5
+		let indent = b:indent.blocktagind + s:curind * &shiftwidth
+		let s:newstate.baseindent = indent + s:nextrel * &shiftwidth
+	    else
+		let indent = s:Alien{b:indent.block}()
+		let s:newstate.baseindent = b:indent.blocktagind + s:nextrel * &shiftwidth
 	    endif
-	    return indent(preline)
+	    call extend(b:indent, s:newstate, "force")
+	    return indent
+	else
+	    " block continues
+	    " indent this line with alien method
+	    let indent = s:Alien{b:indent.block}()
+	    call extend(b:indent, s:newstate, "force")
+	    return indent
 	endif
+    else
+	" not within a block - within usual html
+	" if < 2 then always 0
+	let s:newstate.block = b:indent.block
+	call s:CountITags()
+	if swendtag
+	    let indent = b:indent.baseindent + s:curind * &shiftwidth
+	    let s:newstate.baseindent = indent + s:nextrel * &shiftwidth
+	else
+	    let indent = b:indent.baseindent
+	    let s:newstate.baseindent = indent + (s:curind + s:nextrel) * &shiftwidth
+	endif
+	call extend(b:indent, s:newstate, "force")
+	return indent
     endif
 
-    let ind = <SID>HtmlIndentSum(lnum, -1)
-    let ind = ind + <SID>HtmlIndentSum(a:lnum, 0)
+endfunc "}}}
 
-    if restore_ic == 0
-	setlocal noic
-    endif
+" check user settings (first time), clear cpo, Modeline: {{{1
 
-    return indent(lnum) + (&sw * ind)
-endfun
+" DEBUG:
+com! -nargs=* IndHtmlLocal <args>
+
+call HtmlIndent_CheckUserSettings()
 
 let &cpo = s:cpo_save
 unlet s:cpo_save
 
-" [-- EOF <runtime>/indent/html.vim --]
+" vim:set fdm=marker ts=8:
diff --git a/runtime/indent/ruby.vim b/runtime/indent/ruby.vim
index 04d1301..095b3a4 100644
--- a/runtime/indent/ruby.vim
+++ b/runtime/indent/ruby.vim
@@ -1,9 +1,7 @@
 " Vim indent file
 " Language:		Ruby
 " Maintainer:		Nikolai Weibull <now at bitwi.se>
-" Last Change:		2009 Dec 17
-" URL:			http://vim-ruby.rubyforge.org
-" Anon CVS:		See above site
+" URL:			https://github.com/vim-ruby/vim-ruby
 " Release Coordinator:	Doug Kearns <dougkearns@gmail.com>
 
 " 0. Initialization {{{1
@@ -18,9 +16,9 @@
 setlocal nosmartindent
 
 " Now, set up our indentation expression and keys that trigger it.
-setlocal indentexpr=GetRubyIndent()
+setlocal indentexpr=GetRubyIndent(v:lnum)
 setlocal indentkeys=0{,0},0),0],!^F,o,O,e
-setlocal indentkeys+==end,=elsif,=when,=ensure,=rescue,==begin,==end
+setlocal indentkeys+==end,=else,=elsif,=when,=ensure,=rescue,==begin,==end
 
 " Only define the function once.
 if exists("*GetRubyIndent")
@@ -33,8 +31,9 @@
 " 1. Variables {{{1
 " ============
 
-" Regex of syntax group names that are or delimit string or are comments.
-let s:syng_strcom = '\<ruby\%(String\|StringEscape\|ASCIICode' .
+" Regex of syntax group names that are or delimit strings/symbols or are comments.
+let s:syng_strcom = '\<ruby\%(Regexp\|RegexpDelimiter\|RegexpEscape' .
+      \ '\|Symbol\|String\|StringDelimiter\|StringEscape\|ASCIICode' .
       \ '\|Interpolation\|NoInterpolation\|Comment\|Documentation\)\>'
 
 " Regex of syntax group names that are strings.
@@ -43,7 +42,7 @@
 
 " Regex of syntax group names that are strings or documentation.
 let s:syng_stringdoc =
-  \'\<ruby\%(String\|Interpolation\|NoInterpolation\|StringEscape\|Documentation\)\>'
+      \'\<ruby\%(String\|Interpolation\|NoInterpolation\|StringEscape\|Documentation\)\>'
 
 " Expression used to check whether we should skip a match with searchpair().
 let s:skip_expr =
@@ -52,45 +51,60 @@
 " Regex used for words that, at the start of a line, add a level of indent.
 let s:ruby_indent_keywords = '^\s*\zs\<\%(module\|class\|def\|if\|for' .
       \ '\|while\|until\|else\|elsif\|case\|when\|unless\|begin\|ensure' .
-      \ '\|rescue\)\>' .
-      \ '\|\%([*+/,=-]\|<<\|>>\|:\s\)\s*\zs' .
-      \    '\<\%(if\|for\|while\|until\|case\|unless\|begin\)\>'
+      \ '\|rescue\):\@!\>' .
+      \ '\|\%([=,*/%+-]\|<<\|>>\|:\s\)\s*\zs' .
+      \    '\<\%(if\|for\|while\|until\|case\|unless\|begin\):\@!\>'
 
 " Regex used for words that, at the start of a line, remove a level of indent.
 let s:ruby_deindent_keywords =
-      \ '^\s*\zs\<\%(ensure\|else\|rescue\|elsif\|when\|end\)\>'
+      \ '^\s*\zs\<\%(ensure\|else\|rescue\|elsif\|when\|end\):\@!\>'
 
 " Regex that defines the start-match for the 'end' keyword.
 "let s:end_start_regex = '\%(^\|[^.]\)\<\%(module\|class\|def\|if\|for\|while\|until\|case\|unless\|begin\|do\)\>'
 " TODO: the do here should be restricted somewhat (only at end of line)?
-let s:end_start_regex = '^\s*\zs\<\%(module\|class\|def\|if\|for' .
-      \ '\|while\|until\|case\|unless\|begin\)\>' .
-      \ '\|\%([*+/,=-]\|<<\|>>\|:\s\)\s*\zs' .
-      \    '\<\%(if\|for\|while\|until\|case\|unless\|begin\)\>' .
-      \ '\|\<do\>'
+let s:end_start_regex =
+      \ '\C\%(^\s*\|[=,*/%+\-|;{]\|<<\|>>\|:\s\)\s*\zs' .
+      \ '\<\%(module\|class\|def\|if\|for\|while\|until\|case\|unless\|begin\):\@!\>' .
+      \ '\|\%(^\|[^.:@$]\)\@<=\<do:\@!\>'
 
 " Regex that defines the middle-match for the 'end' keyword.
-let s:end_middle_regex = '\<\%(ensure\|else\|\%(\%(^\|;\)\s*\)\@<=\<rescue\>\|when\|elsif\)\>'
+let s:end_middle_regex = '\<\%(ensure\|else\|\%(\%(^\|;\)\s*\)\@<=\<rescue:\@!\>\|when\|elsif\):\@!\>'
 
 " Regex that defines the end-match for the 'end' keyword.
-let s:end_end_regex = '\%(^\|[^.:@$]\)\@<=\<end\>'
+let s:end_end_regex = '\%(^\|[^.:@$]\)\@<=\<end:\@!\>'
 
 " Expression used for searchpair() call for finding match for 'end' keyword.
 let s:end_skip_expr = s:skip_expr .
       \ ' || (expand("<cword>") == "do"' .
-      \ ' && getline(".") =~ "^\\s*\\<\\(while\\|until\\|for\\)\\>")'
+      \ ' && getline(".") =~ "^\\s*\\<\\(while\\|until\\|for\\):\\@!\\>")'
 
 " Regex that defines continuation lines, not including (, {, or [.
-let s:continuation_regex = '\%([\\*+/.,:]\|\%(<%\)\@<![=-]\|\W[|&?]\|||\|&&\)\s*\%(#.*\)\=$'
+let s:non_bracket_continuation_regex = '\%([\\.,:*/%+]\|\<and\|\<or\|\%(<%\)\@<![=-]\|\W[|&?]\|||\|&&\)\s*\%(#.*\)\=$'
 
 " Regex that defines continuation lines.
 " TODO: this needs to deal with if ...: and so on
-let s:continuation_regex2 =
-      \ '\%([\\*+/.,:({[]\|\%(<%\)\@<![=-]\|\W[|&?]\|||\|&&\)\s*\%(#.*\)\=$'
+let s:continuation_regex =
+      \ '\%(%\@<![({[\\.,:*/%+]\|\<and\|\<or\|\%(<%\)\@<![=-]\|\W[|&?]\|||\|&&\)\s*\%(#.*\)\=$'
+
+" Regex that defines bracket continuations
+let s:bracket_continuation_regex = '%\@<!\%([({[]\)\s*\%(#.*\)\=$'
+
+" Regex that defines the first part of a splat pattern
+let s:splat_regex = '[[,(]\s*\*\s*\%(#.*\)\=$'
 
 " Regex that defines blocks.
+"
+" Note that there's a slight problem with this regex and s:continuation_regex.
+" Code like this will be matched by both:
+"
+"   method_call do |(a, b)|
+"
+" The reason is that the pipe matches a hanging "|" operator.
+"
 let s:block_regex =
-      \ '\%(\<do\>\|{\)\s*\%(|\%([*@]\=\h\w*,\=\s*\)\%(,\s*[*@]\=\h\w*\)*|\)\=\s*\%(#.*\)\=$'
+      \ '\%(\<do:\@!\>\|%\@<!{\)\s*\%(|\s*(*\s*\%([*@&]\=\h\w*,\=\s*\)\%(,\s*(*\s*[*@&]\=\h\w*\s*)*\s*\)*|\)\=\s*\%(#.*\)\=$'
+
+let s:block_continuation_regex = '^\s*[^])}\t ].*'.s:block_regex
 
 " 2. Auxiliary Functions {{{1
 " ======================
@@ -110,6 +124,11 @@
   return synIDattr(synID(a:lnum, a:col, 1), 'name') =~ s:syng_stringdoc
 endfunction
 
+" Check if the character at lnum:col is inside a string delimiter
+function s:IsInStringDelimiter(lnum, col)
+  return synIDattr(synID(a:lnum, a:col, 1), 'name') == 'rubyStringDelimiter'
+endfunction
+
 " Find line above 'lnum' that isn't empty, in a comment, or in a string.
 function s:PrevNonBlankNonString(lnum)
   let in_block = 0
@@ -118,16 +137,16 @@
     " Go in and out of blocks comments as necessary.
     " If the line isn't empty (with opt. comment) or in a string, end search.
     let line = getline(lnum)
-    if line =~ '^=begin$'
+    if line =~ '^=begin'
       if in_block
-	let in_block = 0
+        let in_block = 0
       else
-	break
+        break
       endif
-    elseif !in_block && line =~ '^=end$'
+    elseif !in_block && line =~ '^=end'
       let in_block = 1
     elseif !in_block && line !~ '^\s*#.*$' && !(s:IsInStringOrComment(lnum, 1)
-	  \ && s:IsInStringOrComment(lnum, strlen(line)))
+          \ && s:IsInStringOrComment(lnum, strlen(line)))
       break
     endif
     let lnum = prevnonblank(lnum - 1)
@@ -139,42 +158,144 @@
 function s:GetMSL(lnum)
   " Start on the line we're at and use its indent.
   let msl = a:lnum
+  let msl_body = getline(msl)
   let lnum = s:PrevNonBlankNonString(a:lnum - 1)
   while lnum > 0
     " If we have a continuation line, or we're in a string, use line as MSL.
     " Otherwise, terminate search as we have found our MSL already.
     let line = getline(lnum)
-    let col = match(line, s:continuation_regex2) + 1
-    if (col > 0 && !s:IsInStringOrComment(lnum, col))
-	  \ || s:IsInString(lnum, strlen(line))
+
+    if s:Match(lnum, s:splat_regex)
+      " If the above line looks like the "*" of a splat, use the current one's
+      " indentation.
+      "
+      " Example:
+      "   Hash[*
+      "     method_call do
+      "       something
+      "
+      return msl
+    elseif s:Match(line, s:non_bracket_continuation_regex) &&
+          \ s:Match(msl, s:non_bracket_continuation_regex)
+      " If the current line is a non-bracket continuation and so is the
+      " previous one, keep its indent and continue looking for an MSL.
+      "
+      " Example:
+      "   method_call one,
+      "     two,
+      "     three
+      "
       let msl = lnum
+    elseif s:Match(lnum, s:non_bracket_continuation_regex) &&
+          \ (s:Match(msl, s:bracket_continuation_regex) || s:Match(msl, s:block_continuation_regex))
+      " If the current line is a bracket continuation or a block-starter, but
+      " the previous is a non-bracket one, respect the previous' indentation,
+      " and stop here.
+      "
+      " Example:
+      "   method_call one,
+      "     two {
+      "     three
+      "
+      return lnum
+    elseif s:Match(lnum, s:bracket_continuation_regex) &&
+          \ (s:Match(msl, s:bracket_continuation_regex) || s:Match(msl, s:block_continuation_regex))
+      " If both lines are bracket continuations (the current may also be a
+      " block-starter), use the current one's and stop here
+      "
+      " Example:
+      "   method_call(
+      "     other_method_call(
+      "       foo
+      return msl
+    elseif s:Match(lnum, s:block_regex) &&
+          \ !s:Match(msl, s:continuation_regex) &&
+          \ !s:Match(msl, s:block_continuation_regex)
+      " If the previous line is a block-starter and the current one is
+      " mostly ordinary, use the current one as the MSL.
+      "
+      " Example:
+      "   method_call do
+      "     something
+      "     something_else
+      return msl
     else
-      break
+      let col = match(line, s:continuation_regex) + 1
+      if (col > 0 && !s:IsInStringOrComment(lnum, col))
+            \ || s:IsInString(lnum, strlen(line))
+        let msl = lnum
+      else
+        break
+      endif
     endif
+
+    let msl_body = getline(msl)
     let lnum = s:PrevNonBlankNonString(lnum - 1)
   endwhile
   return msl
 endfunction
 
 " Check if line 'lnum' has more opening brackets than closing ones.
-function s:LineHasOpeningBrackets(lnum)
-  let open_0 = 0
-  let open_2 = 0
-  let open_4 = 0
+function s:ExtraBrackets(lnum)
+  let opening = {'parentheses': [], 'braces': [], 'brackets': []}
+  let closing = {'parentheses': [], 'braces': [], 'brackets': []}
+
   let line = getline(a:lnum)
-  let pos = match(line, '[][(){}]', 0)
+  let pos  = match(line, '[][(){}]', 0)
+
+  " Save any encountered opening brackets, and remove them once a matching
+  " closing one has been found. If a closing bracket shows up that doesn't
+  " close anything, save it for later.
   while pos != -1
     if !s:IsInStringOrComment(a:lnum, pos + 1)
-      let idx = stridx('(){}[]', line[pos])
-      if idx % 2 == 0
-	let open_{idx} = open_{idx} + 1
-      else
-	let open_{idx - 1} = open_{idx - 1} - 1
+      if line[pos] == '('
+        call add(opening.parentheses, {'type': '(', 'pos': pos})
+      elseif line[pos] == ')'
+        if empty(opening.parentheses)
+          call add(closing.parentheses, {'type': ')', 'pos': pos})
+        else
+          let opening.parentheses = opening.parentheses[0:-2]
+        endif
+      elseif line[pos] == '{'
+        call add(opening.braces, {'type': '{', 'pos': pos})
+      elseif line[pos] == '}'
+        if empty(opening.braces)
+          call add(closing.braces, {'type': '}', 'pos': pos})
+        else
+          let opening.braces = opening.braces[0:-2]
+        endif
+      elseif line[pos] == '['
+        call add(opening.brackets, {'type': '[', 'pos': pos})
+      elseif line[pos] == ']'
+        if empty(opening.brackets)
+          call add(closing.brackets, {'type': ']', 'pos': pos})
+        else
+          let opening.brackets = opening.brackets[0:-2]
+        endif
       endif
     endif
+
     let pos = match(line, '[][(){}]', pos + 1)
   endwhile
-  return (open_0 > 0) . (open_2 > 0) . (open_4 > 0)
+
+  " Find the rightmost brackets, since they're the ones that are important in
+  " both opening and closing cases
+  let rightmost_opening = {'type': '(', 'pos': -1}
+  let rightmost_closing = {'type': ')', 'pos': -1}
+
+  for opening in opening.parentheses + opening.braces + opening.brackets
+    if opening.pos > rightmost_opening.pos
+      let rightmost_opening = opening
+    endif
+  endfor
+
+  for closing in closing.parentheses + closing.braces + closing.brackets
+    if closing.pos > rightmost_closing.pos
+      let rightmost_closing = closing
+    endif
+  endfor
+
+  return [rightmost_opening, rightmost_closing]
 endfunction
 
 function s:Match(lnum, regex)
@@ -195,32 +316,35 @@
 " 3. GetRubyIndent Function {{{1
 " =========================
 
-function GetRubyIndent()
+function GetRubyIndent(...)
   " 3.1. Setup {{{2
   " ----------
 
-  " Set up variables for restoring position in file.  Could use v:lnum here.
+  " For the current line, use the first argument if given, else v:lnum
+  let clnum = a:0 ? a:1 : v:lnum
+
+  " Set up variables for restoring position in file.  Could use clnum here.
   let vcol = col('.')
 
   " 3.2. Work on the current line {{{2
   " -----------------------------
 
   " Get the current line.
-  let line = getline(v:lnum)
+  let line = getline(clnum)
   let ind = -1
 
   " If we got a closing bracket on an empty line, find its match and indent
   " according to it.  For parentheses we indent to its column - 1, for the
   " others we indent to the containing line's MSL's level.  Return -1 if fail.
   let col = matchend(line, '^\s*[]})]')
-  if col > 0 && !s:IsInStringOrComment(v:lnum, col)
-    call cursor(v:lnum, col)
+  if col > 0 && !s:IsInStringOrComment(clnum, col)
+    call cursor(clnum, col)
     let bs = strpart('(){}[]', stridx(')}]', line[col - 1]) * 2, 2)
     if searchpair(escape(bs[0], '\['), '', bs[1], 'bW', s:skip_expr) > 0
       if line[col-1]==')' && col('.') != col('$') - 1
-	let ind = virtcol('.')-1
+        let ind = virtcol('.') - 1
       else
-	let ind = indent(s:GetMSL(line('.')))
+        let ind = indent(s:GetMSL(line('.')))
       endif
     endif
     return ind
@@ -233,35 +357,47 @@
 
   " If we have a deindenting keyword, find its match and indent to its level.
   " TODO: this is messy
-  if s:Match(v:lnum, s:ruby_deindent_keywords)
-    call cursor(v:lnum, 1)
+  if s:Match(clnum, s:ruby_deindent_keywords)
+    call cursor(clnum, 1)
     if searchpair(s:end_start_regex, s:end_middle_regex, s:end_end_regex, 'bW',
-	    \ s:end_skip_expr) > 0
-      let line = getline('.')
+          \ s:end_skip_expr) > 0
+      let msl  = s:GetMSL(line('.'))
+      let line = getline(line('.'))
+
       if strpart(line, 0, col('.') - 1) =~ '=\s*$' &&
-       \ strpart(line, col('.') - 1, 2) !~ 'do'
-	let ind = virtcol('.') - 1
+            \ strpart(line, col('.') - 1, 2) !~ 'do'
+        let ind = virtcol('.') - 1
+      elseif getline(msl) =~ '=\s*\(#.*\)\=$'
+        let ind = indent(line('.'))
       else
-	let ind = indent('.')
+        let ind = indent(msl)
       endif
     endif
     return ind
   endif
 
   " If we are in a multi-line string or line-comment, don't do anything to it.
-  if s:IsInStringOrDocumentation(v:lnum, matchend(line, '^\s*') + 1)
+  if s:IsInStringOrDocumentation(clnum, matchend(line, '^\s*') + 1)
     return indent('.')
   endif
 
+  " If we are at the closing delimiter of a "<<" heredoc-style string, set the
+  " indent to 0.
+  if line =~ '^\k\+\s*$'
+        \ && s:IsInStringDelimiter(clnum, 1)
+        \ && search('\V<<'.line, 'nbW') > 0
+    return 0
+  endif
+
   " 3.3. Work on the previous line. {{{2
   " -------------------------------
 
   " Find a non-blank, non-multi-line string line above the current line.
-  let lnum = s:PrevNonBlankNonString(v:lnum - 1)
+  let lnum = s:PrevNonBlankNonString(clnum - 1)
 
   " If the line is empty and inside a string, use the previous line.
-  if line =~ '^\s*$' && lnum != prevnonblank(v:lnum - 1)
-    return indent(prevnonblank(v:lnum))
+  if line =~ '^\s*$' && lnum != prevnonblank(clnum - 1)
+    return indent(prevnonblank(clnum))
   endif
 
   " At the start of the file use zero indent.
@@ -269,7 +405,7 @@
     return 0
   endif
 
-  " Set up variables for current line.
+  " Set up variables for the previous line.
   let line = getline(lnum)
   let ind = indent(lnum)
 
@@ -278,20 +414,42 @@
     return indent(s:GetMSL(lnum)) + &sw
   endif
 
-  " If the previous line contained an opening bracket, and we are still in it,
-  " add indent depending on the bracket type.
-  if line =~ '[[({]'
-    let counts = s:LineHasOpeningBrackets(lnum)
-    if counts[0] == '1' && searchpair('(', '', ')', 'bW', s:skip_expr) > 0
-      if col('.') + 1 == col('$')
-	return ind + &sw
+  " If the previous line ended with the "*" of a splat, add a level of indent
+  if line =~ s:splat_regex
+    return indent(lnum) + &sw
+  endif
+
+  " If the previous line contained unclosed opening brackets and we are still
+  " in them, find the rightmost one and add indent depending on the bracket
+  " type.
+  "
+  " If it contained hanging closing brackets, find the rightmost one, find its
+  " match and indent according to that.
+  if line =~ '[[({]' || line =~ '[])}]\s*\%(#.*\)\=$'
+    let [opening, closing] = s:ExtraBrackets(lnum)
+
+    if opening.pos != -1
+      if opening.type == '(' && searchpair('(', '', ')', 'bW', s:skip_expr) > 0
+        if col('.') + 1 == col('$')
+          return ind + &sw
+        else
+          return virtcol('.')
+        endif
       else
-	return virtcol('.')
+        let nonspace = matchend(line, '\S', opening.pos + 1) - 1
+        return nonspace > 0 ? nonspace : ind + &sw
       endif
-    elseif counts[1] == '1' || counts[2] == '1'
-      return ind + &sw
+    elseif closing.pos != -1
+      call cursor(lnum, closing.pos + 1)
+      normal! %
+
+      if s:Match(line('.'), s:ruby_indent_keywords)
+        return indent('.') + &sw
+      else
+        return indent('.')
+      endif
     else
-      call cursor(v:lnum, vcol)
+      call cursor(clnum, vcol)
     end
   endif
 
@@ -301,12 +459,12 @@
   if col > 0
     call cursor(lnum, col)
     if searchpair(s:end_start_regex, '', s:end_end_regex, 'bW',
-		\ s:end_skip_expr) > 0
+          \ s:end_skip_expr) > 0
       let n = line('.')
       let ind = indent('.')
       let msl = s:GetMSL(n)
       if msl != n
-	let ind = indent(msl)
+        let ind = indent(msl)
       end
       return ind
     endif
@@ -316,7 +474,6 @@
   if col > 0
     call cursor(lnum, col)
     let ind = virtcol('.') - 1 + &sw
-"    let ind = indent(lnum) + &sw
     " TODO: make this better (we need to count them) (or, if a searchpair
     " fails, we know that something is lacking an end and thus we indent a
     " level
@@ -336,7 +493,7 @@
   " If the previous line wasn't a MSL and is continuation return its indent.
   " TODO: the || s:IsInString() thing worries me a bit.
   if p_lnum != lnum
-    if s:Match(p_lnum,s:continuation_regex)||s:IsInString(p_lnum,strlen(line))
+    if s:Match(p_lnum, s:non_bracket_continuation_regex) || s:IsInString(p_lnum,strlen(line))
       return ind
     endif
   endif
@@ -356,13 +513,15 @@
     return ind
   endif
 
-  " If the previous line ended with [*+/.-=], indent one extra level.
-  if s:Match(lnum, s:continuation_regex)
+  " If the previous line ended with [*+/.,-=], but wasn't a block ending or a
+  " closing bracket, indent one extra level.
+  if s:Match(lnum, s:non_bracket_continuation_regex) && !s:Match(lnum, '^\s*\([\])}]\|end\)')
     if lnum == p_lnum
       let ind = msl_ind + &sw
     else
       let ind = msl_ind
     endif
+    return ind
   endif
 
   " }}}2
@@ -375,4 +534,4 @@
 let &cpo = s:cpo_save
 unlet s:cpo_save
 
-" vim:set sw=2 sts=2 ts=8 noet:
+" vim:set sw=2 sts=2 ts=8 et:
diff --git a/runtime/syntax/eruby.vim b/runtime/syntax/eruby.vim
index 42c8b51..c20b086 100644
--- a/runtime/syntax/eruby.vim
+++ b/runtime/syntax/eruby.vim
@@ -1,9 +1,7 @@
 " Vim syntax file
 " Language:		eRuby
 " Maintainer:		Tim Pope <vimNOSPAM@tpope.org>
-" Last Change:		2010 Apr 15
-" URL:			http://vim-ruby.rubyforge.org
-" Anon CVS:		See above site
+" URL:			https://github.com/vim-ruby/vim-ruby
 " Release Coordinator:	Doug Kearns <dougkearns@gmail.com>
 
 if exists("b:current_syntax")
@@ -18,13 +16,12 @@
   let g:eruby_default_subtype = "html"
 endif
 
-if !exists("b:eruby_subtype") && main_syntax == 'eruby'
+if &filetype =~ '^eruby\.'
+  let b:eruby_subtype = matchstr(&filetype,'^eruby\.\zs\w\+')
+elseif !exists("b:eruby_subtype") && main_syntax == 'eruby'
   let s:lines = getline(1)."\n".getline(2)."\n".getline(3)."\n".getline(4)."\n".getline(5)."\n".getline("$")
   let b:eruby_subtype = matchstr(s:lines,'eruby_subtype=\zs\w\+')
   if b:eruby_subtype == ''
-    let b:eruby_subtype = matchstr(&filetype,'^eruby\.\zs\w\+')
-  endif
-  if b:eruby_subtype == ''
     let b:eruby_subtype = matchstr(substitute(expand("%:t"),'\c\%(\.erb\|\.eruby\|\.erubis\)\+$','',''),'\.\zs\w\+$')
   endif
   if b:eruby_subtype == 'rhtml'
@@ -61,7 +58,7 @@
 exe 'syn region  erubyOneLiner   matchgroup=erubyDelimiter start="^%\{1,'.b:eruby_nest_level.'\}%\@!"    end="$"     contains=@rubyTop	     containedin=ALLBUT,@erubyRegions keepend oneline'
 exe 'syn region  erubyBlock      matchgroup=erubyDelimiter start="<%\{1,'.b:eruby_nest_level.'\}%\@!-\=" end="[=-]\=%\@<!%\{1,'.b:eruby_nest_level.'\}>" contains=@rubyTop  containedin=ALLBUT,@erubyRegions keepend'
 exe 'syn region  erubyExpression matchgroup=erubyDelimiter start="<%\{1,'.b:eruby_nest_level.'\}=\{1,4}" end="[=-]\=%\@<!%\{1,'.b:eruby_nest_level.'\}>" contains=@rubyTop  containedin=ALLBUT,@erubyRegions keepend'
-exe 'syn region  erubyComment    matchgroup=erubyDelimiter start="<%\{1,'.b:eruby_nest_level.'\}#"       end="%\@<!%\{1,'.b:eruby_nest_level.'\}>" contains=rubyTodo,@Spell containedin=ALLBUT,@erubyRegions keepend'
+exe 'syn region  erubyComment    matchgroup=erubyDelimiter start="<%\{1,'.b:eruby_nest_level.'\}-\=#"    end="[=-]\=%\@<!%\{1,'.b:eruby_nest_level.'\}>" contains=rubyTodo,@Spell containedin=ALLBUT,@erubyRegions keepend'
 
 " Define the default highlighting.
 
diff --git a/runtime/syntax/gprof.vim b/runtime/syntax/gprof.vim
index 342af05..381a3c6 100644
--- a/runtime/syntax/gprof.vim
+++ b/runtime/syntax/gprof.vim
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language: Syntax for Gprof Output
 " Maintainer: Dominique Pelle <dominique.pelle@gmail.com>
-" Last Change: 2012 May 20
+" Last Change: 2013 Jun 09
 
 " Quit when a syntax file was already loaded
 if exists("b:current_syntax")
@@ -32,7 +32,7 @@
 syn match gprofCallGraphSeparator "^-\+$"
 syn region gprofCallGraphTrailer
   \ start="This table describes the call tree of the program"
-  \ end="^\s*the cycle.$"
+  \ end="^\s*the cycle\.$"
 
 " Index
 syn region gprofIndex
diff --git a/runtime/syntax/javascript.vim b/runtime/syntax/javascript.vim
index 8bf677b..ba90666 100644
--- a/runtime/syntax/javascript.vim
+++ b/runtime/syntax/javascript.vim
@@ -8,6 +8,7 @@
 "		(ss) fixed regex parsing issue with multiple qualifiers [gi]
 "		(ss) additional factoring of keywords, globals, and members
 " Last Change:	2012 Oct 05
+" 		2013 Jun 12: adjusted javaScriptRegexpString (Kevin Locke)
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -42,7 +43,7 @@
 
 syn match   javaScriptSpecialCharacter "'\\.'"
 syn match   javaScriptNumber	       "-\=\<\d\+L\=\>\|0[xX][0-9a-fA-F]\+\>"
-syn region  javaScriptRegexpString     start=+/[^/*]+me=e-1 skip=+\\\\\|\\/+ end=+/[gi]\{0,2\}\s*$+ end=+/[gi]\{0,2\}\s*[;.,)\]}]+me=e-1 contains=@htmlPreproc oneline
+syn region  javaScriptRegexpString     start=+/[^/*]+me=e-1 skip=+\\\\\|\\/+ end=+/[gim]\{0,2\}\s*$+ end=+/[gim]\{0,2\}\s*[;.,)\]}]+me=e-1 contains=@htmlPreproc oneline
 
 syn keyword javaScriptConditional	if else switch
 syn keyword javaScriptRepeat		while for do in
diff --git a/runtime/syntax/objc.vim b/runtime/syntax/objc.vim
index 665a47a..8891ebe 100644
--- a/runtime/syntax/objc.vim
+++ b/runtime/syntax/objc.vim
@@ -1,123 +1,435 @@
 " Vim syntax file
-" Language:	    Objective C
-" Maintainer:	    Kazunobu Kuriyama <kazunobu.kuriyama@nifty.com>
-" Ex-maintainer:    Anthony Hodsdon <ahodsdon@fastmail.fm>
-" First Author:	    Valentino Kyriakides <1kyriaki@informatik.uni-hamburg.de>
-" Last Change:	    2013 Feb 20
-"
-" 2013 Feb 19       Revised based on a patch sent to the maintainer by 
-"                   Christos Kontas <xakon@yahoo.com> on 2012 Dec 12.
+" Language:     Objective-C
+" Maintainer:   Kazunobu Kuriyama <kazunobu.kuriyama@nifty.com>
+" Last Change:  2013 Jun 12
+" Remark:       Modern Objective-C Edition
 
-" For version 5.x: Clear all syntax items
-" For version 6.x: Quit when a syntax file was already loaded
-if version < 600
-  syntax clear
-elseif exists("b:current_syntax")
+""" Preparation for loading ObjC stuff
+if exists("b:current_syntax")
   finish
 endif
-let s:keepcpo= &cpo
+if &filetype != 'objcpp'
+  syn clear
+  runtime! syntax/c.vim
+endif
+let s:cpo_save = &cpo
 set cpo&vim
 
-if &filetype != 'objcpp'
-  " Read the C syntax to start with
-  if version < 600
-    source <sfile>:p:h/c.vim
-  else
-    runtime! syntax/c.vim
-  endif
-endif
+""" ObjC proper stuff follows...
 
-" Objective C extentions follow below
-"
-" NOTE: Objective C is abbreviated to ObjC/objc
-" and uses *.h, *.m as file extensions!
+syn keyword objcPreProcMacro __OBJC__ __OBJC2__ __clang__
 
+" Defined Types
+syn keyword objcPrincipalType id Class SEL IMP BOOL
+syn keyword objcUsefulTerm nil Nil NO YES
 
-" ObjC keywords, types, type qualifiers etc.
-syn keyword objcStatement	self super _cmd
-syn keyword objcType		id Class SEL IMP BOOL
-syn keyword objcTypeModifier	bycopy in out inout oneway
-syn keyword objcConstant	nil Nil
+" Preprocessor Directives
+syn region objcImported display contained start=+"+ skip=+\\\\\|\\"+ end=+"+
+syn match objcImported display contained "<[^>]*>"
+syn match objcImport display "^\s*\(%:\|#\)\s*import\>\s*["<]" contains=objcImported
 
-" Match the ObjC #import directive (like C's #include)
-syn region objcImported display contained start=+"+  skip=+\\\\\|\\"+  end=+"+
-syn match  objcImported display contained "<[-_0-9a-zA-Z.\/]*>"
-syn match  objcImport display "^\s*\(%:\|#\)\s*import\>\s*["<]" contains=objcImported
+" ObjC Compiler Directives
+syn match objcObjDef display /@interface\>\|@implementation\>\|@end\>\|@class\>/
+syn match objcProtocol display /@protocol\>\|@optional\>\|@required\>/
+syn match objcProperty display /@property\>\|@synthesize\>\|@dynamic\>/
+syn match objcIvarScope display /@private\>\|@protected\>\|@public\>/
+syn match objcInternalRep display /@selector\>\|@encode\>/
+syn match objcException display /@try\>\|@throw\>\|@catch\|@finally\>/
+syn match objcThread display /@synchronized\>/
+syn match objcPool display /@autoreleasepool\>/
 
-" Match the important ObjC directives
-syn match  objcScopeDecl    "@public\|@private\|@protected"
-syn match  objcDirective    "@interface\|@implementation"
-syn match  objcDirective    "@class\|@end\|@defs"
-syn match  objcDirective    "@encode\|@protocol\|@selector"
-syn match  objcDirective    "@try\|@catch\|@finally\|@throw\|@synchronized"
-
- " New directives introduced with Objc-2.0
-syn match  objcDirective    "@property\|@synthesize\|@dynamic"
-syn match  objcDirective    "@optional\|@required"
-syn match  objcDirective    "@autoreleasepool"
-
-" Match the ObjC method types
-"
-" NOTE: here I match only the indicators, this looks
-" much nicer and reduces cluttering color highlightings.
-" However, if you prefer full method declaration matching
-" append .* at the end of the next two patterns!
-"
-syn match objcInstMethod    "^\s*-\s*"
-syn match objcFactMethod    "^\s*+\s*"
-
-" To distinguish from a header inclusion from a protocol list.
-syn match objcProtocol display "<[_a-zA-Z][_a-zA-Z0-9]*>" contains=objcType,cType,Type
-
-
-" To distinguish labels from the keyword for a method's parameter.
-syn region objcKeyForMethodParam display
-    \ start="^\s*[_a-zA-Z][_a-zA-Z0-9]*\s*:\s*("
-    \ end=")\s*[_a-zA-Z][_a-zA-Z0-9]*"
-    \ contains=objcType,objcTypeModifier,cType,cStructure,cStorageClass,Type
-
-" Objective-C Constant Strings
-syn match objcSpecial display "%@" contained
+" ObjC Constant Strings
+syn match objcSpecial display contained "%@"
 syn region objcString start=+\(@"\|"\)+ skip=+\\\\\|\\"+ end=+"+ contains=cFormat,cSpecial,objcSpecial
 
+" ObjC Hidden Arguments
+syn keyword objcHiddenArgument self _cmd super
+
+" ObjC Type Qualifiers for Blocks
+syn keyword objcBlocksQualifier __block
+" ObjC Type Qualifiers for Object Lifetime
+syn keyword objcObjectLifetimeQualifier __strong __weak __unsafe_unretained __autoreleasing
+" ObjC Type Qualifiers for Toll-Free Bridge
+syn keyword objcTollFreeBridgeQualifier __bridge __bridge_retained __bridge_transfer
+
+" ObjC Type Qualifiers for Remote Messaging
+syn match objcRemoteMessagingQualifier display contained /\((\s*oneway\s\+\|(\s*in\s\+\|(\s*out\s\+\|(\s*inout\s\+\|(\s*bycopy\s\+\(in\(out\)\?\|out\)\?\|(\s*byref\s\+\(in\(out\)\?\|out\)\?\)/hs=s+1
+
+" shorthand
+syn cluster objcTypeQualifier contains=objcBlocksQualifier,objcObjectLifetimeQualifier,objcTollFreeBridgeQualifier,objcRemoteMessagingQualifier
+
+" ObjC Fast Enumeration
+syn match objcFastEnumKeyword display /\sin\(\s\|$\)/
+
+" ObjC Literal Syntax
+syn match objcLiteralSyntaxNumber display /@\(YES\>\|NO\>\|\d\|-\|+\)/ contains=cNumber,cFloat,cOctal
+syn match objcLiteralSyntaxSpecialChar display /@'/ contains=cSpecialCharacter
+syn match objcLiteralSyntaxChar display /@'[^\\]'/ 
+syn match objcLiteralSyntaxOp display /@\((\|\[\|{\)/me=e-1,he=e-1
+
+" ObjC Declared Property Attributes
+syn match objDeclPropAccessorNameAssign display /\s*=\s*/ contained
+syn region objcDeclPropAccessorName display start=/\(getter\|setter\)/ end=/\h\w*/ contains=objDeclPropAccessorNameAssign
+syn keyword objcDeclPropAccessorType readonly readwrite contained
+syn keyword objcDeclPropAssignSemantics assign retain copy contained
+syn keyword objcDeclPropAtomicity nonatomic contained
+syn keyword objcDeclPropARC strong weak contained
+syn region objcDeclProp display transparent keepend start=/@property\s*(/ end=/)/ contains=objcProperty,objcDeclPropAccessorName,objcDeclPropAccessorType,objcDeclPropAssignSemantics,objcDeclPropAtomicity,objcDeclPropARC
+
+" To distinguish colons in methods and dictionaries from those in C's labels.
+syn match objcColon display /^\s*\h\w*\s*\:\(\s\|.\)/me=e-1,he=e-1
+
+" To distinguish a protocol list from system header files
+syn match objcProtocolList display /<\h\w*\(\s*,\s*\h\w*\)*>/ contains=objcPrincipalType,cType,Type
+
+" shorthand
+syn cluster objcCEntities contains=cType,cStructure,cStorageClass,cString,cCharacter,cSpecialCharacter,cNumbers,cConstant,cOperator,cComment,cCommentL,cStatement,cLabel,cConditional,cRepeat
+syn cluster objcObjCEntities contains=objcHiddenArgument,objcPrincipalType,objcString,objcUsefulTerm,objcProtocol,objcInternalRep,objcException,objcThread,objcPool,@objcTypeQualifier,objcLiteralSyntaxNumber,objcLiteralSyntaxOp,objcLiteralSyntaxChar,objcLiteralSyntaxSpecialChar,objcProtocolList,objcColon,objcFastEnumKeyword,objcType,objcClass,objcMacro,objcEnum,objcEnumValue,objcExceptionValue,objcNotificationValue,objcConstVar,objcPreProcMacro
+
 " Objective-C Message Expressions
-syn region objcMessage display start="\[" end="\]" contains=objcMessage,objcStatement,objcType,objcTypeModifier,objcString,objcConstant,objcDirective,cType,cStructure,cStorageClass,cString,cCharacter,cSpecialCharacter,cNumbers,cConstant,cOperator,cComment,cCommentL,Type
+syn region objcMethodCall start=/\[/ end=/\]/ contains=objcMethodCall,objcBlocks,@objcObjCEntities,@objcCEntities
 
-syn cluster cParenGroup add=objcMessage
-syn cluster cPreProcGroup add=objcMessage
+" To distinguish class method and instance method
+syn match objcInstanceMethod display /^s*-\s*/
+syn match objcClassMethod display /^s*+\s*/
 
-" Define the default highlighting.
-" For version 5.7 and earlier: only when not done already
-" For version 5.8 and later: only when an item doesn't have highlighting yet
-if version >= 508 || !exists("did_objc_syntax_inits")
-  if version < 508
-    let did_objc_syntax_inits = 1
-    command -nargs=+ HiLink hi link <args>
-  else
-    command -nargs=+ HiLink hi def link <args>
-  endif
+" ObjC Blocks
+syn region objcBlocks start=/\(\^\s*([^)]\+)\s*{\|\^\s*{\)/ end=/}/ contains=objcBlocks,objcMethodCall,@objcObjCEntities,@objcCEntities
 
-  HiLink objcImport		Include
-  HiLink objcImported		cString
-  HiLink objcTypeModifier	objcType
-  HiLink objcType		Type
-  HiLink objcScopeDecl		Statement
-  HiLink objcInstMethod		Function
-  HiLink objcFactMethod		Function
-  HiLink objcStatement		Statement
-  HiLink objcDirective		Statement
-  HiLink objcKeyForMethodParam	None
-  HiLink objcString		cString
-  HiLink objcSpecial		Special
-  HiLink objcProtocol		None
-  HiLink objcConstant		cConstant
+syn cluster cParenGroup add=objcMethodCall
+syn cluster cPreProcGroup add=objcMethodCall
 
-  delcommand HiLink
-endif
+""" Foundation Framework
+syn match objcClass /Protocol\s*\*/me=s+8,he=s+8
 
+"""""""""""""""""
+" NSObjCRuntime.h
+syn keyword objcType NSInteger NSUInteger NSComparator
+syn keyword objcEnum NSComparisonResult
+syn keyword objcEnumValue NSOrderedAscending NSOrderedSame NSOrderedDescending
+syn keyword objcEnum NSEnumerationOptions
+syn keyword objcEnumValue NSEnumerationConcurrent NSEnumerationReverse
+syn keyword objcEnum NSSortOptions
+syn keyword objcEnumValue NSSortConcurrent NSSortStable
+syn keyword objcEnumValue NSNotFound
+syn keyword objcMacro NSIntegerMax NSIntegerMin NSUIntegerMax
+" NSRange.h
+syn keyword objcType NSRange NSRangePointer
+" NSGeometry.h
+syn keyword objcType NSPoint NSPointPointer NSPointArray NSSize NSSizePointer NSSizeArray NSRect NSRectPointer NSRectArray
+syn keyword objcEnum NSRectEdge
+syn keyword objcEnumValue NSMinXEdge NSMinYEdge NSMaxXEdge NSMaxYEdge
+syn keyword objcConstVar NSZeroPoint NSZeroSize NSZeroRect
+syn keyword cType CGFloat CGPoint CGSize CGRect
+syn keyword objcEnum NSAlignmentOptions
+syn keyword objcEnumValue NSAlignMinXInward NSAlignMinYInward NSAlignMaxXInward NSAlignMaxYInward NSAlignWidthInward NSAlignHeightInward NSAlignMinXOutward NSAlignMinYOutward NSAlignMaxXOutward NSAlignMaxYOutward NSAlignWidthOutward NSAlignHeightOutward NSAlignMinXNearest NSAlignMinYNearest NSAlignMaxXNearest NSAlignMaxYNearest NSAlignWidthNearest NSAlignHeightNearest NSAlignRectFlipped NSAlignAllEdgesInward NSAlignAllEdgesOutward NSAlignAllEdgesNearest
+" NSDecimal.h
+syn keyword objcType NSDecimal
+syn keyword objcEnum  NSRoundingMode
+syn keyword objcEnumValue NSRoundPlain NSRoundDown NSRoundUp NSRoundBankers
+syn keyword objcEnum NSCalculationError
+syn keyword objcEnumValue NSCalculationNoError NSCalculationLossOfPrecision NSCalculationUnderflow NSCalculationOverflow NSCalculationDivideByZero
+" NSDate.h
+syn match objcClass /NSDate\s*\*/me=s+6,he=s+6
+syn keyword objcType NSTimeInterval
+syn keyword objcNotificationValue NSSystemClockDidChangeNotification
+syn keyword objcMacro NSTimeIntervalSince1970
+" NSZone.h
+syn match objcType /NSZone\s*\*/me=s+6,he=s+6
+" NSError.h
+syn match objcClass /NSError\s*\*/me=s+7,he=s+7
+syn keyword objcConstVar NSCocoaErrorDomain NSPOSIXErrorDomain NSOSStatusErrorDomain NSMachErrorDomain NSUnderlyingErrorKey NSLocalizedDescriptionKey NSLocalizedFailureReasonErrorKey NSLocalizedRecoverySuggestionErrorKey NSLocalizedRecoveryOptionsErrorKey NSRecoveryAttempterErrorKey NSHelpAnchorErrorKey NSStringEncodingErrorKey NSURLErrorKey NSFilePathErrorKey
+" NSException.h
+syn match objcClass /NSException\s*\*/me=s+11,he=s+11
+syn keyword objcType NSUncaughtExceptionHandler
+syn keyword objcConstVar NSGenericException NSRangeException NSInvalidArgumentException NSInternalInconsistencyException NSMallocException NSObjectInaccessibleException NSObjectNotAvailableException NSDestinationInvalidException NSPortTimeoutException NSInvalidSendPortException NSInvalidReceivePortException NSPortSendException NSPortReceiveException NSOldStyleException
+" NSNotification.h
+syn match objcClass /NSNotification\s*\*/me=s+14,he=s+14
+syn match objcClass /NSNotificationCenter\s*\*/me=s+20,he=s+20
+" NSDistributedNotificationCenter.h
+syn match objcClass /NSDistributedNotificationCenter\s*\*/me=s+31,he=s+31
+syn keyword objcConstVar NSLocalNotificationCenterType
+syn keyword objcEnum NSNotificationSuspensionBehavior
+syn keyword objcEnumValue NSNotificationSuspensionBehaviorDrop NSNotificationSuspensionBehaviorCoalesce NSNotificationSuspensionBehaviorHold NSNotificationSuspensionBehaviorHold NSNotificationSuspensionBehaviorDeliverImmediately
+syn keyword objcEnumValue NSNotificationDeliverImmediately NSNotificationPostToAllSessions
+" NSNotificationQueue.h
+syn match objcClass /NSNotificationQueue\s*\*/me=s+19,he=s+19
+syn keyword objcEnum NSPostingStyle
+syn keyword objcEnumValue NSPostWhenIdle NSPostASAP NSPostNow
+syn keyword objcEnum NSNotificationCoalescing
+syn keyword objcEnumValue NSNotificationNoCoalescing NSNotificationCoalescingOnName NSNotificationCoalescingOnSender
+" NSEnumerator.h
+syn match objcClass /NSEnumerator\s*\*/me=s+12,he=s+12
+" NSIndexSet.h
+syn match objcClass /NSIndexSet\s*\*/me=s+10,he=s+10
+syn match objcClass /NSMutableIndexSet\s*\*/me=s+17,he=s+17
+" NSCharecterSet.h
+syn match objcClass /NSCharacterSet\s*\*/me=s+14,he=s+14
+" NSURL.h
+syn match objcClass /NSURL\s*\*/me=s+5,he=s+5
+syn keyword objcEnum NSURLBookmarkCreationOptions
+syn keyword objcEnumValue NSURLBookmarkCreationPreferFileIDResolution NSURLBookmarkCreationMinimalBookmark NSURLBookmarkCreationSuitableForBookmarkFile NSURLBookmarkCreationWithSecurityScope NSURLBookmarkCreationSecurityScopeAllowOnlyReadAccess
+syn keyword objcEnum NSURLBookmarkResolutionOptions
+syn keyword objcEnumValue NSURLBookmarkResolutionWithoutUI NSURLBookmarkResolutionWithoutMounting NSURLBookmarkResolutionWithSecurityScope
+syn keyword objcType NSURLBookmarkFileCreationOptions
+syn keyword objcConstVar NSURLFileScheme NSURLKeysOfUnsetValuesKey
+syn keyword objcConstVar NSURLNameKey NSURLLocalizedNameKey NSURLIsRegularFileKey NSURLIsDirectoryKey NSURLIsSymbolicLinkKey NSURLIsVolumeKey NSURLIsPackageKey NSURLIsSystemImmutableKey NSURLIsUserImmutableKey NSURLIsHiddenKey NSURLHasHiddenExtensionKey NSURLCreationDateKey NSURLContentAccessDateKey NSURLContentModificationDateKey NSURLAttributeModificationDateKey NSURLLinkCountKey NSURLParentDirectoryURLKey NSURLVolumeURLKey NSURLTypeIdentifierKey NSURLLocalizedTypeDescriptionKey NSURLLabelNumberKey NSURLLabelColorKey NSURLLocalizedLabelKey NSURLEffectiveIconKey NSURLCustomIconKey NSURLFileResourceIdentifierKey NSURLVolumeIdentifierKey NSURLPreferredIOBlockSizeKey NSURLIsReadableKey NSURLIsWritableKey NSURLIsExecutableKey NSURLFileSecurityKey NSURLIsExcludedFromBackupKey NSURLPathKey NSURLIsMountTriggerKey NSURLFileResourceTypeKey
+syn keyword objcConstVar NSURLFileResourceTypeNamedPipe NSURLFileResourceTypeCharacterSpecial NSURLFileResourceTypeDirectory NSURLFileResourceTypeBlockSpecial NSURLFileResourceTypeRegular NSURLFileResourceTypeSymbolicLink NSURLFileResourceTypeSocket NSURLFileResourceTypeUnknown
+syn keyword objcConstVar NSURLFileSizeKey NSURLFileAllocatedSizeKey NSURLTotalFileSizeKey NSURLTotalFileAllocatedSizeKey NSURLIsAliasFileKey
+syn keyword objcConstVar NSURLVolumeLocalizedFormatDescriptionKey NSURLVolumeTotalCapacityKey NSURLVolumeAvailableCapacityKey NSURLVolumeResourceCountKey NSURLVolumeSupportsPersistentIDsKey NSURLVolumeSupportsSymbolicLinksKey NSURLVolumeSupportsHardLinksKey NSURLVolumeSupportsJournalingKey NSURLVolumeIsJournalingKey NSURLVolumeSupportsSparseFilesKey NSURLVolumeSupportsZeroRunsKey NSURLVolumeSupportsCaseSensitiveNamesKey NSURLVolumeSupportsCasePreservedNamesKey NSURLVolumeSupportsRootDirectoryDatesKey NSURLVolumeSupportsVolumeSizesKey NSURLVolumeSupportsRenamingKey NSURLVolumeSupportsAdvisoryFileLockingKey NSURLVolumeSupportsExtendedSecurityKey NSURLVolumeIsBrowsableKey NSURLVolumeMaximumFileSizeKey NSURLVolumeIsEjectableKey NSURLVolumeIsRemovableKey NSURLVolumeIsInternalKey NSURLVolumeIsAutomountedKey NSURLVolumeIsLocalKey NSURLVolumeIsReadOnlyKey NSURLVolumeCreationDateKey NSURLVolumeURLForRemountingKey NSURLVolumeUUIDStringKey NSURLVolumeNameKey NSURLVolumeLocalizedNameKey
+syn keyword objcConstVar NSURLIsUbiquitousItemKey NSURLUbiquitousItemHasUnresolvedConflictsKey NSURLUbiquitousItemIsDownloadedKey NSURLUbiquitousItemIsDownloadingKey NSURLUbiquitousItemIsUploadedKey NSURLUbiquitousItemIsUploadingKey NSURLUbiquitousItemPercentDownloadedKey NSURLUbiquitousItemPercentUploadedKey
+""""""""""""
+" NSString.h
+syn match objcClass /NSString\s*\*/me=s+8,he=s+8
+syn match objcClass /NSMutableString\s*\*/me=s+15,he=s+15
+syn keyword objcType unichar
+syn keyword objcExceptionValue NSParseErrorException NSCharacterConversionException
+syn keyword objcMacro NSMaximumStringLength
+syn keyword objcEnum NSStringCompareOptions
+syn keyword objcEnumValue NSCaseInsensitiveSearch NSLiteralSearch NSBackwardsSearch NSAnchoredSearch NSNumericSearch NSDiacriticInsensitiveSearch NSWidthInsensitiveSearch NSForcedOrderingSearch NSRegularExpressionSearch 
+syn keyword objcEnum NSStringEncoding
+syn keyword objcEnumValue NSASCIIStringEncoding NSNEXTSTEPStringEncoding NSJapaneseEUCStringEncoding NSUTF8StringEncoding NSISOLatin1StringEncoding NSSymbolStringEncoding NSNonLossyASCIIStringEncoding NSShiftJISStringEncoding NSISOLatin2StringEncoding NSUnicodeStringEncoding NSWindowsCP1251StringEncoding NSWindowsCP1252StringEncoding NSWindowsCP1253StringEncoding NSWindowsCP1254StringEncoding NSWindowsCP1250StringEncoding NSISO2022JPStringEncoding NSMacOSRomanStringEncoding NSUTF16StringEncoding NSUTF16BigEndianStringEncoding NSUTF16LittleEndianStringEncoding NSUTF32StringEncoding NSUTF32BigEndianStringEncoding NSUTF32LittleEndianStringEncoding
+syn keyword objcEnum NSStringEncodingConversionOptions
+syn keyword objcEnumValue NSStringEncodingConversionAllowLossy NSStringEncodingConversionExternalRepresentation
+syn keyword objcEnum NSStringEnumerationOptions
+syn keyword objcEnumValue NSStringEnumerationByLines NSStringEnumerationByParagraphs NSStringEnumerationByComposedCharacterSequences NSStringEnumerationByWords NSStringEnumerationBySentences NSStringEnumerationReverse NSStringEnumerationSubstringNotRequired NSStringEnumerationLocalized
+" NSAttributedString.h
+syn match objcClass /NSAttributedString\s*\*/me=s+18,he=s+18
+syn match objcClass /NSMutableAttributedString\s*\*/me=s+25,he=s+25
+syn keyword objcEnum NSAttributedStringEnumerationOptions
+syn keyword objcEnumValue NSAttributedStringEnumerationReverse NSAttributedStringEnumerationLongestEffectiveRangeNotRequired
+" NSValue.h
+syn match objcClass /NSValue\s*\*/me=s+7,he=s+7
+syn match objcClass /NSNumber\s*\*/me=s+8,he=s+8
+" NSDecimalNumber.h
+syn match objcClass /NSDecimalNumber\s*\*/me=s+15,he=s+15
+syn match objcClass /NSDecimalNumberHandler\s*\*/me=s+22,he=s+22
+syn keyword objcExceptionValue NSDecimalNumberExactnessException NSDecimalNumberOverflowException NSDecimalNumberUnderflowException NSDecimalNumberDivideByZeroException
+" NSData.h
+syn match objcClass /NSData\s*\*/me=s+6,he=s+6
+syn match objcClass /NSMutableData\s*\*/me=s+13,he=s+13
+syn keyword objcEnum NSDataReadingOptions
+syn keyword objcEnumValue NSDataReadingMappedIfSafe NSDataReadingUncached NSDataReadingMappedAlways NSDataReadingMapped NSMappedRead NSUncachedRead
+syn keyword objcEnum NSDataWritingOptions
+syn keyword objcEnumValue NSDataWritingAtomic NSDataWritingWithoutOverwriting NSDataWritingFileProtectionNone NSDataWritingFileProtectionComplete NSDataWritingFileProtectionCompleteUnlessOpen NSDataWritingFileProtectionCompleteUntilFirstUserAuthentication NSDataWritingFileProtectionMask NSAtomicWrite
+syn keyword objcEnum NSDataSearchOptions
+syn keyword objcEnumValue NSDataSearchBackwards NSDataSearchAnchored
+" NSArray.h
+syn match objcClass /NSArray\s*\*/me=s+7,he=s+7
+syn match objcClass /NSMutableArray\s*\*/me=s+14,he=s+14
+syn keyword objcEnum NSBinarySearchingOptions
+syn keyword objcEnumValue NSBinarySearchingFirstEqual NSBinarySearchingLastEqual NSBinarySearchingInsertionIndex
+" NSDictionary.h
+syn match objcClass /NSDictionary\s*\*/me=s+12,he=s+12
+syn match objcClass /NSMutableDictionary\s*\*/me=s+19,he=s+19
+" NSSet.h
+syn match objcClass /NSSet\s*\*/me=s+5,me=s+5
+syn match objcClass /NSMutableSet\s*\*/me=s+12,me=s+12
+syn match objcClass /NSCountedSet\s*\*/me=s+12,me=s+12
+" NSOrderedSet.h
+syn match objcClass /NSOrderedSet\s*\*/me=s+12,me=s+12
+syn match objcClass /NSMutableOrderedSet\s*\*/me=s+19,me=s+19
+"""""""""""""""""""
+" NSPathUtilities.h
+syn keyword objcEnum NSSearchPathDirectory
+syn keyword objcEnumValue NSApplicationDirectory NSDemoApplicationDirectory NSDeveloperApplicationDirectory NSAdminApplicationDirectory NSLibraryDirectory NSDeveloperDirectory NSUserDirectory NSDocumentationDirectory NSDocumentDirectory NSCoreServiceDirectory NSAutosavedInformationDirectory NSDesktopDirectory NSCachesDirectory NSApplicationSupportDirectory NSDownloadsDirectory NSInputMethodsDirectory NSMoviesDirectory NSMusicDirectory NSPicturesDirectory NSPrinterDescriptionDirectory NSSharedPublicDirectory NSPreferencePanesDirectory NSApplicationScriptsDirectory NSItemReplacementDirectory NSAllApplicationsDirectory NSAllLibrariesDirectory NSTrashDirectory
+syn keyword objcEnum NSSearchPathDomainMask
+syn keyword objcEnumValue NSUserDomainMask NSLocalDomainMask NSNetworkDomainMask NSSystemDomainMask NSAllDomainsMask
+" NSFileManger.h
+syn match objcClass /NSFileManager\s*\*/me=s+13,he=s+13
+syn match objcClass /NSDirectoryEnumerator\s*\*/me=s+21,he=s+21
+syn keyword objcEnum NSVolumeEnumerationOptions
+syn keyword objcEnumValue NSVolumeEnumerationSkipHiddenVolumes NSVolumeEnumerationProduceFileReferenceURLs 
+syn keyword objcEnum NSDirectoryEnumerationOptions
+syn keyword objcEnumValue NSDirectoryEnumerationSkipsSubdirectoryDescendants NSDirectoryEnumerationSkipsPackageDescendants NSDirectoryEnumerationSkipsHiddenFiles 
+syn keyword objcEnum NSFileManagerItemReplacementOptions
+syn keyword objcEnumValue NSFileManagerItemReplacementUsingNewMetadataOnly NSFileManagerItemReplacementWithoutDeletingBackupItem
+syn keyword objcNotificationValue NSUbiquityIdentityDidChangeNotification
+syn keyword objcConstVar NSFileType NSFileTypeDirectory NSFileTypeRegular NSFileTypeSymbolicLink NSFileTypeSocket NSFileTypeCharacterSpecial NSFileTypeBlockSpecial NSFileTypeUnknown NSFileSize NSFileModificationDate NSFileReferenceCount NSFileDeviceIdentifier NSFileOwnerAccountName NSFileGroupOwnerAccountName NSFilePosixPermissions NSFileSystemNumber NSFileSystemFileNumber NSFileExtensionHidden NSFileHFSCreatorCode NSFileHFSTypeCode NSFileImmutable NSFileAppendOnly NSFileCreationDate NSFileOwnerAccountID NSFileGroupOwnerAccountID NSFileBusy NSFileProtectionKey NSFileProtectionNone NSFileProtectionComplete NSFileProtectionCompleteUnlessOpen NSFileProtectionCompleteUntilFirstUserAuthentication NSFileSystemSize NSFileSystemFreeSize NSFileSystemNodes NSFileSystemFreeNodes
+" NSFileHandle.h
+syn match objcClass /NSFileHandle\s*\*/me=s+12,he=s+12
+syn keyword objcExceptionValue NSFileHandleOperationException
+syn keyword objcNotificationValue NSFileHandleReadCompletionNotification NSFileHandleReadToEndOfFileCompletionNotification NSFileHandleConnectionAcceptedNotification NSFileHandleDataAvailableNotification NSFileHandleNotificationDataItem NSFileHandleNotificationFileHandleItem NSFileHandleNotificationMonitorModes
+syn match objcClass /NSPipe\s*\*/me=s+6,he=s+6
+""""""""""""
+" NSLocale.h
+syn match objcClass /NSLocale\s*\*/me=s+8,he=s+8
+syn keyword objcEnum NSLocaleLanguageDirection
+syn keyword objcEnumValue NSLocaleLanguageDirectionUnknown NSLocaleLanguageDirectionLeftToRight NSLocaleLanguageDirectionRightToLeft NSLocaleLanguageDirectionTopToBottom NSLocaleLanguageDirectionBottomToTop
+syn keyword objcNotificationValue NSCurrentLocaleDidChangeNotification
+syn keyword objcConstVar NSLocaleIdentifier NSLocaleLanguageCode NSLocaleCountryCode NSLocaleScriptCode NSLocaleVariantCode NSLocaleExemplarCharacterSet NSLocaleCalendar NSLocaleCollationIdentifier NSLocaleUsesMetricSystem NSLocaleMeasurementSystem NSLocaleDecimalSeparator NSLocaleGroupingSeparator NSLocaleCurrencySymbol NSLocaleCurrencyCode NSLocaleCollatorIdentifier NSLocaleQuotationBeginDelimiterKey NSLocaleQuotationEndDelimiterKey NSLocaleAlternateQuotationBeginDelimiterKey NSLocaleAlternateQuotationEndDelimiterKey NSGregorianCalendar NSBuddhistCalendar NSChineseCalendar NSHebrewCalendar NSIslamicCalendar NSIslamicCivilCalendar NSJapaneseCalendar NSRepublicOfChinaCalendar NSPersianCalendar NSIndianCalendar NSISO8601Calendar 
+" NSFormatter.h
+syn match objcClass /NSFormatter\s*\*/me=s+11,he=s+11
+" NSNumberFormatter.h
+syn match objcClass /NSNumberFormatter\s*\*/me=s+17,he=s+17
+syn keyword objcEnum NSNumberFormatterStyle
+syn keyword objcEnumValue NSNumberFormatterNoStyle NSNumberFormatterDecimalStyle NSNumberFormatterCurrencyStyle NSNumberFormatterPercentStyle NSNumberFormatterScientificStyle NSNumberFormatterSpellOutStyle
+syn keyword objcEnum NSNumberFormatterBehavior
+syn keyword objcEnumValue NSNumberFormatterBehaviorDefault NSNumberFormatterBehavior10_0 NSNumberFormatterBehavior10_4
+syn keyword objcEnum NSNumberFormatterPadPosition
+syn keyword objcEnumValue NSNumberFormatterPadBeforePrefix NSNumberFormatterPadAfterPrefix NSNumberFormatterPadBeforeSuffix NSNumberFormatterPadAfterSuffix
+syn keyword objcEnum NSNumberFormatterRoundingMode
+syn keyword objcEnumValue NSNumberFormatterRoundCeiling NSNumberFormatterRoundFloor NSNumberFormatterRoundDown NSNumberFormatterRoundUp NSNumberFormatterRoundHalfEven NSNumberFormatterRoundHalfDown NSNumberFormatterRoundHalfUp
+" NSDateFormatter.h
+syn match objcClass /NSDateFormatter\s*\*/me=s+15,he=s+15
+syn keyword objcEnum NSDateFormatterStyle
+syn keyword objcEnumValue NSDateFormatterNoStyle NSDateFormatterShortStyle NSDateFormatterMediumStyle NSDateFormatterLongStyle NSDateFormatterFullStyle
+syn keyword objcEnum NSDateFormatterBehavior
+syn keyword objcEnumValue NSDateFormatterBehaviorDefault NSDateFormatterBehavior10_0 NSDateFormatterBehavior10_4
+" NSCalendar.h
+syn match objcClass /NSCalendar\s*\*/me=s+10,he=s+10
+syn keyword objcEnum NSCalendarUnit
+syn keyword objcEnumValue NSEraCalendarUnit NSYearCalendarUnit NSMonthCalendarUnit NSDayCalendarUnit NSHourCalendarUnit NSMinuteCalendarUnit NSSecondCalendarUnit NSWeekCalendarUnit NSWeekdayCalendarUnit NSWeekdayOrdinalCalendarUnit NSQuarterCalendarUnit NSWeekOfMonthCalendarUnit NSWeekOfYearCalendarUnit NSYearForWeekOfYearCalendarUnit NSCalendarCalendarUnit NSTimeZoneCalendarUnit
+syn keyword objcEnumValue NSWrapCalendarComponents NSUndefinedDateComponent
+syn match objcClass /NSDateComponents\s*\*/me=s+16,he=s+16
+" NSTimeZone.h
+syn match objcClass /NSTimeZone\s*\*/me=s+10,he=s+10
+syn keyword objcEnum NSTimeZoneNameStyle
+syn keyword objcEnumValue NSTimeZoneNameStyleStandard NSTimeZoneNameStyleShortStandard NSTimeZoneNameStyleDaylightSaving NSTimeZoneNameStyleShortDaylightSaving NSTimeZoneNameStyleGeneric NSTimeZoneNameStyleShortGeneric
+syn keyword objcNotificationValue NSSystemTimeZoneDidChangeNotification
+"""""""""""
+" NSCoder.h
+syn match objcClass /NSCoder\s*\*/me=s+7,he=s+7
+" NSArchiver.h
+syn match objcClass /NSArchiver\s*\*/me=s+10,he=s+10
+syn match objcClass /NSUnarchiver\s*\*/me=s+12,he=s+12
+syn keyword objcExceptionValue NSInconsistentArchiveException
+" NSKeyedArchiver.h
+syn match objcClass /NSKeyedArchiver\s*\*/me=s+15,he=s+15
+syn match objcClass /NSKeyedUnarchiver\s*\*/me=s+17,he=s+17
+syn keyword objcExceptionValue NSInvalidArchiveOperationException NSInvalidUnarchiveOperationException
+""""""""""""""""""
+" NSPropertyList.h
+syn keyword objcEnum NSPropertyListMutabilityOptions
+syn keyword objcEnumValue NSPropertyListImmutable NSPropertyListMutableContainers NSPropertyListMutableContainersAndLeaves
+syn keyword objcEnum NSPropertyListFormat
+syn keyword objcEnumValue NSPropertyListOpenStepFormat NSPropertyListXMLFormat_v1_0 NSPropertyListBinaryFormat_v1_0
+syn keyword objcType NSPropertyListReadOptions NSPropertyListWriteOptions
+" NSUserDefaults.h
+syn match objcClass /NSUserDefaults\s*\*/me=s+14,he=s+14
+syn keyword objcConstVar NSGlobalDomain NSArgumentDomain NSRegistrationDomain
+syn keyword objcNotificationValue NSUserDefaultsDidChangeNotification
+" NSBundle.h
+syn match objcClass /NSBundle\s*\*/me=s+8,he=s+8
+syn keyword objcEnumValue NSBundleExecutableArchitectureI386 NSBundleExecutableArchitecturePPC NSBundleExecutableArchitectureX86_64 NSBundleExecutableArchitecturePPC64
+syn keyword objcNotificationValue NSBundleDidLoadNotification NSLoadedClasses
+"""""""""""""""""
+" NSProcessInfo.h
+syn match objcClass /NSProcessInfo\s*\*/me=s+13,he=s+13
+syn keyword objcEnumValue NSWindowsNTOperatingSystem NSWindows95OperatingSystem NSSolarisOperatingSystem NSHPUXOperatingSystem NSMACHOperatingSystem NSSunOSOperatingSystem NSOSF1OperatingSystem
+" NSTask.h
+syn match objcClass /NSTask\s*\*/me=s+6,he=s+6
+syn keyword objcEnum NSTaskTerminationReason
+syn keyword objcEnumValue NSTaskTerminationReasonExit NSTaskTerminationReasonUncaughtSignal
+syn keyword objcNotificationValue NSTaskDidTerminateNotification
+" NSThread.h
+syn match objcClass /NSThread\s*\*/me=s+8,he=s+8
+syn keyword objcNotificationValue NSWillBecomeMultiThreadedNotification NSDidBecomeSingleThreadedNotification NSThreadWillExitNotification
+" NSLock.h
+syn match objcClass /NSLock\s*\*/me=s+6,he=s+6
+syn match objcClass /NSConditionLock\s*\*/me=s+15,he=s+15
+syn match objcClass /NSRecursiveLock\s*\*/me=s+15,he=s+15
+" NSDictributedLock
+syn match objcClass /NSDistributedLock\s*\*/me=s+17,he=s+17
+" NSOperation.h
+""""""""""""""""
+syn match objcClass /NSOperation\s*\*/me=s+11,he=s+11
+syn keyword objcEnum NSOperationQueuePriority
+syn keyword objcEnumValue NSOperationQueuePriorityVeryLow NSOperationQueuePriorityLow NSOperationQueuePriorityNormal NSOperationQueuePriorityHigh NSOperationQueuePriorityVeryHigh
+syn match objcClass /NSBlockOperation\s*\*/me=s+16,he=s+16
+syn match objcClass /NSInvocationOperation\s*\*/me=s+21,he=s+21
+syn keyword objcExceptionValue NSInvocationOperationVoidResultException NSInvocationOperationCancelledException
+syn match objcClass /NSOperationQueue\s*\*/me=s+16,he=s+16
+syn keyword objcEnumValue NSOperationQueueDefaultMaxConcurrentOperationCount
+" NSConnection.h
+syn match objcClass /NSConnection\s*\*/me=s+12,he=s+12
+syn keyword objcConstVar NSConnectionReplyMode
+syn keyword objcNotificationValue NSConnectionDidDieNotification NSConnectionDidInitializeNotification
+syn keyword objcExceptionValue NSFailedAuthenticationException
+" NSPort.h
+syn match objcClass /NSPort\s*\*/me=s+6,he=s+6
+syn keyword objcType NSSocketNativeHandle
+syn keyword objcNotificationValue NSPortDidBecomeInvalidNotification
+syn match objcClass /NSMachPort\s*\*/me=s+10,he=s+10
+syn keyword objcEnumValue NSMachPortDeallocateNone NSMachPortDeallocateSendRight NSMachPortDeallocateReceiveRight
+syn match objcClass /NSMessagePort\s*\*/me=s+13,he=s+13
+syn match objcClass /NSSocketPort\s*\*/me=s+12,he=s+12
+" NSPortMessage.h
+syn match objcClass /NSPortMessage\s*\*/me=s+13,he=s+13
+" NSDistantObject.h
+syn match objcClass /NSDistantObject\s*\*/me=s+15,he=s+15
+" NSPortNameServer.h
+syn match objcClass /NSPortNameServer\s*\*/me=s+16,he=s+16
+syn match objcClass /NSMessagePortNameServer\s*\*/me=s+23,he=s+23
+syn match objcClass /NSSocketPortNameServer\s*\*/me=s+22,he=s+22
+" NSHost.h
+syn match objcClass /NSHost\s*\*/me=s+6,he=s+6
+" NSInvocation.h
+syn match objcClass /NSInvocation\s*\*/me=s+12,he=s+12
+" NSMethodSignature.h
+syn match objcClass /NSMethodSignature\s*\*/me=s+17,he=s+17
+"""""
+" NSScanner.h
+syn match objcClass /NSScanner\s*\*/me=s+9,he=s+9
+" NSTimer.h
+syn match objcClass /NSTimer\s*\*/me=s+7,he=s+7
+" NSAutoreleasePool.h
+syn match objcClass /NSAutoreleasePool\s*\*/me=s+17,he=s+17
+" NSRunLoop.h
+syn match objcClass /NSRunLoop\s*\*/me=s+9,he=s+9
+syn keyword objcConstVar NSDefaultRunLoopMode NSRunLoopCommonModes
+" NSNull.h
+syn match objcClass /NSNull\s*\*/me=s+6,he=s+6
+" NSProxy.h
+syn match objcClass /NSProxy\s*\*/me=s+7,he=s+7
+" NSObject.h
+syn match objcClass /NSObject\s*\*/me=s+8,he=s+8
+
+""" Default Highlighting
+hi def link objcPreProcMacro                cConstant
+hi def link objcPrincipalType               cType
+hi def link objcUsefulTerm                  cConstant
+hi def link objcImport                      cInclude
+hi def link objcImported                    cString
+hi def link objcObjDef                      cOperator
+hi def link objcProtocol                    cOperator
+hi def link objcProperty                    cOperator
+hi def link objcIvarScope                   cOperator
+hi def link objcInternalRep                 cOperator
+hi def link objcException                   cOperator
+hi def link objcThread                      cOperator
+hi def link objcPool                        cOperator
+hi def link objcSpecial                     cSpecial
+hi def link objcString                      cString
+hi def link objcHiddenArgument              cStatement
+hi def link objcBlocksQualifier             cStorageClass
+hi def link objcObjectLifetimeQualifier     cStorageClass
+hi def link objcTollFreeBridgeQualifier     cStorageClass
+hi def link objcRemoteMessagingQualifier    cStorageClass
+hi def link objcFastEnumKeyword             cStatement
+hi def link objcLiteralSyntaxNumber         cNumber
+hi def link objcLiteralSyntaxChar           cCharacter
+hi def link objcLiteralSyntaxSpecialChar    cCharacter
+hi def link objcLiteralSyntaxOp             cOperator
+hi def link objcDeclPropAccessorName        cConstant
+hi def link objcDeclPropAccessorType        cConstant
+hi def link objcDeclPropAssignSemantics     cConstant
+hi def link objcDeclPropAtomicity           cConstant
+hi def link objcDeclPropARC                 cConstant
+hi def link objcInstanceMethod              Function
+hi def link objcClassMethod                 Function
+hi def link objcType                        cType
+hi def link objcClass                       cType
+hi def link objcMacro                       cConstant
+hi def link objcEnum                        cType
+hi def link objcEnumValue                   cConstant
+hi def link objcExceptionValue              cConstant
+hi def link objcNotificationValue           cConstant
+hi def link objcConstVar                    cConstant
+
+""" Final step
 let b:current_syntax = "objc"
+let &cpo = s:cpo_save
+unlet s:cpo_save
 
-let &cpo = s:keepcpo
-unlet s:keepcpo
-
-" vim: ts=8
+" vim: ts=8 sw=2 sts=2
diff --git a/runtime/syntax/proto.vim b/runtime/syntax/proto.vim
new file mode 100644
index 0000000..4d6a77e
--- /dev/null
+++ b/runtime/syntax/proto.vim
@@ -0,0 +1,74 @@
+" syntax file for Protocol Buffers - Google's data interchange format
+"
+" Copyright 2008 Google Inc.  All rights reserved.
+"
+" Permission is hereby granted, free of charge, to any person obtaining a copy
+" of this software and associated documentation files (the "Software"), to deal
+" in the Software without restriction, including without limitation the rights
+" to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+" copies of the Software, and to permit persons to whom the Software is
+" furnished to do so, subject to the following conditions:
+"
+" The above copyright notice and this permission notice shall be included in
+" all copies or substantial portions of the Software.
+"
+" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+" AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+" LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+" OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+" THE SOFTWARE.
+"
+" http://code.google.com/p/protobuf/
+
+if version < 600
+  syntax clear
+elseif exists("b:current_syntax")
+  finish
+endif
+
+syn case match
+
+syn keyword protoTodo       contained TODO FIXME XXX
+syn cluster protoCommentGrp contains=protoTodo
+
+syn keyword protoSyntax     syntax import option
+syn keyword protoStructure  package message group
+syn keyword protoRepeat     optional required repeated
+syn keyword protoDefault    default
+syn keyword protoExtend     extend extensions to max
+syn keyword protoRPC        service rpc returns
+
+syn keyword protoType      int32 int64 uint32 uint64 sint32 sint64
+syn keyword protoType      fixed32 fixed64 sfixed32 sfixed64
+syn keyword protoType      float double bool string bytes
+syn keyword protoTypedef   enum
+syn keyword protoBool      true false
+
+syn match   protoInt     /-\?\<\d\+\>/
+syn match   protoInt     /\<0[xX]\x+\>/
+syn match   protoFloat   /\<-\?\d*\(\.\d*\)\?/
+syn region  protoComment start="\/\*" end="\*\/" contains=@protoCommentGrp
+syn region  protoComment start="//" skip="\\$" end="$" keepend contains=@protoCommentGrp
+syn region  protoString  start=/"/ skip=/\\./ end=/"/
+syn region  protoString  start=/'/ skip=/\\./ end=/'/
+
+hi def link protoTodo         Todo
+
+hi def link protoSyntax       Include
+hi def link protoStructure    Structure
+hi def link protoRepeat       Repeat
+hi def link protoDefault      Keyword
+hi def link protoExtend       Keyword
+hi def link protoRPC          Keyword
+hi def link protoType         Type
+hi def link protoTypedef      Typedef
+hi def link protoBool         Boolean
+
+hi def link protoInt          Number
+hi def link protoFloat        Float
+hi def link protoComment      Comment
+hi def link protoString       String
+
+let b:current_syntax = "proto"
diff --git a/runtime/syntax/ruby.vim b/runtime/syntax/ruby.vim
index e3aee12..28f553d 100644
--- a/runtime/syntax/ruby.vim
+++ b/runtime/syntax/ruby.vim
@@ -1,9 +1,7 @@
 " Vim syntax file
 " Language:		Ruby
 " Maintainer:		Doug Kearns <dougkearns@gmail.com>
-" Last Change:		2009 Dec 2
-" URL:			http://vim-ruby.rubyforge.org
-" Anon CVS:		See above site
+" URL:			https://github.com/vim-ruby/vim-ruby
 " Release Coordinator:	Doug Kearns <dougkearns@gmail.com>
 " ----------------------------------------------------------------------------
 "
@@ -32,8 +30,8 @@
 
 " Operators
 if exists("ruby_operators")
-  syn match  rubyOperator	 "\%([~!^&|*/%+-]\|\%(class\s*\)\@<!<<\|<=>\|<=\|\%(<\|\<class\s\+\u\w*\s*\)\@<!<[^<]\@=\|===\|==\|=\~\|>>\|>=\|=\@<!>\|\*\*\|\.\.\.\|\.\.\|::\)"
-  syn match  rubyPseudoOperator  "\%(-=\|/=\|\*\*=\|\*=\|&&=\|&=\|&&\|||=\||=\|||\|%=\|+=\|!\~\|!=\)"
+  syn match  rubyOperator "[~!^&|*/%+-]\|\%(class\s*\)\@<!<<\|<=>\|<=\|\%(<\|\<class\s\+\u\w*\s*\)\@<!<[^<]\@=\|===\|==\|=\~\|>>\|>=\|=\@<!>\|\*\*\|\.\.\.\|\.\.\|::"
+  syn match  rubyOperator "->\|-=\|/=\|\*\*=\|\*=\|&&=\|&=\|&&\|||=\||=\|||\|%=\|+=\|!\~\|!="
   syn region rubyBracketOperator matchgroup=rubyOperator start="\%(\w[?!]\=\|[]})]\)\@<=\[\s*" end="\s*]" contains=ALLBUT,@rubyNotTop
 endif
 
@@ -95,86 +93,89 @@
 syn match rubyBlockArgument	    "&[_[:lower:]][_[:alnum:]]"		 contains=NONE display transparent
 
 syn match  rubyConstant		"\%(\%([.@$]\@<!\.\)\@<!\<\|::\)\_s*\zs\u\w*\%(\>\|::\)\@=\%(\s*(\)\@!"
-syn match  rubyClassVariable	"@@\h\w*" display
-syn match  rubyInstanceVariable "@\h\w*"  display
-syn match  rubyGlobalVariable	"$\%(\h\w*\|-.\)"
-syn match  rubySymbol		"[]})\"':]\@<!:\%(\^\|\~\|<<\|<=>\|<=\|<\|===\|==\|=\~\|>>\|>=\|>\||\|-@\|-\|/\|\[]=\|\[]\|\*\*\|\*\|&\|%\|+@\|+\|`\)"
+syn match  rubyClassVariable	"@@\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*" display
+syn match  rubyInstanceVariable "@\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*"  display
+syn match  rubyGlobalVariable	"$\%(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\|-.\)"
+syn match  rubySymbol		"[]})\"':]\@<!:\%(\^\|\~\|<<\|<=>\|<=\|<\|===\|[=!]=\|[=!]\~\|!\|>>\|>=\|>\||\|-@\|-\|/\|\[]=\|\[]\|\*\*\|\*\|&\|%\|+@\|+\|`\)"
 syn match  rubySymbol		"[]})\"':]\@<!:\$\%(-.\|[`~<=>_,;:!?/.'"@$*\&+0]\)"
-syn match  rubySymbol		"[]})\"':]\@<!:\%(\$\|@@\=\)\=\h\w*"
-syn match  rubySymbol		"[]})\"':]\@<!:\h\w*\%([?!=]>\@!\)\="
+syn match  rubySymbol		"[]})\"':]\@<!:\%(\$\|@@\=\)\=\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*"
+syn match  rubySymbol		"[]})\"':]\@<!:\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\%([?!=]>\@!\)\="
 syn match  rubySymbol		"\%([{(,]\_s*\)\@<=\l\w*[!?]\=::\@!"he=e-1
-syn match  rubySymbol		"[]})\"':]\@<!\h\w*[!?]\=:\s\@="he=e-1
+syn match  rubySymbol		"[]})\"':]\@<!\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*[!?]\=:\s\@="he=e-1
+syn match  rubySymbol		"\%([{(,]\_s*\)\@<=[[:space:],{]\l\w*[!?]\=::\@!"hs=s+1,he=e-1
+syn match  rubySymbol		"[[:space:],{]\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*[!?]\=:\s\@="hs=s+1,he=e-1
 syn region rubySymbol		start="[]})\"':]\@<!:'"  end="'"  skip="\\\\\|\\'"  contains=rubyQuoteEscape fold
 syn region rubySymbol		start="[]})\"':]\@<!:\"" end="\"" skip="\\\\\|\\\"" contains=@rubyStringSpecial fold
 
-syn match  rubyBlockParameter	  "\h\w*" contained
+syn match  rubyBlockParameter	  "\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*" contained
 syn region rubyBlockParameterList start="\%(\%(\<do\>\|{\)\s*\)\@<=|" end="|" oneline display contains=rubyBlockParameter
 
 syn match rubyInvalidVariable	 "$[^ A-Za-z_-]"
-syn match rubyPredefinedVariable #$[!$&"'*+,./0:;<=>?@\`~1-9]#
+syn match rubyPredefinedVariable #$[!$&"'*+,./0:;<=>?@\`~]#
+syn match rubyPredefinedVariable "$\d\+"										   display
 syn match rubyPredefinedVariable "$_\>"											   display
 syn match rubyPredefinedVariable "$-[0FIKadilpvw]\>"									   display
 syn match rubyPredefinedVariable "$\%(deferr\|defout\|stderr\|stdin\|stdout\)\>"					   display
 syn match rubyPredefinedVariable "$\%(DEBUG\|FILENAME\|KCODE\|LOADED_FEATURES\|LOAD_PATH\|PROGRAM_NAME\|SAFE\|VERBOSE\)\>" display
 syn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(MatchingData\|ARGF\|ARGV\|ENV\)\>\%(\s*(\)\@!"
-syn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(DATA\|FALSE\|NIL\|RUBY_PLATFORM\|RUBY_RELEASE_DATE\)\>\%(\s*(\)\@!"
-syn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(RUBY_VERSION\|STDERR\|STDIN\|STDOUT\|TOPLEVEL_BINDING\|TRUE\)\>\%(\s*(\)\@!"
-"Obsolete Global Constants
-"syn match rubyPredefinedConstant "\%(::\)\=\zs\%(PLATFORM\|RELEASE_DATE\|VERSION\)\>"
-"syn match rubyPredefinedConstant "\%(::\)\=\zs\%(NotImplementError\)\>"
+syn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(DATA\|FALSE\|NIL\)\>\%(\s*(\)\@!"
+syn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(STDERR\|STDIN\|STDOUT\|TOPLEVEL_BINDING\|TRUE\)\>\%(\s*(\)\@!"
+syn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(RUBY_\%(VERSION\|RELEASE_DATE\|PLATFORM\|PATCHLEVEL\|REVISION\|DESCRIPTION\|COPYRIGHT\|ENGINE\)\)\>\%(\s*(\)\@!"
 
 " Normal Regular Expression
-syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="\%(\%(^\|\<\%(and\|or\|while\|until\|unless\|if\|elsif\|when\|not\|then\|else\)\|[;\~=!|&(,[>]\)\s*\)\@<=/" end="/[iomxneus]*" skip="\\\\\|\\/" contains=@rubyRegexpSpecial keepend fold
+syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="\%(\%(^\|\<\%(and\|or\|while\|until\|unless\|if\|elsif\|when\|not\|then\|else\)\|[;\~=!|&(,[<>?:*+-]\)\s*\)\@<=/" end="/[iomxneus]*" skip="\\\\\|\\/" contains=@rubyRegexpSpecial fold
 syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="\%(\h\k*\s\+\)\@<=/[ \t=]\@!" end="/[iomxneus]*" skip="\\\\\|\\/" contains=@rubyRegexpSpecial fold
 
 " Generalized Regular Expression
-syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)"	end="\z1[iomxneus]*" skip="\\\\\|\\\z1" contains=@rubyRegexpSpecial fold
-syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r{"				end="}[iomxneus]*"   skip="\\\\\|\\}"	contains=@rubyRegexpSpecial fold
-syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r<"				end=">[iomxneus]*"   skip="\\\\\|\\>"	contains=@rubyRegexpSpecial,rubyNestedAngleBrackets,rubyDelimEscape fold
-syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r\["				end="\][iomxneus]*"  skip="\\\\\|\\\]"	contains=@rubyRegexpSpecial fold
-syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r("				end=")[iomxneus]*"   skip="\\\\\|\\)"	contains=@rubyRegexpSpecial fold
+syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r\z([~`!@#$%^&*_\-+=|\:;"',.? /]\)" end="\z1[iomxneus]*" skip="\\\\\|\\\z1" contains=@rubyRegexpSpecial fold
+syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r{"				 end="}[iomxneus]*"   skip="\\\\\|\\}"	 contains=@rubyRegexpSpecial fold
+syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r<"				 end=">[iomxneus]*"   skip="\\\\\|\\>"	 contains=@rubyRegexpSpecial,rubyNestedAngleBrackets,rubyDelimEscape fold
+syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r\["				 end="\][iomxneus]*"  skip="\\\\\|\\\]"	 contains=@rubyRegexpSpecial fold
+syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r("				 end=")[iomxneus]*"   skip="\\\\\|\\)"	 contains=@rubyRegexpSpecial fold
 
 " Normal String and Shell Command Output
-syn region rubyString matchgroup=rubyStringDelimiter start="\"" end="\"" skip="\\\\\|\\\"" contains=@rubyStringSpecial fold
-syn region rubyString matchgroup=rubyStringDelimiter start="'"	end="'"  skip="\\\\\|\\'"  contains=rubyQuoteEscape    fold
+syn region rubyString matchgroup=rubyStringDelimiter start="\"" end="\"" skip="\\\\\|\\\"" contains=@rubyStringSpecial,@Spell fold
+syn region rubyString matchgroup=rubyStringDelimiter start="'"	end="'"  skip="\\\\\|\\'"  contains=rubyQuoteEscape,@Spell    fold
 syn region rubyString matchgroup=rubyStringDelimiter start="`"	end="`"  skip="\\\\\|\\`"  contains=@rubyStringSpecial fold
 
 " Generalized Single Quoted String, Symbol and Array of Strings
-syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" fold
-syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]{"				   end="}"   skip="\\\\\|\\}"	fold contains=rubyNestedCurlyBraces,rubyDelimEscape
-syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]<"				   end=">"   skip="\\\\\|\\>"	fold contains=rubyNestedAngleBrackets,rubyDelimEscape
-syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]\["				   end="\]"  skip="\\\\\|\\\]"	fold contains=rubyNestedSquareBrackets,rubyDelimEscape
-syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]("				   end=")"   skip="\\\\\|\\)"	fold contains=rubyNestedParentheses,rubyDelimEscape
-syn region rubySymbol matchgroup=rubySymbolDelimiter start="%[s]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)"  end="\z1" skip="\\\\\|\\\z1" fold
-syn region rubySymbol matchgroup=rubySymbolDelimiter start="%[s]{"				   end="}"   skip="\\\\\|\\}"	fold contains=rubyNestedCurlyBraces,rubyDelimEscape
-syn region rubySymbol matchgroup=rubySymbolDelimiter start="%[s]<"				   end=">"   skip="\\\\\|\\>"	fold contains=rubyNestedAngleBrackets,rubyDelimEscape
-syn region rubySymbol matchgroup=rubySymbolDelimiter start="%[s]\["				   end="\]"  skip="\\\\\|\\\]"	fold contains=rubyNestedSquareBrackets,rubyDelimEscape
-syn region rubySymbol matchgroup=rubySymbolDelimiter start="%[s]("				   end=")"   skip="\\\\\|\\)"	fold contains=rubyNestedParentheses,rubyDelimEscape
+syn region rubyString matchgroup=rubyStringDelimiter start="%[qwi]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" fold
+syn region rubyString matchgroup=rubyStringDelimiter start="%[qwi]{"				   end="}"   skip="\\\\\|\\}"	fold contains=rubyNestedCurlyBraces,rubyDelimEscape
+syn region rubyString matchgroup=rubyStringDelimiter start="%[qwi]<"				   end=">"   skip="\\\\\|\\>"	fold contains=rubyNestedAngleBrackets,rubyDelimEscape
+syn region rubyString matchgroup=rubyStringDelimiter start="%[qwi]\["				   end="\]"  skip="\\\\\|\\\]"	fold contains=rubyNestedSquareBrackets,rubyDelimEscape
+syn region rubyString matchgroup=rubyStringDelimiter start="%[qwi]("				   end=")"   skip="\\\\\|\\)"	fold contains=rubyNestedParentheses,rubyDelimEscape
+syn region rubyString matchgroup=rubyStringDelimiter start="%q "				   end=" "   skip="\\\\\|\\)"	fold
+syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s\z([~`!@#$%^&*_\-+=|\:;"',.? /]\)"   end="\z1" skip="\\\\\|\\\z1" fold
+syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s{"				   end="}"   skip="\\\\\|\\}"	fold contains=rubyNestedCurlyBraces,rubyDelimEscape
+syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s<"				   end=">"   skip="\\\\\|\\>"	fold contains=rubyNestedAngleBrackets,rubyDelimEscape
+syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s\["				   end="\]"  skip="\\\\\|\\\]"	fold contains=rubyNestedSquareBrackets,rubyDelimEscape
+syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s("				   end=")"   skip="\\\\\|\\)"	fold contains=rubyNestedParentheses,rubyDelimEscape
 
 " Generalized Double Quoted String and Array of Strings and Shell Command Output
 " Note: %= is not matched here as the beginning of a double quoted string
 syn region rubyString matchgroup=rubyStringDelimiter start="%\z([~`!@#$%^&*_\-+|\:;"',.?/]\)"	    end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold
-syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold
-syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\={"				    end="}"   skip="\\\\\|\\}"	 contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimEscape    fold
-syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=<"				    end=">"   skip="\\\\\|\\>"	 contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimEscape  fold
-syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=\["				    end="\]"  skip="\\\\\|\\\]"	 contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimEscape fold
-syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=("				    end=")"   skip="\\\\\|\\)"	 contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimEscape    fold
+syn region rubyString matchgroup=rubyStringDelimiter start="%[QWIx]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold
+syn region rubyString matchgroup=rubyStringDelimiter start="%[QWIx]\={"				    end="}"   skip="\\\\\|\\}"	 contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimEscape    fold
+syn region rubyString matchgroup=rubyStringDelimiter start="%[QWIx]\=<"				    end=">"   skip="\\\\\|\\>"	 contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimEscape  fold
+syn region rubyString matchgroup=rubyStringDelimiter start="%[QWIx]\=\["				    end="\]"  skip="\\\\\|\\\]"	 contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimEscape fold
+syn region rubyString matchgroup=rubyStringDelimiter start="%[QWIx]\=("				    end=")"   skip="\\\\\|\\)"	 contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimEscape    fold
+syn region rubyString matchgroup=rubyStringDelimiter start="%[Qx] "				    end=" "   skip="\\\\\|\\)"   contains=@rubyStringSpecial fold
 
 " Here Document
-syn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<-\=\zs\%(\h\w*\)+	 end=+$+ oneline contains=ALLBUT,@rubyNotTop
+syn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<-\=\zs\%(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)+	 end=+$+ oneline contains=ALLBUT,@rubyNotTop
 syn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<-\=\zs"\%([^"]*\)"+ end=+$+ oneline contains=ALLBUT,@rubyNotTop
 syn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<-\=\zs'\%([^']*\)'+ end=+$+ oneline contains=ALLBUT,@rubyNotTop
 syn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<-\=\zs`\%([^`]*\)`+ end=+$+ oneline contains=ALLBUT,@rubyNotTop
 
-syn region rubyString start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<\z(\h\w*\)\ze+hs=s+2	matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend
-syn region rubyString start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<"\z([^"]*\)"\ze+hs=s+2	matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend
-syn region rubyString start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<'\z([^']*\)'\ze+hs=s+2	matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart			fold keepend
-syn region rubyString start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<`\z([^`]*\)`\ze+hs=s+2	matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend
+syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<\z(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)\ze\%(.*<<-\=['`"]\=\h\)\@!+hs=s+2	matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,rubyHeredoc,@rubyStringSpecial fold keepend
+syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<"\z([^"]*\)"\ze\%(.*<<-\=['`"]\=\h\)\@!+hs=s+2	matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,rubyHeredoc,@rubyStringSpecial fold keepend
+syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<'\z([^']*\)'\ze\%(.*<<-\=['`"]\=\h\)\@!+hs=s+2	matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,rubyHeredoc			fold keepend
+syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<`\z([^`]*\)`\ze\%(.*<<-\=['`"]\=\h\)\@!+hs=s+2	matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,rubyHeredoc,@rubyStringSpecial fold keepend
 
-syn region rubyString start=+\%(\%(class\s*\|\%([]}).]\|::\)\)\_s*\|\w\)\@<!<<-\z(\h\w*\)\ze+hs=s+3    matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend
-syn region rubyString start=+\%(\%(class\s*\|\%([]}).]\|::\)\)\_s*\|\w\)\@<!<<-"\z([^"]*\)"\ze+hs=s+3  matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend
-syn region rubyString start=+\%(\%(class\s*\|\%([]}).]\|::\)\)\_s*\|\w\)\@<!<<-'\z([^']*\)'\ze+hs=s+3  matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart		     fold keepend
-syn region rubyString start=+\%(\%(class\s*\|\%([]}).]\|::\)\)\_s*\|\w\)\@<!<<-`\z([^`]*\)`\ze+hs=s+3  matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend
+syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@<!<<-\z(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)\ze\%(.*<<-\=['`"]\=\h\)\@!+hs=s+3    matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend
+syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@<!<<-"\z([^"]*\)"\ze\%(.*<<-\=['`"]\=\h\)\@!+hs=s+3  matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend
+syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@<!<<-'\z([^']*\)'\ze\%(.*<<-\=['`"]\=\h\)\@!+hs=s+3  matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart		     fold keepend
+syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@<!<<-`\z([^`]*\)`\ze\%(.*<<-\=['`"]\=\h\)\@!+hs=s+3  matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend
 
 if exists('main_syntax') && main_syntax == 'eruby'
   let b:ruby_no_expensive = 1
@@ -187,7 +188,7 @@
 syn match  rubyModuleDeclaration   "[^[:space:];#<]\+"	 contained contains=rubyConstant,rubyOperator
 syn match  rubyFunction "\<[_[:alpha:]][_[:alnum:]]*[?!=]\=[[:alnum:]_.:?!=]\@!" contained containedin=rubyMethodDeclaration
 syn match  rubyFunction "\%(\s\|^\)\@<=[_[:alpha:]][_[:alnum:]]*[?!=]\=\%(\s\|$\)\@=" contained containedin=rubyAliasDeclaration,rubyAliasDeclaration2
-syn match  rubyFunction "\%([[:space:].]\|^\)\@<=\%(\[\]=\=\|\*\*\|[+-]@\=\|[*/%|&^~]\|<<\|>>\|[<>]=\=\|<=>\|===\|==\|=\~\|`\)\%([[:space:];#(]\|$\)\@=" contained containedin=rubyAliasDeclaration,rubyAliasDeclaration2,rubyMethodDeclaration
+syn match  rubyFunction "\%([[:space:].]\|^\)\@<=\%(\[\]=\=\|\*\*\|[+-]@\=\|[*/%|&^~]\|<<\|>>\|[<>]=\=\|<=>\|===\|[=!]=\|[=!]\~\|!\|`\)\%([[:space:];#(]\|$\)\@=" contained containedin=rubyAliasDeclaration,rubyAliasDeclaration2,rubyMethodDeclaration
 
 syn cluster rubyDeclaration contains=rubyAliasDeclaration,rubyAliasDeclaration2,rubyMethodDeclaration,rubyModuleDeclaration,rubyClassDeclaration,rubyFunction,rubyBlockParameter
 
@@ -198,7 +199,7 @@
 syn match   rubyOperator       "\<defined?" display
 syn match   rubyKeyword	       "\<\%(super\|yield\)\>[?!]\@!"
 syn match   rubyBoolean	       "\<\%(true\|false\)\>[?!]\@!"
-syn match   rubyPseudoVariable "\<\%(nil\|self\|__FILE__\|__LINE__\)\>[?!]\@!"
+syn match   rubyPseudoVariable "\<\%(nil\|self\|__ENCODING__\|__FILE__\|__LINE__\|__callee__\|__method__\)\>[?!]\@!" " TODO: reorganise
 syn match   rubyBeginEnd       "\<\%(BEGIN\|END\)\>[?!]\@!"
 
 " Expensive Mode - match 'end' with the appropriate opening keyword for syntax
@@ -220,13 +221,13 @@
 
   syn region rubyDoBlock      matchgroup=rubyControl start="\<do\>" end="\<end\>"                 contains=ALLBUT,@rubyNotTop fold
   " curly bracket block or hash literal
-  syn region rubyCurlyBlock   start="{" end="}"							  contains=ALLBUT,@rubyNotTop fold
-  syn region rubyArrayLiteral matchgroup=rubyArrayDelimiter start="\%(\w\|[\]})]\)\@<!\[" end="]" contains=ALLBUT,@rubyNotTop fold
+  syn region rubyCurlyBlock	matchgroup=rubyCurlyBlockDelimiter  start="{" end="}"				contains=ALLBUT,@rubyNotTop fold
+  syn region rubyArrayLiteral	matchgroup=rubyArrayDelimiter	    start="\%(\w\|[\]})]\)\@<!\[" end="]"	contains=ALLBUT,@rubyNotTop fold
 
   " statements without 'do'
   syn region rubyBlockExpression       matchgroup=rubyControl	  start="\<begin\>" end="\<end\>" contains=ALLBUT,@rubyNotTop fold
   syn region rubyCaseExpression	       matchgroup=rubyConditional start="\<case\>"  end="\<end\>" contains=ALLBUT,@rubyNotTop fold
-  syn region rubyConditionalExpression matchgroup=rubyConditional start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*/%&^|+=-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![?!]\)\s*\)\@<=\%(if\|unless\)\>" end="\<end\>" contains=ALLBUT,@rubyNotTop fold
+  syn region rubyConditionalExpression matchgroup=rubyConditional start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*/%&^|+=-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![?!]\)\s*\)\@<=\%(if\|unless\)\>" end="\%(\%(\%(\.\@<!\.\)\|::\)\s*\)\@<!\<end\>" contains=ALLBUT,@rubyNotTop fold
 
   syn match rubyConditional "\<\%(then\|else\|when\)\>[?!]\@!"	contained containedin=rubyCaseExpression
   syn match rubyConditional "\<\%(then\|else\|elsif\)\>[?!]\@!" contained containedin=rubyConditionalExpression
@@ -239,7 +240,7 @@
   syn region rubyRepeatExpression start="\<for\>[?!]\@!" start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*/%&^|+-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![!=?]\)\s*\)\@<=\<\%(until\|while\)\>" matchgroup=rubyRepeat end="\<end\>" contains=ALLBUT,@rubyNotTop nextgroup=rubyOptionalDoLine fold
 
   if !exists("ruby_minlines")
-    let ruby_minlines = 50
+    let ruby_minlines = 500
   endif
   exec "syn sync minlines=" . ruby_minlines
 
@@ -253,7 +254,7 @@
 
 " Special Methods
 if !exists("ruby_no_special_methods")
-  syn keyword rubyAccess    public protected private module_function
+  syn keyword rubyAccess    public protected private public_class_method private_class_method public_constant private_constant module_function
   " attr is a common variable name
   syn match   rubyAttribute "\%(\%(^\|;\)\s*\)\@<=attr\>\(\s*[.=]\)\@!"
   syn keyword rubyAttribute attr_accessor attr_reader attr_writer
@@ -262,17 +263,17 @@
   syn keyword rubyException raise fail catch throw
   " false positive with 'include?'
   syn match   rubyInclude   "\<include\>[?!]\@!"
-  syn keyword rubyInclude   autoload extend load require
+  syn keyword rubyInclude   autoload extend load prepend require require_relative
   syn keyword rubyKeyword   callcc caller lambda proc
 endif
 
 " Comments and Documentation
 syn match   rubySharpBang "\%^#!.*" display
-syn keyword rubyTodo	  FIXME NOTE TODO OPTIMIZE XXX contained
+syn keyword rubyTodo	  FIXME NOTE TODO OPTIMIZE XXX todo contained
 syn match   rubyComment   "#.*" contains=rubySharpBang,rubySpaceError,rubyTodo,@Spell
 if !exists("ruby_no_comment_fold")
   syn region rubyMultilineComment start="\%(\%(^\s*#.*\n\)\@<!\%(^\s*#.*\n\)\)\%(\(^\s*#.*\n\)\{1,}\)\@=" end="\%(^\s*#.*\n\)\@<=\%(^\s*#.*\n\)\%(^\s*#\)\@!" contains=rubyComment transparent fold keepend
-  syn region rubyDocumentation	  start="^=begin\ze\%(\s.*\)\=$" end="^=end\s*$" contains=rubySpaceError,rubyTodo,@Spell fold
+  syn region rubyDocumentation	  start="^=begin\ze\%(\s.*\)\=$" end="^=end\%(\s.*\)\=$" contains=rubySpaceError,rubyTodo,@Spell fold
 else
   syn region rubyDocumentation	  start="^=begin\s*$" end="^=end\s*$" contains=rubySpaceError,rubyTodo,@Spell
 endif
@@ -286,12 +287,12 @@
 syn match rubyKeywordAsMethod "\<\%(alias\|begin\|case\|class\|def\|do\|end\)[?!]" transparent contains=NONE
 syn match rubyKeywordAsMethod "\<\%(if\|module\|undef\|unless\|until\|while\)[?!]" transparent contains=NONE
 
-syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(abort\|at_exit\|attr\|attr_accessor\|attr_reader\)\>"   transparent contains=NONE
-syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(attr_writer\|autoload\|callcc\|catch\|caller\)\>"	    transparent contains=NONE
-syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(eval\|class_eval\|instance_eval\|module_eval\|exit\)\>" transparent contains=NONE
-syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(extend\|fail\|fork\|include\|lambda\)\>"		    transparent contains=NONE
-syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(load\|loop\|private\|proc\|protected\)\>"		    transparent contains=NONE
-syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(public\|require\|raise\|throw\|trap\)\>"		    transparent contains=NONE
+syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(abort\|at_exit\|attr\|attr_accessor\|attr_reader\)\>"	transparent contains=NONE
+syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(attr_writer\|autoload\|callcc\|catch\|caller\)\>"		transparent contains=NONE
+syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(eval\|class_eval\|instance_eval\|module_eval\|exit\)\>"	transparent contains=NONE
+syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(extend\|fail\|fork\|include\|lambda\)\>"			transparent contains=NONE
+syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(load\|loop\|prepend\|private\|proc\|protected\)\>"		transparent contains=NONE
+syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(public\|require\|require_relative\|raise\|throw\|trap\)\>"	transparent contains=NONE
 
 " __END__ Directive
 syn region rubyData matchgroup=rubyDataDirective start="^__END__$" end="\%$" fold
@@ -330,7 +331,6 @@
 hi def link rubySymbol			Constant
 hi def link rubyKeyword			Keyword
 hi def link rubyOperator		Operator
-hi def link rubyPseudoOperator		rubyOperator
 hi def link rubyBeginEnd		Statement
 hi def link rubyAccess			Statement
 hi def link rubyAttribute		Statement
@@ -351,6 +351,7 @@
 hi def link rubyRegexpDelimiter		rubyStringDelimiter
 hi def link rubySymbolDelimiter		rubyStringDelimiter
 hi def link rubyStringDelimiter		Delimiter
+hi def link rubyHeredoc			rubyString
 hi def link rubyString			String
 hi def link rubyRegexpEscape		rubyRegexpSpecial
 hi def link rubyRegexpQuantifier	rubyRegexpSpecial
diff --git a/runtime/syntax/xml.vim b/runtime/syntax/xml.vim
index 2d4170a..7b503ab 100644
--- a/runtime/syntax/xml.vim
+++ b/runtime/syntax/xml.vim
@@ -3,7 +3,7 @@
 " Maintainer:	Johannes Zellner <johannes@zellner.org>
 "		Author and previous maintainer:
 "		Paul Siegmann <pauls@euronet.nl>
-" Last Change:	2013 May 29
+" Last Change:	2013 Jun 07
 " Filenames:	*.xml
 " $Id: xml.vim,v 1.3 2006/04/11 21:32:00 vimboss Exp $
 
@@ -81,7 +81,7 @@
 "      ^^^^^^^^^^^^^
 "
 syn match   xmlAttrib
-    \ +[-'"<]\@2<!\<[a-zA-Z:_][-.0-9a-zA-Z0-9:_]*\>\(['">]\@!\|$\)+
+    \ +[-'"<]\@1<!\<[a-zA-Z:_][-.0-9a-zA-Z:_]*\>\%(['">]\@!\|$\)+
     \ contained
     \ contains=xmlAttribPunct,@xmlAttribHook
     \ display
@@ -122,7 +122,7 @@
 "  ^^^
 "
 syn match   xmlTagName
-    \ +[<]\@2<=[^ /!?<>"']\++
+    \ +<\@1<=[^ /!?<>"']\++
     \ contained
     \ contains=xmlNamespace,xmlAttribPunct,@xmlTagHook
     \ display
diff --git a/src/po/ru.cp1251.po b/src/po/ru.cp1251.po
index 0e6f0a8..bd19e47 100644
--- a/src/po/ru.cp1251.po
+++ b/src/po/ru.cp1251.po
@@ -1,39 +1,60 @@
 # Russian translation for Vim
-# 
+#
 # Îá óñëîâèÿõ èñïîëüçîâàíèÿ ÷èòàéòå â ðåäàêòîðå Vim ":help uganda"
-# Î ëþäÿõ, äåëàþùèõ Vim ÷èòàéòå â ðåäàêòîðå ":help àâòîðû"
 #
 # vassily "vr" ragosin <vrr@users.sourceforge.net>, 2004
-#
-# Generated from ru.po, DO NOT EDIT.
+# Sergey Alyoshin <alyoshin.s@gmail.com>, 2013
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Vim 6.3\n"
+"Project-Id-Version: vim_7.3_ru\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2004-06-15 09:39+0400\n"
-"PO-Revision-Date: 2004-05-19 00:23+0400\n"
-"Last-Translator: vassily ragosin <vrr@users.sourceforge.net>\n"
-"Language-Team: vassily ragosin <vrr@users.sourceforge.net>\n"
+"POT-Creation-Date: 2013-06-01 13:52+0400\n"
+"PO-Revision-Date: 2013-06-01 14:16+0400\n"
+"Last-Translator: Sergey Alyoshin <alyoshin.s@gmail.com>\n"
+"Language-Team: \n"
+"Language: Russian\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=cp1251\n"
 "Content-Transfer-Encoding: 8bit\n"
 
+msgid "E831: bf_key_init() called with empty password"
+msgstr "E831: bf_key_init() âûçâàí ñ ïóñòûì ïàðîëåì"
+
+msgid "E820: sizeof(uint32_t) != 4"
+msgstr "E820: sizeof(uint32_t) != 4"
+
+msgid "E817: Blowfish big/little endian use wrong"
+msgstr ""
+"E817: Íåïðàâèëüíîå èñïîëüçîâàíèå îáðàòíîãî/ïðÿìîãî ïîðÿäêà áàéò â Blowfish"
+
+msgid "E818: sha256 test failed"
+msgstr "E818: Íå óäàëîñü âûïîëíèòü òåñò sha256"
+
+msgid "E819: Blowfish test failed"
+msgstr "E819: Íå óäàëîñü âûïîëíèòü òåñò Blowfish"
+
+msgid "[Location List]"
+msgstr "[Ñïèñîê ðàñïîëîæåíèé]"
+
+msgid "[Quickfix List]"
+msgstr "[Ñïèñîê áûñòðûõ èñïðàâëåíèé]"
+
+msgid "E855: Autocommands caused command to abort"
+msgstr "E855: Àâòîêîìàíäû âûçâàëè ïðåêðàùåíèå êîìàíäû"
+
 msgid "E82: Cannot allocate any buffer, exiting..."
 msgstr "E82: Íåâîçìîæíî âûäåëèòü ïàìÿòü äàæå äëÿ îäíîãî áóôåðà, âûõîä..."
 
 msgid "E83: Cannot allocate buffer, using other one..."
 msgstr "E83: Íåâîçìîæíî âûäåëèòü ïàìÿòü äëÿ áóôåðà, èñïîëüçóåì äðóãîé áóôåð..."
 
-#, c-format
 msgid "E515: No buffers were unloaded"
 msgstr "E515: Íè îäèí áóôåð íå áûë âûãðóæåí èç ïàìÿòè"
 
-#, c-format
 msgid "E516: No buffers were deleted"
 msgstr "E516: Íè îäèí áóôåð íå áûë óäàë¸í"
 
-#, c-format
 msgid "E517: No buffers were wiped out"
 msgstr "E517: Íè îäèí áóôåð íå áûë î÷èùåí"
 
@@ -77,7 +98,8 @@
 
 #, c-format
 msgid "E89: No write since last change for buffer %ld (add ! to override)"
-msgstr "E89: Èçìåíåíèÿ â áóôåðå %ld íå ñîõðàíåíû (!, ÷òîáû îáîéòè ïðîâåðêó)"
+msgstr ""
+"E89: Èçìåíåíèÿ â áóôåðå %ld íå ñîõðàíåíû (äîáàâüòå !, ÷òîáû îáîéòè ïðîâåðêó)"
 
 msgid "E90: Cannot unload last buffer"
 msgstr "E90: Íåâîçìîæíî âûãðóçèòü èç ïàìÿòè ïîñëåäíèé áóôåð"
@@ -116,6 +138,9 @@
 msgid "[Read errors]"
 msgstr "[Îøèáêè ÷òåíèÿ]"
 
+msgid "[RO]"
+msgstr "[Ò×]"
+
 msgid "[readonly]"
 msgstr "[òîëüêî äëÿ ÷òåíèÿ]"
 
@@ -131,15 +156,15 @@
 msgid "line %ld of %ld --%d%%-- col "
 msgstr "ñòð. %ld èç %ld --%d%%-- êîë. "
 
-msgid "[No file]"
-msgstr "[Íåò ôàéëà]"
+msgid "[No Name]"
+msgstr "[Íåò èìåíè]"
 
 #. must be a help buffer
 msgid "help"
 msgstr "ñïðàâêà"
 
-msgid "[help]"
-msgstr "[ñïðàâêà]"
+msgid "[Help]"
+msgstr "[Ñïðàâêà]"
 
 msgid "[Preview]"
 msgstr "[Ïðåäïðîñìîòð]"
@@ -153,7 +178,6 @@
 msgid "Top"
 msgstr "Íàâåðõó"
 
-#, c-format
 msgid ""
 "\n"
 "# Buffer list:\n"
@@ -161,11 +185,8 @@
 "\n"
 "# Ñïèñîê áóôåðîâ:\n"
 
-msgid "[Error List]"
-msgstr "[Ñïèñîê îøèáîê]"
-
-msgid "[No File]"
-msgstr "[Íåò ôàéëà]"
+msgid "[Scratch]"
+msgstr "[Âðåìåííûé]"
 
 msgid ""
 "\n"
@@ -186,18 +207,27 @@
 msgid "E96: Can not diff more than %ld buffers"
 msgstr "E96: Ñëåäèòü çà îòëè÷èÿìè ìîæíî íå áîëåå ÷åì â %ld áóôåðàõ"
 
+msgid "E810: Cannot read or write temp files"
+msgstr "E810: Íåâîçìîæíî ïðî÷èòàòü èëè çàïèñàòü âðåìåííûå ôàéëû"
+
 msgid "E97: Cannot create diffs"
 msgstr "E97: Íåâîçìîæíî ñîçäàòü ôàéëû îòëè÷èé"
 
 msgid "Patch file"
 msgstr "Ôàéë-çàïëàòêà"
 
+msgid "E816: Cannot read patch output"
+msgstr "E816: Íåâîçìîæíî ïðî÷èòàòü âûâîä patch"
+
 msgid "E98: Cannot read diff output"
-msgstr "E98: Íåâîçìîæíî ïðî÷èòàòü âûâîä êîìàíäû diff"
+msgstr "E98: Íåâîçìîæíî ïðî÷èòàòü âûâîä diff"
 
 msgid "E99: Current buffer is not in diff mode"
 msgstr "E99: Àêòèâíûé áóôåð íå íàõîäèòñÿ â ðåæèìå îòëè÷èé"
 
+msgid "E793: No other buffer in diff mode is modifiable"
+msgstr "E793: Áîëüøå íåò èçìåíÿåìûõ áóôåðîâ â ðåæèìå îòëè÷èé"
+
 msgid "E100: No other buffer in diff mode"
 msgstr "E100: Áîëüøå íåò áóôåðîâ â ðåæèìå îòëè÷èé"
 
@@ -212,6 +242,9 @@
 msgid "E103: Buffer \"%s\" is not in diff mode"
 msgstr "E103: Áóôåð \"%s\" íå íàõîäèòñÿ â ðåæèìå îòëè÷èé"
 
+msgid "E787: Buffer changed unexpectedly"
+msgstr "E787: Áóôåð íåîæèäàííî èçìåíèëñÿ"
+
 msgid "E104: Escape not allowed in digraph"
 msgstr "E104: Ýêðàíèðóþùèé ñèìâîë Escape íåëüçÿ èñïîëüçîâàòü â äèãðàôå"
 
@@ -221,17 +254,15 @@
 msgid "E105: Using :loadkeymap not in a sourced file"
 msgstr "E105: Êîìàíäà :loadkeymap ïðèìåíåíà âíå ôàéëà ñöåíàðèÿ"
 
+msgid "E791: Empty keymap entry"
+msgstr "E791: ïóñòàÿ çàïèñü ðàñêëàäêè êëàâèàòóðû"
+
 msgid " Keyword completion (^N^P)"
 msgstr " Àâòîäîïîëíåíèå êëþ÷åâîãî ñëîâà (^N^P)"
 
 #. ctrl_x_mode == 0, ^P/^N compl.
-msgid " ^X mode (^E^Y^L^]^F^I^K^D^V^N^P)"
-msgstr " Àâòîäîïîëíåíèå ^X (^E^Y^L^]^F^I^K^D^V^N^P)"
-
-#. Scroll has it's own msgs, in it's place there is the msg for local
-#. * ctrl_x_mode = 0 (eg continue_status & CONT_LOCAL)  -- Acevedo
-msgid " Keyword Local completion (^N^P)"
-msgstr " Ìåñòíîå àâòîäîïîëíåíèå êëþ÷åâîãî ñëîâà (^N^P)"
+msgid " ^X mode (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
+msgstr " Ðåæèì ^X (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
 
 msgid " Whole line completion (^L^N^P)"
 msgstr " Àâòîäîïîëíåíèå öåëîé ñòðîêè (^L^N^P)"
@@ -257,15 +288,33 @@
 msgid " Command-line completion (^V^N^P)"
 msgstr " Àâòîäîïîëíåíèå êîìàíäíîé ñòðîêè (^V^N^P)"
 
+msgid " User defined completion (^U^N^P)"
+msgstr " Ïîëüçîâàòåëüñêîå àâòîäîïîëíåíèå (^U^N^P)"
+
+msgid " Omni completion (^O^N^P)"
+msgstr " Omni-äîïîëíåíèå (^O^N^P)"
+
+msgid " Spelling suggestion (s^N^P)"
+msgstr " Ïðåäëîæåíèå èñïðàâëåíèÿ ïðàâîïèñàíèÿ (s^N^P)"
+
+msgid " Keyword Local completion (^N^P)"
+msgstr " Ìåñòíîå àâòîäîïîëíåíèå êëþ÷åâîãî ñëîâà (^N^P)"
+
 msgid "Hit end of paragraph"
 msgstr "Êîíåö àáçàöà"
 
-msgid "'thesaurus' option is empty"
-msgstr "Íå çàäàíî çíà÷åíèå îïöèè 'thesaurus'"
+msgid "E839: Completion function changed window"
+msgstr "E839: Ôóíêöèÿ àâòîäîïîëíåíèÿ èçìåíèëà îêíî"
+
+msgid "E840: Completion function deleted text"
+msgstr "E840: Ôóíêöèÿ àâòîäîïîëíåíèÿ óäàëèëà òåêñò"
 
 msgid "'dictionary' option is empty"
 msgstr "Íå çàäàíî çíà÷åíèå îïöèè 'dictionary'"
 
+msgid "'thesaurus' option is empty"
+msgstr "Íå çàäàíî çíà÷åíèå îïöèè 'thesaurus'"
+
 #, c-format
 msgid "Scanning dictionary: %s"
 msgstr "Ïðîñìîòð ñëîâàðÿ: %s"
@@ -280,7 +329,6 @@
 msgid "Scanning: %s"
 msgstr "Ïðîñìîòð: %s"
 
-#, c-format
 msgid "Scanning tags."
 msgstr "Âûïîëíÿåòñÿ ïîèñê ñðåäè ìåòîê."
 
@@ -311,11 +359,100 @@
 msgid "match %d"
 msgstr "ñîîòâåòñòâèå %d"
 
-#. Skip further arguments but do continue to
-#. * search for a trailing command.
+msgid "E18: Unexpected characters in :let"
+msgstr "E18: Íåîæèäàííûå ñèìâîëû â :let"
+
 #, c-format
-msgid "E106: Unknown variable: \"%s\""
-msgstr "E106: Íåèçâåñòíàÿ ïåðåìåííàÿ: \"%s\""
+msgid "E684: list index out of range: %ld"
+msgstr "E684: Èíäåêñ ñïèñêà çà ïðåäåëàìè äèàïàçîíà: %ld"
+
+#, c-format
+msgid "E121: Undefined variable: %s"
+msgstr "E121: Íåîïðåäåë¸ííàÿ ïåðåìåííàÿ: %s"
+
+msgid "E111: Missing ']'"
+msgstr "E111: Ïðîïóùåíà ']'"
+
+#, c-format
+msgid "E686: Argument of %s must be a List"
+msgstr "E686: Ïàðàìåòð %s äîëæåí áûòü ñïèñêîì"
+
+#, c-format
+msgid "E712: Argument of %s must be a List or Dictionary"
+msgstr "E712: Ïàðàìåòð %s äîëæåí áûòü ñïèñêîì èëè ñëîâàð¸ì"
+
+msgid "E713: Cannot use empty key for Dictionary"
+msgstr "E713: Íåâîçìîæíî èñïîëüçîâàòü ïóñòîé êëþ÷ äëÿ ñëîâàðÿ"
+
+msgid "E714: List required"
+msgstr "E714: Òðåáóåòñÿ ñïèñîê"
+
+msgid "E715: Dictionary required"
+msgstr "E715: Òðåáóåòñÿ ñëîâàðü"
+
+#, c-format
+msgid "E118: Too many arguments for function: %s"
+msgstr "E118: Ñëèøêîì ìíîãî ïàðàìåòðîâ äëÿ ôóíêöèè %s"
+
+#, c-format
+msgid "E716: Key not present in Dictionary: %s"
+msgstr "E716: Íåò êëþ÷à â ñëîâàðå: %s"
+
+#, c-format
+msgid "E122: Function %s already exists, add ! to replace it"
+msgstr "E122: Ôóíêöèÿ %s óæå ñóùåñòâóåò. Äîáàâüòå !, ÷òîáû çàìåíèòü å¸."
+
+msgid "E717: Dictionary entry already exists"
+msgstr "E717: Çàïèñü óæå ñóùåñòâóåò â ñëîâàðå"
+
+msgid "E718: Funcref required"
+msgstr "E718: Òðåáóåòñÿ ññûëêà íà ôóíêöèþ"
+
+msgid "E719: Cannot use [:] with a Dictionary"
+msgstr "E719: Íåâîçìîæíî èñïîëüçîâàòü [:] ñî ñëîâàð¸ì"
+
+#, c-format
+msgid "E734: Wrong variable type for %s="
+msgstr "E734: Íåïðàâèëüíûé òèï ïåðåìåííîé äëÿ %s="
+
+#, c-format
+msgid "E130: Unknown function: %s"
+msgstr "E130: Íåèçâåñòíàÿ ôóíêöèÿ: %s"
+
+#, c-format
+msgid "E461: Illegal variable name: %s"
+msgstr "E461: Íåäîïóñòèìîå èìÿ ïåðåìåííîé: %s"
+
+msgid "E687: Less targets than List items"
+msgstr "E687: Öåëåé ìåíüøå ÷åì ýëåìåíòîâ ñïèñêà"
+
+msgid "E688: More targets than List items"
+msgstr "E688: Öåëåé áîëüøå ÷åì ýëåìåíòîâ ñïèñêà"
+
+msgid "Double ; in list of variables"
+msgstr "Äâîéíàÿ ; â ñïèñêå ïåðåìåííûõ"
+
+#, c-format
+msgid "E738: Can't list variables for %s"
+msgstr "E738: Íåâîçìîæíî îòîáðàçèòü ïåðåìåííûå äëÿ %s"
+
+msgid "E689: Can only index a List or Dictionary"
+msgstr "E689: Èíäåêñèðîâàíèå âîçìîæíî òîëüêî ñïèñêà èëè ñëîâàðÿ"
+
+msgid "E708: [:] must come last"
+msgstr "E708: [:] äîëæíî áûòü ïîñëåäíèì"
+
+msgid "E709: [:] requires a List value"
+msgstr "E709: [:] òðåáóåò çíà÷åíèåì ñïèñîê"
+
+msgid "E710: List value has more items than target"
+msgstr "E710: Ýëåìåíòîâ ñïèñêà-çíà÷åíèÿ áîëüøå ÷åì â öåëè"
+
+msgid "E711: List value has not enough items"
+msgstr "E711: Ñïèñîê-çíà÷åíèå íå ñîäåðæèò äîñòàòî÷íî ýëåìåíòîâ"
+
+msgid "E690: Missing \"in\" after :for"
+msgstr "E690: Ïðîïóùåíî \"in\" ïîñëå :for"
 
 #, c-format
 msgid "E107: Missing parentheses: %s"
@@ -325,14 +462,38 @@
 msgid "E108: No such variable: \"%s\""
 msgstr "E108: Íåò òàêîé ïåðåìåííîé: \"%s\""
 
+msgid "E743: variable nested too deep for (un)lock"
+msgstr "E743: Ñëèøêîì ãëóáîêî âëîæåííûå ïåðåìåííûå äëÿ (ðàç)áëîêèðîâêè"
+
 msgid "E109: Missing ':' after '?'"
 msgstr "E109: Ïðîïóùåíî ':' ïîñëå '?'"
 
+msgid "E691: Can only compare List with List"
+msgstr "E691: Ñïèñîê ìîæíî ñðàâíèâàòü òîëüêî ñî ñïèñêîì"
+
+msgid "E692: Invalid operation for Lists"
+msgstr "E692: Íåäîïóñòèìàÿ îïåðàöèÿ äëÿ ñïèñêîâ"
+
+msgid "E735: Can only compare Dictionary with Dictionary"
+msgstr "E735: Ñëîâàðü ìîæíî ñðàâíèâàòü òîëüêî ñî ñëîâàð¸ì"
+
+msgid "E736: Invalid operation for Dictionary"
+msgstr "E736: Íåäîïóñòèìàÿ îïåðàöèÿ äëÿ ñëîâàðÿ"
+
+msgid "E693: Can only compare Funcref with Funcref"
+msgstr "E693: Ññûëêó íà ôóíêöèþ ìîæíî ñðàâíèâàòü òîëüêî ñ ññûëêîé íà ôóíêöèþ"
+
+msgid "E694: Invalid operation for Funcrefs"
+msgstr "E694: Íåäîïóñòèìàÿ îïåðàöèÿ äëÿ ññûëêè íà ôóíêöèþ"
+
+msgid "E804: Cannot use '%' with Float"
+msgstr "E804: Íåâîçìîæíî èñïîëüçîâàòü '%' ñ ÷èñëîì ñ ïëàâàþùåé òî÷êîé"
+
 msgid "E110: Missing ')'"
 msgstr "E110: Ïðîïóùåíà ')'"
 
-msgid "E111: Missing ']'"
-msgstr "E111: Ïðîïóùåíà ']'"
+msgid "E695: Cannot index a Funcref"
+msgstr "E695: Íåâîçìîæíî èíäåêñèðîâàòü ññûëêó íà ôóíêöèþ"
 
 #, c-format
 msgid "E112: Option name missing: %s"
@@ -351,6 +512,37 @@
 msgstr "E115: Ïðîïóùåíà êàâû÷êà: %s"
 
 #, c-format
+msgid "E696: Missing comma in List: %s"
+msgstr "E696: Ïðîïóùåíà çàïÿòàÿ â ñïèñêå: %s"
+
+#, c-format
+msgid "E697: Missing end of List ']': %s"
+msgstr "E697: Ïðîïóùåíî îêîí÷àíèå ñïèñêà ']': %s"
+
+#, c-format
+msgid "E720: Missing colon in Dictionary: %s"
+msgstr "E720: Ïðîïóùåíî äâîåòî÷èå â ñëîâàðå: %s"
+
+#, c-format
+msgid "E721: Duplicate key in Dictionary: \"%s\""
+msgstr "E721: Ïîâòîð êëþ÷à â ñëîâàðå: \"%s\""
+
+#, c-format
+msgid "E722: Missing comma in Dictionary: %s"
+msgstr "E722: Ïðîïóùåíà çàïÿòàÿ â ñëîâàðå: %s"
+
+#, c-format
+msgid "E723: Missing end of Dictionary '}': %s"
+msgstr "E723: Ïðîïóùåíî îêîí÷àíèå ñëîâàðÿ '}': %s"
+
+msgid "E724: variable nested too deep for displaying"
+msgstr "E724: Ñëèøêîì ãëóáîêî âëîæåííûå ïåðåìåííûå äëÿ îòîáðàæåíèÿ"
+
+#, c-format
+msgid "E740: Too many arguments for function %s"
+msgstr "E740: Ñëèøêîì ìíîãî ïàðàìåòðîâ äëÿ ôóíêöèè %s"
+
+#, c-format
 msgid "E116: Invalid arguments for function %s"
 msgstr "E116: Ïàðàìåòðû äëÿ ôóíêöèè %s çàäàíû íåâåðíî"
 
@@ -359,10 +551,6 @@
 msgstr "E117: Íåèçâåñòíàÿ ôóíêöèÿ: %s"
 
 #, c-format
-msgid "E118: Too many arguments for function: %s"
-msgstr "E118: Ñëèøêîì ìíîãî ïàðàìåòðîâ äëÿ ôóíêöèè %s"
-
-#, c-format
 msgid "E119: Not enough arguments for function: %s"
 msgstr "E119: Íåäîñòàòî÷íî ïàðàìåòðîâ äëÿ ôóíêöèè %s"
 
@@ -370,6 +558,22 @@
 msgid "E120: Using <SID> not in a script context: %s"
 msgstr "E120: <SID> èñïîëüçóåòñÿ âíå ñöåíàðèÿ: %s"
 
+#, c-format
+msgid "E725: Calling dict function without Dictionary: %s"
+msgstr "E725: Âûçîâ ôóíêöèè dict áåç ñëîâàðÿ: %s"
+
+msgid "E808: Number or Float required"
+msgstr "E808: Òðåáóåòñÿ öåëîå ÷èñëî èëè ñ ïëàâàþùåé òî÷êîé"
+
+msgid "add() argument"
+msgstr "ïàðàìåòð add()"
+
+msgid "E699: Too many arguments"
+msgstr "E699: Ñëèøêîì ìíîãî ïàðàìåòðîâ"
+
+msgid "E785: complete() can only be used in Insert mode"
+msgstr "E785: complete() ìîæåò èñïîëüçîâàòüñÿ òîëüêî â ðåæèìå Âñòàâêè"
+
 #.
 #. * Yes this is ugly, I don't particularly like it either.  But doing it
 #. * this way has the compelling advantage that translations need not to
@@ -378,54 +582,148 @@
 msgid "&Ok"
 msgstr "&Ok"
 
+msgid "extend() argument"
+msgstr "ïàðàìåòð extend()"
+
+#, c-format
+msgid "E737: Key already exists: %s"
+msgstr "E737: Êëþ÷ óæå ñóùåñòâóåò: %s"
+
+msgid "map() argument"
+msgstr "ïàðàìåòð map()"
+
+msgid "filter() argument"
+msgstr "ïàðàìåòð filter()"
+
 #, c-format
 msgid "+-%s%3ld lines: "
 msgstr "+-%s%3ld ñòðîê: "
 
+#, c-format
+msgid "E700: Unknown function: %s"
+msgstr "E700: Íåèçâåñòíàÿ ôóíêöèÿ: %s"
+
 msgid ""
 "&OK\n"
 "&Cancel"
 msgstr ""
 "&OK\n"
-"Î&òìåíà"
+"&C Îòìåíà"
 
 msgid "called inputrestore() more often than inputsave()"
 msgstr "Ôóíêöèÿ inputrestore() âûçûâàåòñÿ ÷àùå, ÷åì ôóíêöèÿ inputsave()"
 
-msgid "E655: Too many symbolic links (cycle?)"
-msgstr "E655: Ñëèøêîì ìíîãî ñèìâîëè÷åñêèõ ññûëîê (öèêë?)"
+msgid "insert() argument"
+msgstr "ïàðàìåòð insert()"
+
+msgid "E786: Range not allowed"
+msgstr "E786: Äèàïàçîí íå äîïóñêàåòñÿ"
+
+msgid "E701: Invalid type for len()"
+msgstr "E701: Íåïðàâèëüíûå òèï äëÿ len()"
+
+msgid "E726: Stride is zero"
+msgstr "E726: Íóëåâîé øàã"
+
+msgid "E727: Start past end"
+msgstr "E727: Íà÷àëî ïîñëå êîíöà"
+
+msgid "<empty>"
+msgstr "<ïóñòî>"
 
 msgid "E240: No connection to Vim server"
 msgstr "E240: Íåò ñâÿçè ñ ñåðâåðîì Vim"
 
-msgid "E277: Unable to read a server reply"
-msgstr "E277: Ñåðâåð íå îòâå÷àåò"
-
-msgid "E258: Unable to send to client"
-msgstr "E258: Íå ìîãó îòâåòèòü êëèåíòó"
-
 #, c-format
 msgid "E241: Unable to send to %s"
 msgstr "E241: Íå ìîãó îòïðàâèòü ñîîáùåíèå äëÿ %s"
 
+msgid "E277: Unable to read a server reply"
+msgstr "E277: Ñåðâåð íå îòâå÷àåò"
+
+msgid "remove() argument"
+msgstr "ïàðàìåòð remove()"
+
+msgid "E655: Too many symbolic links (cycle?)"
+msgstr "E655: Ñëèøêîì ìíîãî ñèìâîëè÷åñêèõ ññûëîê (öèêë?)"
+
+msgid "reverse() argument"
+msgstr "ïàðàìåòð reverse()"
+
+msgid "E258: Unable to send to client"
+msgstr "E258: Íå ìîãó îòâåòèòü êëèåíòó"
+
+msgid "sort() argument"
+msgstr "ïàðàìåòð sort()"
+
+msgid "E702: Sort compare function failed"
+msgstr "E702: Íåóäà÷íîå çàâåðøåíèå ôóíêöèè ñðàâíåíèÿ ïðè ñîðòèðîâêå"
+
 msgid "(Invalid)"
 msgstr "(Íåïðàâèëüíî)"
 
-#, c-format
-msgid "E121: Undefined variable: %s"
-msgstr "E121: Íåîïðåäåëåííàÿ ïåðåìåííàÿ: %s"
+msgid "E677: Error writing temp file"
+msgstr "E677: Îøèáêà çàïèñè âî âðåìåííûé ôàéë"
+
+msgid "E805: Using a Float as a Number"
+msgstr "E805: Èñïîëüçîâàíèå ÷èñëà ñ ïëàâàþùåé òî÷êîé êàê öåëîãî"
+
+msgid "E703: Using a Funcref as a Number"
+msgstr "E703: Èñïîëüçîâàíèå ññûëêè íà ôóíêöèþ êàê ÷èñëà"
+
+msgid "E745: Using a List as a Number"
+msgstr "E745: Èñïîëüçîâàíèå ñïèñêà êàê ÷èñëà"
+
+msgid "E728: Using a Dictionary as a Number"
+msgstr "E728: Èñïîëüçîâàíèå ñëîâàðÿ êàê ÷èñëà"
+
+msgid "E729: using Funcref as a String"
+msgstr "E729: Èñïîëüçîâàíèå ññûëêè íà ôóíêöèþ êàê ñòðîêè"
+
+msgid "E730: using List as a String"
+msgstr "E730: Èñïîëüçîâàíèå ñïèñêà êàê ñòðîêè"
+
+msgid "E731: using Dictionary as a String"
+msgstr "E731: Èñïîëüçîâàíèå ñëîâàðÿ êàê ñòðîêè"
+
+msgid "E806: using Float as a String"
+msgstr "E806: Èñïîëüçîâàíèå ÷èñëà ñ ïëàâàþùåé òî÷êîé êàê ñòðîêè"
 
 #, c-format
-msgid "E461: Illegal variable name: %s"
-msgstr "E461: Íåäîïóñòèìîå èìÿ ïåðåìåííîé: %s"
+msgid "E706: Variable type mismatch for: %s"
+msgstr "E706: Íåñîîòâåòñòâèå òèïà ïåðåìåííîé äëÿ: %s"
 
 #, c-format
-msgid "E122: Function %s already exists, add ! to replace it"
-msgstr "E122: Ôóíêöèÿ %s óæå ñóùåñòâóåò. Äîáàâüòå !, ÷òîáû çàìåíèòü å¸."
+msgid "E795: Cannot delete variable %s"
+msgstr "E795: Íåâîçìîæíî óäàëèòü ïåðåìåííóþ %s"
+
+#, c-format
+msgid "E704: Funcref variable name must start with a capital: %s"
+msgstr ""
+"E704: Èìÿ ïåðåìåííîé ññûëêè íà ôóíêöèþ äîëæíî íà÷èíàòüñÿ ñ çàãëàâíîé áóêâû: "
+"%s"
+
+#, c-format
+msgid "E705: Variable name conflicts with existing function: %s"
+msgstr "E705: Èìÿ ïåðåìåííîé êîíôëèêòóåò ñ ñóùåñòâóþùåé ôóíêöèåé: %s"
+
+#, c-format
+msgid "E741: Value is locked: %s"
+msgstr "E741: Çíà÷åíèå çàáëîêèðîâàíî: %s"
+
+msgid "Unknown"
+msgstr "Íåèçâåñòíî"
+
+#, c-format
+msgid "E742: Cannot change value of %s"
+msgstr "E742: Íåâîçìîæíî èçìåíèòü çíà÷åíèå %s"
+
+msgid "E698: variable nested too deep for making a copy"
+msgstr "E698: Ñëèøêîì ãëóáîêî âëîæåííûå ïåðåìåííûå äëÿ êîïèðîâàíèÿ"
 
 #, c-format
 msgid "E123: Undefined function: %s"
-msgstr "E123: Íåîïðåäåëåííàÿ ôóíêöèÿ: %s"
+msgstr "E123: Íåîïðåäåë¸ííàÿ ôóíêöèÿ: %s"
 
 #, c-format
 msgid "E124: Missing '(': %s"
@@ -435,23 +733,33 @@
 msgid "E125: Illegal argument: %s"
 msgstr "E125: Íåäîïóñòèìûé ïàðàìåòð: %s"
 
+#, c-format
+msgid "E853: Duplicate argument name: %s"
+msgstr "E853: Ïîâòîðÿþùååñÿ èìÿ ïàðàìåòðà: %s"
+
 msgid "E126: Missing :endfunction"
 msgstr "E126: Ïðîïóùåíà êîìàíäà :endfunction"
 
 #, c-format
+msgid "E707: Function name conflicts with variable: %s"
+msgstr "E707: Èìÿ ôóíêöèè êîíôëèêòóåò ñ ïåðåìåííîé: %s"
+
+#, c-format
 msgid "E127: Cannot redefine function %s: It is in use"
 msgstr "E127: Íåâîçìîæíî ïåðåîïðåäåëèòü ôóíêöèþ %s, îíà èñïîëüçóåòñÿ"
 
+#, c-format
+msgid "E746: Function name does not match script file name: %s"
+msgstr "E746: Èìÿ ôóíêöèè íå ñîîòâåòñòâóåò èìåíè ôàéëà ñöåíàðèÿ: %s"
+
 msgid "E129: Function name required"
 msgstr "E129: Òðåáóåòñÿ èìÿ ôóíêöèè"
 
 #, c-format
-msgid "E128: Function name must start with a capital: %s"
-msgstr "E128: Èìÿ ôóíêöèè äîëæíî íà÷èíàòüñÿ ñ ïðîïèñíîé áóêâû: %s"
-
-#, c-format
-msgid "E130: Undefined function: %s"
-msgstr "E130: Ôóíêöèÿ %s íå îïðåäåëåíà"
+msgid "E128: Function name must start with a capital or contain a colon: %s"
+msgstr ""
+"E128: Èìÿ ôóíêöèè äîëæíî íà÷èíàòüñÿ ñ çàãëàâíîé áóêâû èëè ñîäåðæàòü "
+"äâîåòî÷èå: %s"
 
 #, c-format
 msgid "E131: Cannot delete function %s: It is in use"
@@ -460,7 +768,6 @@
 msgid "E132: Function call depth is higher than 'maxfuncdepth'"
 msgstr "E132: Ãëóáèíà âûçîâà ôóíêöèè áîëüøå, ÷åì çíà÷åíèå 'maxfuncdepth'"
 
-#. always scroll up, don't overwrite
 #, c-format
 msgid "calling %s"
 msgstr "âûçîâ %s"
@@ -474,10 +781,9 @@
 msgstr "%s âîçâðàùàåò #%ld"
 
 #, c-format
-msgid "%s returning \"%s\""
-msgstr "%s âîçâðàùàåò \"%s\""
+msgid "%s returning %s"
+msgstr "%s âîçâðàùàåò %s"
 
-#. always scroll up, don't overwrite
 #, c-format
 msgid "continuing in %s"
 msgstr "ïðîäîëæåíèå â %s"
@@ -485,7 +791,6 @@
 msgid "E133: :return not inside a function"
 msgstr "E133: êîìàíäà :return âíå ôóíêöèè"
 
-#, c-format
 msgid ""
 "\n"
 "# global variables:\n"
@@ -493,6 +798,16 @@
 "\n"
 "# ãëîáàëüíûå ïåðåìåííûå:\n"
 
+msgid ""
+"\n"
+"\tLast set from "
+msgstr ""
+"\n"
+"\t ïîñëåäíèé ðàç îïöèÿ èçìåíåíà â "
+
+msgid "No old files"
+msgstr "Íåò ñòàðûõ ôàéëîâ"
+
 #, c-format
 msgid "<%s>%s%s  %d,  Hex %02x,  Octal %03o"
 msgstr "<%s>%s%s  %d,  Hex %02x,  Octal %03o"
@@ -543,9 +858,13 @@
 msgid " marks"
 msgstr " îòìåòîê"
 
+msgid " oldfiles"
+msgstr " ñòàðûõ ôàéëîâ"
+
 msgid " FAILED"
 msgstr " ÍÅÓÄÀ×ÍÎ"
 
+#. avoid a wait_return for this message, it's annoying
 #, c-format
 msgid "E137: Viminfo file is not writable: %s"
 msgstr "E137: Ïðàâà íà çàïèñü ôàéëà viminfo îòñóòñòâóþò: %s"
@@ -563,7 +882,6 @@
 msgid "# This viminfo file was generated by Vim %s.\n"
 msgstr "# Ýòîò ôàéë viminfo àâòîìàòè÷åñêè ñîçäàí Vim %s.\n"
 
-#, c-format
 msgid ""
 "# You may edit it if you're careful!\n"
 "\n"
@@ -571,7 +889,6 @@
 "# Åãî ìîæíî (îñòîðîæíî!) ðåäàêòèðîâàòü.\n"
 "\n"
 
-#, c-format
 msgid "# Value of 'encoding' when this file was written\n"
 msgstr "# Çíà÷åíèå îïöèè 'encoding' â ìîìåíò çàïèñè ôàéëà\n"
 
@@ -581,11 +898,6 @@
 msgid "Save As"
 msgstr "Ñîõðàíèòü êàê"
 
-#. Overwriting a file that is loaded in another buffer is not a
-#. * good idea.
-msgid "E139: File is loaded in another buffer"
-msgstr "E139: Ôàéë çàãðóæåí â äðóãîì áóôåðå"
-
 msgid "Write partial file?"
 msgstr "Çàïèñàòü ôàéë ÷àñòè÷íî?"
 
@@ -593,8 +905,16 @@
 msgstr "E140: Äëÿ çàïèñè ÷àñòè áóôåðà èñïîëüçóéòå !"
 
 #, c-format
-msgid "Overwrite existing file \"%.*s\"?"
-msgstr "Ïåðåïèñàòü ñóùåñòâóþùèé ôàéë \"%.*s\"?"
+msgid "Overwrite existing file \"%s\"?"
+msgstr "Ïåðåçàïèñàòü ñóùåñòâóþùèé ôàéë \"%s\"?"
+
+#, c-format
+msgid "Swap file \"%s\" exists, overwrite anyway?"
+msgstr "Ñâîï-ôàéë \"%s\" ñóùåñòâóåò, ïåðåçàïèñàòü?"
+
+#, c-format
+msgid "E768: Swap file exists: %s (:silent! overrides)"
+msgstr "E768: Ñâîï-ôàéë ñóùåñòâóåò: %s (:silent! ÷òîáû îáîéòè ïðîâåðêó)"
 
 #, c-format
 msgid "E141: No file name for buffer %ld"
@@ -605,12 +925,27 @@
 
 #, c-format
 msgid ""
-"'readonly' option is set for \"%.*s\".\n"
+"'readonly' option is set for \"%s\".\n"
 "Do you wish to write anyway?"
 msgstr ""
-"Äëÿ \"%.*s\" âêëþ÷åíà îïöèÿ 'readonly'.\n"
+"Äëÿ \"%s\" âêëþ÷åíà îïöèÿ 'readonly'.\n"
 "Çàïèñàòü?"
 
+#, c-format
+msgid ""
+"File permissions of \"%s\" are read-only.\n"
+"It may still be possible to write it.\n"
+"Do you wish to try?"
+msgstr ""
+"Ôàéë \"%s\" èìååò ðåæèì äîñòóïà òîëüêî äëÿ ÷òåíèÿ.\n"
+"Íî, âîçìîæíî, ôàéë óäàñòñÿ çàïèñàòü.\n"
+"Õîòèòå ïîïðîáîâàòü?"
+
+#, c-format
+msgid "E505: \"%s\" is read-only (add ! to override)"
+msgstr ""
+"E505: \"%s\" îòêðûò òîëüêî äëÿ ÷òåíèÿ (äîáàâüòå !, ÷òîáû îáîéòè ïðîâåðêó)"
+
 msgid "Edit File"
 msgstr "Ðåäàêòèðîâàíèå ôàéëà"
 
@@ -634,10 +969,17 @@
 msgid "(Interrupted) "
 msgstr "(Ïðåðâàíî)"
 
+msgid "1 match"
+msgstr "Îäíî ñîîòâåòñòâèå"
+
 msgid "1 substitution"
 msgstr "Îäíà çàìåíà"
 
 #, c-format
+msgid "%ld matches"
+msgstr "%ld ñîîòâåòñòâèé"
+
+#, c-format
 msgid "%ld substitutions"
 msgstr "%ld çàìåí"
 
@@ -658,7 +1000,6 @@
 msgid "Pattern found in every line: %s"
 msgstr "Ñîîòâåòñòâèå øàáëîíó íàéäåíî íà êàæäîé ñòðîêå: %s"
 
-#, c-format
 msgid ""
 "\n"
 "# Last Substitute String:\n"
@@ -673,7 +1014,7 @@
 
 #, c-format
 msgid "E661: Sorry, no '%s' help for %s"
-msgstr "E661: ê ñîæàëåíèþ, ñïðàâêà '%s' äëÿ %s îòñóòñòâóåò"
+msgstr "E661: Ê ñîæàëåíèþ, ñïðàâêà '%s' äëÿ %s îòñóòñòâóåò"
 
 #, c-format
 msgid "E149: Sorry, no help for %s"
@@ -700,8 +1041,8 @@
 msgstr "E670: Ôàéëû ñïðàâêè èñïîëüçóþò ðàçíûå êîäèðîâêè äëÿ îäíîãî ÿçûêà: %s"
 
 #, c-format
-msgid "E154: Duplicate tag \"%s\" in file %s"
-msgstr "E154: Ïîâòîðÿþùàÿñÿ ìåòêà \"%s\" â ôàéëå %s"
+msgid "E154: Duplicate tag \"%s\" in file %s/%s"
+msgstr "E154: Ïîâòîðÿþùàÿñÿ ìåòêà \"%s\" â ôàéëå %s/%s"
 
 #, c-format
 msgid "E160: Unknown sign command: %s"
@@ -767,9 +1108,12 @@
 msgid "%3d  %s %s  line %ld"
 msgstr "%3d  %s %s ñòð. %ld"
 
+msgid "E750: First use \":profile start {fname}\""
+msgstr "E750: Ïåðâîå èñïîëüçîâàíèå \":profile start {èìÿ-ôàéëà}\""
+
 #, c-format
-msgid "Save changes to \"%.*s\"?"
-msgstr "Ñîõðàíèòü èçìåíåíèÿ â \"%.*s\"?"
+msgid "Save changes to \"%s\"?"
+msgstr "Ñîõðàíèòü èçìåíåíèÿ â \"%s\"?"
 
 msgid "Untitled"
 msgstr "Áåç èìåíè"
@@ -793,7 +1137,7 @@
 
 #, c-format
 msgid "E666: compiler not supported: %s"
-msgstr "E666: êîìïèëÿòîð íå ïîääåðæèâàåòñÿ: %s"
+msgstr "E666: Êîìïèëÿòîð íå ïîääåðæèâàåòñÿ: %s"
 
 #, c-format
 msgid "Searching for \"%s\" in \"%s\""
@@ -834,6 +1178,21 @@
 msgid "finished sourcing %s"
 msgstr "ñ÷èòûâàíèå ñöåíàðèÿ %s çàâåðøåíî"
 
+msgid "modeline"
+msgstr "ðåæèìíàÿ ñòðîêà"
+
+msgid "--cmd argument"
+msgstr "--cmd ïàðàìåòð"
+
+msgid "-c argument"
+msgstr "-c ïàðàìåòð"
+
+msgid "environment variable"
+msgstr "ïåðåìåííàÿ îêðóæåíèÿ"
+
+msgid "error handler"
+msgstr "îáðàáîò÷èê îøèáêè"
+
 msgid "W15: Warning: Wrong line separator, ^M may be missing"
 msgstr ""
 "W15: Ïðåäóïðåæäåíèå: íåïðàâèëüíûé ðàçäåëèòåëü ñòðîêè. Âîçìîæíî ïðîïóùåíî ^M"
@@ -845,80 +1204,6 @@
 msgstr "E168: Êîìàíäà :finish èñïîëüçóåòñÿ âíå ôàéëà ñöåíàðèÿ"
 
 #, c-format
-msgid "Page %d"
-msgstr "Ñòðàíèöà %d"
-
-msgid "No text to be printed"
-msgstr "Ïå÷àòàòü íå÷åãî"
-
-#, c-format
-msgid "Printing page %d (%d%%)"
-msgstr "Ïå÷àòü ñòð. %d (%d%%)"
-
-#, c-format
-msgid " Copy %d of %d"
-msgstr " Êîïèÿ %d èç %d"
-
-#, c-format
-msgid "Printed: %s"
-msgstr "Íàïå÷àòàíî: %s"
-
-#, c-format
-msgid "Printing aborted"
-msgstr "Ïå÷àòü ïðåêðàùåíà"
-
-msgid "E455: Error writing to PostScript output file"
-msgstr "E455: Îøèáêà çàïèñè â ôàéë PostScript"
-
-#, c-format
-msgid "E624: Can't open file \"%s\""
-msgstr "E624: Íåâîçìîæíî îòêðûòü ôàéë \"%s\""
-
-#, c-format
-msgid "E457: Can't read PostScript resource file \"%s\""
-msgstr "E457: Íåâîçìîæíî ïðî÷èòàòü ôàéë ðåñóðñîâ PostScript \"%s\""
-
-#, c-format
-msgid "E618: file \"%s\" is not a PostScript resource file"
-msgstr "E618: ôàéë \"%s\" íå ÿâëÿåòñÿ ôàéëîì ðåñóðñîâ PostScript"
-
-#, c-format
-msgid "E619: file \"%s\" is not a supported PostScript resource file"
-msgstr "E619: ôàéë \"%s\" íå ÿâëÿåòñÿ äîïóñòèìûì ôàéëîì ðåñóðñîâ PostScript"
-
-#, c-format
-msgid "E621: \"%s\" resource file has wrong version"
-msgstr "E621: ôàéë ðåñóðñîâ \"%s\" íåèçâåñòíîé âåðñèè"
-
-msgid "E324: Can't open PostScript output file"
-msgstr "E324: Íåâîçìîæíî îòêðûòü ôàéë PostScript"
-
-#, c-format
-msgid "E456: Can't open file \"%s\""
-msgstr "E456: Íåâîçìîæíî îòêðûòü ôàéë \"%s\""
-
-msgid "E456: Can't find PostScript resource file \"prolog.ps\""
-msgstr "E456: Ôàéë ðåñóðñîâ PostScript \"prolog.ps\" íå íàéäåí"
-
-#, c-format
-msgid "E456: Can't find PostScript resource file \"%s.ps\""
-msgstr "E456: Ôàéë ðåñóðñîâ PostScript \"%s.ps\" íå íàéäåí"
-
-#, c-format
-msgid "E620: Unable to convert from multi-byte to \"%s\" encoding"
-msgstr ""
-"E620: Ïðåîáðàçîâàíèå èç ìóëüòèáàéòíûõ ñèìâîëîâ â êîäèðîâêó \"%s\" íåâîçìîæíî"
-
-msgid "Sending to printer..."
-msgstr "Îòïðàâêà íà ïå÷àòü..."
-
-msgid "E365: Failed to print PostScript file"
-msgstr "E365: Íå óäàëîñü âûïîëíèòü ïå÷àòü ôàéëà PostScript"
-
-msgid "Print job sent."
-msgstr "Çàäàíèå íà ïå÷àòü îòïðàâëåíî."
-
-#, c-format
 msgid "Current %slanguage: \"%s\""
 msgstr "Àêòèâíûé %sÿçûê: \"%s\""
 
@@ -929,12 +1214,11 @@
 msgid "Entering Ex mode.  Type \"visual\" to go to Normal mode."
 msgstr "Ïåðåõîä â ðåæèì Ex. Äëÿ ïåðåõîäà â Îáû÷íûé ðåæèì íàáåðèòå \"visual\""
 
-#. must be at EOF
 msgid "E501: At end-of-file"
 msgstr "E501: Â êîíöå ôàéëà"
 
 msgid "E169: Command too recursive"
-msgstr "E169: Cëèøêîì ðåêóðñèâíàÿ êîìàíäà"
+msgstr "E169: Ñëèøêîì ðåêóðñèâíàÿ êîìàíäà"
 
 #, c-format
 msgid "E605: Exception not caught: %s"
@@ -995,7 +1279,7 @@
 msgstr "Êîìàíäû, îïðåäåë¸ííûå ïîëüçîâàòåëåì, íå îáíàðóæåíû."
 
 msgid "E175: No attribute specified"
-msgstr "E175: ïàðàìåòð íå çàäàí"
+msgstr "E175: Ïàðàìåòð íå çàäàí"
 
 msgid "E176: Invalid number of arguments"
 msgstr "E176: Íåïðàâèëüíîå êîëè÷åñòâî ïàðàìåòðîâ"
@@ -1006,8 +1290,26 @@
 msgid "E178: Invalid default value for count"
 msgstr "E178: Íåïðàâèëüíîå çíà÷åíèå ÷èñëà-ïðèñòàâêè ïî óìîë÷àíèþ"
 
-msgid "E179: argument required for complete"
-msgstr "E179: äëÿ çàâåðøåíèÿ òðåáóåòñÿ óêàçàòü ïàðàìåòð"
+msgid "E179: argument required for -complete"
+msgstr "E179: Äëÿ -complete òðåáóåòñÿ óêàçàòü ïàðàìåòð"
+
+#, c-format
+msgid "E181: Invalid attribute: %s"
+msgstr "E181: Íåïðàâèëüíûé àòðèáóò: %s"
+
+msgid "E182: Invalid command name"
+msgstr "E182: Íåïðàâèëüíîå èìÿ êîìàíäû"
+
+msgid "E183: User defined commands must start with an uppercase letter"
+msgstr "E183: Êîìàíäà ïîëüçîâàòåëÿ äîëæíà íà÷èíàòüñÿ ñ çàãëàâíîé áóêâû"
+
+msgid "E841: Reserved name, cannot be used for user defined command"
+msgstr ""
+"E841: Çàðåçåðâèðîâàííîå èìÿ íå ìîæåò èñïîëüçîâàòüñÿ äëÿ êîìàíä ïîëüçîâàòåëÿ"
+
+#, c-format
+msgid "E184: No such user-defined command: %s"
+msgstr "E184: Íåò òàêîé êîìàíäû ïîëüçîâàòåëÿ: %s"
 
 #, c-format
 msgid "E180: Invalid complete value: %s"
@@ -1020,36 +1322,40 @@
 msgid "E467: Custom completion requires a function argument"
 msgstr "E467: Îñîáîå äîïîëíåíèå òðåáóåò óêàçàíèÿ ïàðàìåòðà ôóíêöèè"
 
-#, c-format
-msgid "E181: Invalid attribute: %s"
-msgstr "E181: Íåïðàâèëüíûé àòðèáóò: %s"
-
-msgid "E182: Invalid command name"
-msgstr "E182: Íåïðàâèëüíîå èìÿ êîìàíäû"
-
-msgid "E183: User defined commands must start with an uppercase letter"
-msgstr "E183: Êîìàíäà ïîëüçîâàòåëÿ äîëæíà íà÷èíàòüñÿ ñ çàãëàâíîé áóêâû"
+msgid "unknown"
+msgstr "íåèçâåñòíî"
 
 #, c-format
-msgid "E184: No such user-defined command: %s"
-msgstr "E184: Íåò òàêîé êîìàíäû ïîëüçîâàòåëÿ: %s"
-
-#, c-format
-msgid "E185: Cannot find color scheme %s"
-msgstr "E185: Öâåòîâàÿ ñõåìà %s íå íàéäåíà"
+msgid "E185: Cannot find color scheme '%s'"
+msgstr "E185: Íåâîçìîæíî íàéòè öâåòîâóþ ñõåìó '%s'"
 
 msgid "Greetings, Vim user!"
-msgstr "Ïðèâåò, ïîëüçîâàòåëü Vim!"
+msgstr "Ïðèâåòñòâóåì âàñ, ïîëüçîâàòåëü Vim!"
+
+msgid "E784: Cannot close last tab page"
+msgstr "E784: Íåëüçÿ çàêðûòü ïîñëåäíþþ âêëàäêó"
+
+msgid "Already only one tab page"
+msgstr "Íà ýêðàíå âñåãî îäíà âêëàäêà"
 
 msgid "Edit File in new window"
 msgstr "Ðåäàêòèðîâàòü ôàéë â íîâîì îêíå"
 
+#, c-format
+msgid "Tab page %d"
+msgstr "Âêëàäêà %d"
+
 msgid "No swap file"
 msgstr "Áåç ñâîï-ôàéëà"
 
 msgid "Append File"
 msgstr "Äîáàâèòü ôàéë"
 
+msgid "E747: Cannot change directory, buffer is modified (add ! to override)"
+msgstr ""
+"E747: Ñìåíà êàòàëîãà íåâîçìîæíà, áóôåð èçìåí¸í (äîáàâüòå !, ÷òîáû îáîéòè "
+"ïðîâåðêó)"
+
 msgid "E186: No previous directory"
 msgstr "E186: Íåò ïðåäûäóùåãî êàòàëîãà"
 
@@ -1057,7 +1363,7 @@
 msgstr "E187: Íåèçâåñòíî"
 
 msgid "E465: :winsize requires two number arguments"
-msgstr "E465: êîìàíäà :winsize òðåáóåò óêàçàíèÿ äâóõ ÷èñëîâûõ ïàðàìåòðîâ"
+msgstr "E465: Êîìàíäà :winsize òðåáóåò óêàçàíèÿ äâóõ ÷èñëîâûõ ïàðàìåòðîâ"
 
 #, c-format
 msgid "Window position: X %d, Y %d"
@@ -1067,7 +1373,7 @@
 msgstr "E188: Â äàííîé ñèñòåìå îïðåäåëåíèå ïîëîæåíèÿ îêíà íå ðàáîòàåò"
 
 msgid "E466: :winpos requires two number arguments"
-msgstr "E466: êîìàíäà :winpos òðåáóåò óêàçàíèÿ äâóõ ÷èñëîâûõ ïàðàìåòðîâ"
+msgstr "E466: Êîìàíäà :winpos òðåáóåò óêàçàíèÿ äâóõ ÷èñëîâûõ ïàðàìåòðîâ"
 
 msgid "Save Redirection"
 msgstr "Ïåðåíàïðàâëåíèå çàïèñè"
@@ -1082,8 +1388,12 @@
 msgstr "Ñîõðàíåíèå íàñòðîåê"
 
 #, c-format
+msgid "E739: Cannot create directory: %s"
+msgstr "E739: Íåâîçìîæíî ñîçäàòü êàòàëîã: %s"
+
+#, c-format
 msgid "E189: \"%s\" exists (add ! to override)"
-msgstr "E189: \"%s\" ñóùåñòâóåò (!, ÷òîáû îáîéòè ïðîâåðêó)"
+msgstr "E189: \"%s\" ñóùåñòâóåò (äîáàâüòå !, ÷òîáû îáîéòè ïðîâåðêó)"
 
 #, c-format
 msgid "E190: Cannot open \"%s\" for writing"
@@ -1096,6 +1406,9 @@
 msgid "E192: Recursive use of :normal too deep"
 msgstr "E192: Ñëèøêîì ãëóáîêàÿ ðåêóðñèÿ ïðè èñïîëüçîâàíèè êîìàíäû :normal"
 
+msgid "E809: #< is not available without the +eval feature"
+msgstr "E809: #< íå äîñòóïíî áåç îñîáåííîñòè +eval"
+
 msgid "E194: No alternate file name to substitute for '#'"
 msgstr "E194: Íåò ñîñåäíåãî èìåíè ôàéëà äëÿ çàìåíû '#'"
 
@@ -1109,7 +1422,10 @@
 msgstr "E497: Íåò àâòîêîìàíäíîãî èìåíè ñîîòâåòñòâèÿ äëÿ çàìåíû \"<amatch>\""
 
 msgid "E498: no :source file name to substitute for \"<sfile>\""
-msgstr "E498: íåò èìåíè ôàéëà :source äëÿ çàìåíû \"<sfile>\""
+msgstr "E498: Íåò èìåíè ôàéëà :source äëÿ çàìåíû \"<sfile>\""
+
+msgid "E842: no line number to use for \"<slnum>\""
+msgstr "E842: Íåò íîìåðà ñòðîêè äëÿ èñïîëüçîâàíèÿ \"<slnum>\""
 
 #, no-c-format
 msgid "E499: Empty file name for '%' or '#', only works with \":p:h\""
@@ -1176,7 +1492,7 @@
 msgstr "Ïðåðûâàíèå"
 
 msgid "E579: :if nesting too deep"
-msgstr "E579: ñëèøêîì ãëóáîêî âëîæåííûé :if"
+msgstr "E579: Ñëèøêîì ãëóáîêî âëîæåííûé :if"
 
 msgid "E580: :endif without :if"
 msgstr "E580: :endif áåç :if"
@@ -1188,22 +1504,28 @@
 msgstr "E582: :elseif áåç :if"
 
 msgid "E583: multiple :else"
-msgstr "E583: îáíàðóæåíî íåñêîëüêî :else"
+msgstr "E583: Îáíàðóæåíî íåñêîëüêî :else"
 
 msgid "E584: :elseif after :else"
 msgstr "E584: :elseif ïîñëå :else"
 
-msgid "E585: :while nesting too deep"
-msgstr "E585: ñëèøêîì ãëóáîêî âëîæåííûé :while"
+msgid "E585: :while/:for nesting too deep"
+msgstr "E585: Ñëèøêîì ãëóáîêîå âëîæåíèå :while èëè :for"
 
-msgid "E586: :continue without :while"
-msgstr "E586: :continue áåç :while"
+msgid "E586: :continue without :while or :for"
+msgstr "E586: :continue áåç :while èëè :for"
 
-msgid "E587: :break without :while"
-msgstr "E587: :break áåç :while"
+msgid "E587: :break without :while or :for"
+msgstr "E587: :break áåç :while èëè :for"
+
+msgid "E732: Using :endfor with :while"
+msgstr "E732: Èñïîëüçîâàíèå :endfor ñ :while"
+
+msgid "E733: Using :endwhile with :for"
+msgstr "E733: Èñïîëüçîâàíèå :endwhile ñ :for"
 
 msgid "E601: :try nesting too deep"
-msgstr "E601: ñëèøêîì ãëóáîêî âëîæåííûé :try"
+msgstr "E601: Ñëèøêîì ãëóáîêî âëîæåííûé :try"
 
 msgid "E603: :catch without :try"
 msgstr "E603: :catch áåç :try"
@@ -1218,13 +1540,19 @@
 
 #. Give up for a multiple ":finally" and ignore it.
 msgid "E607: multiple :finally"
-msgstr "E607: îáíàðóæåíî íåñêîëüêî :finally"
+msgstr "E607: Îáíàðóæåíî íåñêîëüêî :finally"
 
 msgid "E602: :endtry without :try"
 msgstr "E602: :endtry áåç :try"
 
 msgid "E193: :endfunction not inside a function"
-msgstr "E193: êîìàíäà :endfunction ìîæåò èñïîëüçîâàòüñÿ òîëüêî âíóòðè ôóíêöèè"
+msgstr "E193: Êîìàíäà :endfunction ìîæåò èñïîëüçîâàòüñÿ òîëüêî âíóòðè ôóíêöèè"
+
+msgid "E788: Not allowed to edit another buffer now"
+msgstr "E788: Ñåé÷àñ íå äîïóñêàåòñÿ ðåäàêòèðîâàíèå äðóãîãî áóôåðà"
+
+msgid "E811: Not allowed to change buffer information now"
+msgstr "E811: Ñåé÷àñ íå äîïóñêàåòñÿ èçìåíåíèå èíôîðìàöèè î áóôåðå"
 
 msgid "tagname"
 msgstr "èìÿ ìåòêè"
@@ -1261,6 +1589,9 @@
 msgid "E199: Active window or buffer deleted"
 msgstr "E199: Óäàëåíî àêòèâíîå îêíî èëè áóôåð"
 
+msgid "E812: Autocommands changed buffer or buffer name"
+msgstr "E812: Àâòîêîìàíäû èçìåíèëè áóôåð èëè èìÿ áóôåðà"
+
 msgid "Illegal file name"
 msgstr "Íåäîïóñòèìîå èìÿ ôàéëà"
 
@@ -1270,9 +1601,18 @@
 msgid "is not a file"
 msgstr "íå ÿâëÿåòñÿ ôàéëîì"
 
+msgid "is a device (disabled with 'opendevice' option)"
+msgstr "ÿâëÿåòñÿ óñòðîéñòâîì (îòêëþ÷åíî ïðè îïöèè 'opendevice')"
+
 msgid "[New File]"
 msgstr "[Íîâûé ôàéë]"
 
+msgid "[New DIRECTORY]"
+msgstr "[Íîâûé ÊÀÒÀËÎÃ]"
+
+msgid "[File too big]"
+msgstr "[Ôàéë ñëèøêîì áîëüøîé]"
+
 msgid "[Permission Denied]"
 msgstr "[Äîñòóï çàïðåù¸í]"
 
@@ -1280,13 +1620,13 @@
 msgstr "E200:  ðåçóëüòàòå âûïîëíåíèÿ àâòîêîìàíä *ReadPre ôàéë ñòàë íå÷èòàåìûì"
 
 msgid "E201: *ReadPre autocommands must not change current buffer"
-msgstr "E201: àâòîêîìàíäû *ReadPre íå äîëæíû èçìåíÿòü àêòèâíûé áóôåð"
+msgstr "E201: Àâòîêîìàíäû *ReadPre íå äîëæíû èçìåíÿòü àêòèâíûé áóôåð"
 
 msgid "Vim: Reading from stdin...\n"
-msgstr "Vim: âûïîëíÿåòñÿ ÷òåíèå èç ñòàíäàðòíîãî ïîòîêà ââîäà stdin...\n"
+msgstr "Vim: ×òåíèå èç ñòàíäàðòíîãî ïîòîêà ââîäà stdin...\n"
 
 msgid "Reading from stdin..."
-msgstr "Âûïîëíÿåòñÿ ÷òåíèå èç ñòàíäàðòíîãî ïîòîêà ââîäà stdin..."
+msgstr "×òåíèå èç ñòàíäàðòíîãî ïîòîêà ââîäà stdin..."
 
 #. Re-opening the original file failed!
 msgid "E202: Conversion made file unreadable!"
@@ -1301,15 +1641,12 @@
 msgid "[socket]"
 msgstr "[ãíåçäî]"
 
-msgid "[RO]"
-msgstr "[RO]"
+msgid "[character special]"
+msgstr "[ñïåöèàëüíûé ñèìâîëüíûé]"
 
 msgid "[CR missing]"
 msgstr "[ïðîïóùåíû ñèìâîëû CR]"
 
-msgid "[NL found]"
-msgstr "[Îáíàðóæåíû ñèìâîëû NL]"
-
 msgid "[long lines split]"
 msgstr "[äëèííûå ñòðîêè ðàçáèòû]"
 
@@ -1319,11 +1656,15 @@
 msgid "[converted]"
 msgstr "[ïåðåêîäèðîâàíî]"
 
+msgid "[blowfish]"
+msgstr "[blowfish]"
+
 msgid "[crypted]"
 msgstr "[çàøèôðîâàíî]"
 
-msgid "[CONVERSION ERROR]"
-msgstr "[ÎØÈÁÊÀ ÏÐÅÎÁÐÀÇÎÂÀÍÈß]"
+#, c-format
+msgid "[CONVERSION ERROR in line %ld]"
+msgstr "[ÎØÈÁÊÀ ÏÐÅÎÁÐÀÇÎÂÀÍÈß â ñòðîêå %ld]"
 
 #, c-format
 msgid "[ILLEGAL BYTE in line %ld]"
@@ -1341,6 +1682,12 @@
 msgid "can't read output of 'charconvert'"
 msgstr "íåâîçìîæíî ïðî÷èòàòü âûâîä 'charconvert'"
 
+msgid "E821: File is encrypted with unknown method"
+msgstr "E821: Ôàéë çàøèôðîâàí íåèçâåñòíûì ìåòîäîì"
+
+msgid "E676: No matching autocommands for acwrite buffer"
+msgstr "E676: Íåò ïîäõîäÿùèõ àâòîêîìàíä äëÿ áóôåðà acwrite"
+
 msgid "E203: Autocommands deleted or unloaded buffer to be written"
 msgstr ""
 "E203: Áóôåð, êîòîðûé òðåáîâàëîñü çàïèñàòü, óäàë¸í èëè âûãðóæåí àâòîêîìàíäîé"
@@ -1357,32 +1704,41 @@
 msgid "is not a file or writable device"
 msgstr "íå ÿâëÿåòñÿ ôàéëîì èëè óñòðîéñòâîì, äîñòóïíûì äëÿ çàïèñè"
 
+msgid "writing to device disabled with 'opendevice' option"
+msgstr "çàïèñü â óñòðîéñòâî îòêëþ÷åíà ïðè îïöèè 'opendevice'"
+
 msgid "is read-only (add ! to override)"
-msgstr "îòêðûò òîëüêî äëÿ ÷òåíèÿ (!, ÷òîáû îáîéòè ïðîâåðêó)"
+msgstr "îòêðûò òîëüêî äëÿ ÷òåíèÿ (äîáàâüòå !, ÷òîáû îáîéòè ïðîâåðêó)"
 
 msgid "E506: Can't write to backup file (add ! to override)"
-msgstr "E506: Çàïèñü â ðåçåðâíûé ôàéë íåâîçìîæíà (!, ÷òîáû îáîéòè ïðîâåðêó)"
+msgstr ""
+"E506: Çàïèñü â ðåçåðâíûé ôàéë íåâîçìîæíà (äîáàâüòå !, ÷òîáû îáîéòè ïðîâåðêó)"
 
 msgid "E507: Close error for backup file (add ! to override)"
-msgstr "E507: Îøèáêà çàêðûòèÿ ðåçåðâíîãî ôàéëà (!, ÷òîáû îáîéòè ïðîâåðêó)"
+msgstr ""
+"E507: Îøèáêà çàêðûòèÿ ðåçåðâíîãî ôàéëà (äîáàâüòå !, ÷òîáû îáîéòè ïðîâåðêó)"
 
 msgid "E508: Can't read file for backup (add ! to override)"
-msgstr "E508: Íåâîçìîæíî ïðî÷èòàòü ðåçåðâíûé ôàéë (!, ÷òîáû îáîéòè ïðîâåðêó)"
+msgstr ""
+"E508: Íåâîçìîæíî ïðî÷èòàòü ðåçåðâíûé ôàéë (äîáàâüòå !, ÷òîáû îáîéòè ïðîâåðêó)"
 
 msgid "E509: Cannot create backup file (add ! to override)"
-msgstr "E509: Íåâîçìîæíî ñîçäàòü ðåçåðâíûé ôàéë (!, ÷òîáû îáîéòè ïðîâåðêó)"
+msgstr ""
+"E509: Íåâîçìîæíî ñîçäàòü ðåçåðâíûé ôàéë (äîáàâüòå !, ÷òîáû îáîéòè ïðîâåðêó)"
 
 msgid "E510: Can't make backup file (add ! to override)"
-msgstr "E510: Íåâîçìîæíî ñîçäàòü ðåçåðâíûé ôàéë (!, ÷òîáû îáîéòè ïðîâåðêó)"
+msgstr ""
+"E510: Íåâîçìîæíî ñîçäàòü ðåçåðâíûé ôàéë (äîáàâüòå !, ÷òîáû îáîéòè ïðîâåðêó)"
 
 msgid "E460: The resource fork would be lost (add ! to override)"
-msgstr "E460: Âèëêà ðåñóðñà áóäåò ïîòåðÿíà (!, ÷òîáû îáîéòè ïðîâåðêó)"
+msgstr "E460: Âåòâü ðåñóðñà áóäåò ïîòåðÿíà (äîáàâüòå !, ÷òîáû îáîéòè ïðîâåðêó)"
 
 msgid "E214: Can't find temp file for writing"
 msgstr "E214: Âðåìåííûé ôàéë äëÿ çàïèñè íå íàéäåí"
 
 msgid "E213: Cannot convert (add ! to write without conversion)"
-msgstr "E213: Ïåðåêîäèðîâêà íåâîçìîæíà (! äëÿ çàïèñè áåç ïåðåêîäèðîâêè)"
+msgstr ""
+"E213: Ïåðåêîäèðîâêà íåâîçìîæíà (äîáàâüòå ! äëÿ çàïèñè áåç ïåðåêîäèðîâêè)"
 
 msgid "E166: Can't open linked file for writing"
 msgstr "E166: Íåâîçìîæíî îòêðûòü ñâÿçàííûé ôàéë äëÿ çàïèñè"
@@ -1396,15 +1752,29 @@
 msgid "E512: Close failed"
 msgstr "E512: Îïåðàöèÿ çàêðûòèÿ íå óäàëàñü"
 
-msgid "E513: write error, conversion failed"
-msgstr "E513: Îøèáêà çàïèñè, ïðåîáðàçîâàíèå íå óäàëîñü"
+msgid "E513: write error, conversion failed (make 'fenc' empty to override)"
+msgstr ""
+"E513: Îøèáêà çàïèñè, ïðåîáðàçîâàíèå íå óäàëîñü (î÷èñòèòå 'fenc', ÷òîáû "
+"îáîéòè)"
+
+#, c-format
+msgid ""
+"E513: write error, conversion failed in line %ld (make 'fenc' empty to "
+"override)"
+msgstr ""
+"E513: Îøèáêà çàïèñè, ïðåîáðàçîâàíèå íå óäàëîñü íà ñòðîêå %ld (î÷èñòèòå "
+"'fenc', ÷òîáû îáîéòè)"
 
 msgid "E514: write error (file system full?)"
-msgstr "E514: îøèáêà çàïèñè (íåò ñâîáîäíîãî ìåñòà?)"
+msgstr "E514: Îøèáêà çàïèñè (íåò ñâîáîäíîãî ìåñòà?)"
 
 msgid " CONVERSION ERROR"
 msgstr " ÎØÈÁÊÀ ÏÐÅÎÁÐÀÇÎÂÀÍÈß"
 
+#, c-format
+msgid " in line %ld;"
+msgstr " íà ñòðîêå %ld;"
+
 msgid "[Device]"
 msgstr "[Óñòðîéñòâî]"
 
@@ -1412,13 +1782,13 @@
 msgstr "[Íîâûé]"
 
 msgid " [a]"
-msgstr " [a]"
+msgstr " [ä]"
 
 msgid " appended"
 msgstr " äîáàâëåíî"
 
 msgid " [w]"
-msgstr " [w]"
+msgstr " [ç]"
 
 msgid " written"
 msgstr " çàïèñàíî"
@@ -1472,6 +1842,11 @@
 msgstr "1 ñèìâîë"
 
 #, c-format
+msgid "%lld characters"
+msgstr "ñèìâîëîâ: %lld"
+
+#. Explicit typecast avoids warning on Mac OS X 10.6
+#, c-format
 msgid "%ld characters"
 msgstr "ñèìâîëîâ: %ld"
 
@@ -1506,8 +1881,8 @@
 msgstr "E246: Áóôåð óäàë¸í ïðè âûïîëíåíèè àâòîêîìàíäû FileChangedShell"
 
 #, c-format
-msgid "E211: Warning: File \"%s\" no longer available"
-msgstr "E211: Ïðåäóïðåæäåíèå: ôàéë \"%s\" áîëüøå íå äîñòóïåí"
+msgid "E211: File \"%s\" no longer available"
+msgstr "E211: Ôàéë \"%s\" áîëüøå íå äîñòóïåí"
 
 #, c-format
 msgid ""
@@ -1517,25 +1892,31 @@
 "W12: Ïðåäóïðåæäåíèå: ôàéë \"%s\" è áóôåð Vim áûëè èçìåíåíû íåçàâèñèìî äðóã "
 "îò äðóãà"
 
+msgid "See \":help W12\" for more info."
+msgstr "Ñì. \":help W12\" äëÿ äîïîëíèòåëüíîé èíôîðìàöèè."
+
 #, c-format
 msgid "W11: Warning: File \"%s\" has changed since editing started"
 msgstr ""
 "W11: Ïðåäóïðåæäåíèå: ôàéë \"%s\" áûë èçìåí¸í ïîñëå íà÷àëà ðåäàêòèðîâàíèÿ"
 
+msgid "See \":help W11\" for more info."
+msgstr "Ñì. \":help W11\" äëÿ äîïîëíèòåëüíîé èíôîðìàöèè."
+
 #, c-format
 msgid "W16: Warning: Mode of file \"%s\" has changed since editing started"
 msgstr ""
 "W16: Ïðåäóïðåæäåíèå: ðåæèì äîñòóïà ê ôàéëó \"%s\" áûë èçìåí¸í ïîñëå íà÷àëà "
 "ðåäàêòèðîâàíèÿ"
 
+msgid "See \":help W16\" for more info."
+msgstr "Ñì. \":help W16\" äëÿ äîïîëíèòåëüíîé èíôîðìàöèè."
+
 #, c-format
 msgid "W13: Warning: File \"%s\" has been created after editing started"
 msgstr ""
 "W13: Ïðåäóïðåæäåíèå: ôàéë \"%s\" áûë ñîçäàí ïîñëå íà÷àëà ðåäàêòèðîâàíèÿ"
 
-msgid "See \":help W11\" for more info."
-msgstr "Ñì. äîïîëíèòåëüíóþ èíôîðìàöèþ â \":help W11\"."
-
 msgid "Warning"
 msgstr "Ïðåäóïðåæäåíèå"
 
@@ -1544,7 +1925,7 @@
 "&Load File"
 msgstr ""
 "&OK\n"
-"&Çàãðóçèòü ôàéë"
+"&L Çàãðóçèòü ôàéë"
 
 #, c-format
 msgid "E462: Could not prepare for reloading \"%s\""
@@ -1557,6 +1938,10 @@
 msgid "--Deleted--"
 msgstr "--Óäàëåíî--"
 
+#, c-format
+msgid "auto-removing autocommand: %s <buffer=%d>"
+msgstr "àâòî-óäàëåíèå àâòîêîìàíäû: %s <áóôôåð=%d>"
+
 #. the group doesn't exist
 #, c-format
 msgid "E367: No such group: \"%s\""
@@ -1582,6 +1967,10 @@
 "\n"
 "--- Àâòîêîìàíäû ---"
 
+#, c-format
+msgid "E680: <buffer=%d>: invalid buffer number "
+msgstr "E680: <buffer=%d>: íåïðàâèëüíûé íîìåð áóôåðà "
+
 msgid "E217: Can't execute autocommands for ALL events"
 msgstr "E217: Íåâîçìîæíî âûïîëíèòü àâòîêîìàíäû äëÿ ÂÑÅÕ ñîáûòèé"
 
@@ -1599,7 +1988,6 @@
 msgid "Executing %s"
 msgstr "Âûïîëíåíèå %s"
 
-#. always scroll up, don't overwrite
 #, c-format
 msgid "autocommand %s"
 msgstr "àâòîêîìàíäà %s"
@@ -1621,27 +2009,31 @@
 msgstr ""
 "E351: Ñêëàäêà íå ìîæåò áûòü óäàëåíà ñ òåêóùèì çíà÷åíèåì îïöèè 'foldmethod'"
 
+#, c-format
+msgid "+--%3ld lines folded "
+msgstr "+--%3ld ñòðîê â ñêëàäêå"
+
 msgid "E222: Add to read buffer"
 msgstr "E222: Äîáàâëåíèå â áóôåð ÷òåíèÿ"
 
 msgid "E223: recursive mapping"
-msgstr "E223: ðåêóðñèâíàÿ ïðèâÿçêà"
+msgstr "E223: Ðåêóðñèâíàÿ ïðèâÿçêà"
 
 #, c-format
 msgid "E224: global abbreviation already exists for %s"
-msgstr "E224: óæå åñòü ãëîáàëüíîå ñîêðàùåíèå äëÿ %s"
+msgstr "E224: Óæå åñòü ãëîáàëüíîå ñîêðàùåíèå äëÿ %s"
 
 #, c-format
 msgid "E225: global mapping already exists for %s"
-msgstr "E225: óæå åñòü ãëîáàëüíàÿ ïðèâÿçêà äëÿ %s"
+msgstr "E225: Óæå åñòü ãëîáàëüíàÿ ïðèâÿçêà äëÿ %s"
 
 #, c-format
 msgid "E226: abbreviation already exists for %s"
-msgstr "E226: óæå åñòü ñîêðàùåíèå äëÿ %s"
+msgstr "E226: Óæå åñòü ñîêðàùåíèå äëÿ %s"
 
 #, c-format
 msgid "E227: mapping already exists for %s"
-msgstr "E227: óæå åñòü ïðèâÿçêà äëÿ %s"
+msgstr "E227: Óæå åñòü ïðèâÿçêà äëÿ %s"
 
 msgid "No abbreviation found"
 msgstr "Ñîêðàùåíèÿ íå íàéäåíû"
@@ -1652,6 +2044,12 @@
 msgid "E228: makemap: Illegal mode"
 msgstr "E228: makemap: íåäîïóñòèìûé ðåæèì"
 
+msgid "E851: Failed to create a new process for the GUI"
+msgstr "E851: Íåâîçìîæíî ñîçäàòü íîâûé ïðîöåññ äëÿ ãðàô. èíòåðôåéñà"
+
+msgid "E852: The child process failed to start the GUI"
+msgstr "E852: Ïðîöåññó-ïîòîìêó íå óäàëîñü çàïóñòèòü ãðàô. èíòåðôåéñ"
+
 msgid "E229: Cannot start the GUI"
 msgstr "E229: Íåâîçìîæíî ïåðåéòè â ðåæèì ãðàôè÷åñêîãî èíòåðôåéñà"
 
@@ -1664,15 +2062,18 @@
 "E665: Íåâîçìîæíî ïåðåéòè â ðåæèì ãðàô. èíòåðôåéñà, íåïðàâèëüíî çàäàíû øðèôòû"
 
 msgid "E231: 'guifontwide' invalid"
-msgstr "E231: íåïðàâèëüíîå çíà÷åíèå îïöèè 'guifontwide'"
+msgstr "E231: Íåïðàâèëüíîå çíà÷åíèå îïöèè 'guifontwide'"
 
 msgid "E599: Value of 'imactivatekey' is invalid"
-msgstr "E599: íåïðàâèëüíîå çíà÷åíèå îïöèè 'imactivatekey'"
+msgstr "E599: Íåïðàâèëüíîå çíà÷åíèå îïöèè 'imactivatekey'"
 
 #, c-format
 msgid "E254: Cannot allocate color %s"
 msgstr "E254: Íåâîçìîæíî íàçíà÷èòü öâåò %s"
 
+msgid "No match at cursor, finding next"
+msgstr "Íåò ñîâïàäåíèÿ ïîä êóðñîðîì, ïîèñê ñëåäóþùåãî"
+
 msgid "<cannot open> "
 msgstr "<íåëüçÿ îòêðûòü> "
 
@@ -1706,9 +2107,6 @@
 "E232: \"Ïóçûðü\" äëÿ âû÷èñëåíèé, âêëþ÷àþùèé è ñîîáùåíèå, è îáðàòíûé âûçîâ, "
 "íå ìîæåò áûòü ñîçäàí"
 
-msgid "Vim dialog..."
-msgstr "Äèàëîãîâîå îêíî Vim..."
-
 msgid ""
 "&Yes\n"
 "&No\n"
@@ -1722,10 +2120,10 @@
 msgstr "Ìåòîäû Ââîäà"
 
 msgid "VIM - Search and Replace..."
-msgstr "VIM - Ïîèñê è çàìåíà..."
+msgstr "VIM — Ïîèñê è çàìåíà..."
 
 msgid "VIM - Search..."
-msgstr "VIM - Ïîèñê..."
+msgstr "VIM — Ïîèñê..."
 
 msgid "Find what:"
 msgstr "×òî èùåì:"
@@ -1751,45 +2149,70 @@
 msgid "Down"
 msgstr "Âíèç"
 
+#. 'Find Next' button
 msgid "Find Next"
 msgstr "Íàéòè ñëåäóþùåå"
 
+#. 'Replace' button
 msgid "Replace"
 msgstr "Çàìåíà"
 
+#. 'Replace All' button
 msgid "Replace All"
 msgstr "Çàìåíèòü âñå"
 
 msgid "Vim: Received \"die\" request from session manager\n"
 msgstr "Vim: Ïîëó÷åí çàïðîñ íà ïðåêðàùåíèå ðàáîòû îò äèñïåò÷åðà ñåàíñîâ\n"
 
+msgid "Close"
+msgstr "Çàêðûòü"
+
+msgid "New tab"
+msgstr "Íîâàÿ âêëàäêà"
+
+msgid "Open Tab..."
+msgstr "Îòêðûòü âêëàäêó..."
+
 msgid "Vim: Main window unexpectedly destroyed\n"
 msgstr "Vim: Îñíîâíîå îêíî áûëî íåîæèäàííî çàêðûòî\n"
 
-msgid "Font Selection"
-msgstr "Âûáîð øðèôòà"
+msgid "&Filter"
+msgstr "&Ôèëüòð"
 
-msgid "Used CUT_BUFFER0 instead of empty selection"
-msgstr "Âìåñòî ïóñòîãî âûäåëåíèÿ èñïîëüçóåòñÿ CUT_BUFFER0"
-
-msgid "Filter"
-msgstr "Ôèëüòð"
+msgid "&Cancel"
+msgstr "Î&òìåíà"
 
 msgid "Directories"
 msgstr "Êàòàëîãè"
 
-msgid "Help"
-msgstr "Ñïðàâêà"
+msgid "Filter"
+msgstr "Ôèëüòð"
+
+msgid "&Help"
+msgstr "&Ñïðàâêà"
 
 msgid "Files"
 msgstr "Ôàéëû"
 
+msgid "&OK"
+msgstr "&Äà"
+
 msgid "Selection"
 msgstr "Âûäåëåíèå"
 
-msgid "Undo"
-msgstr "Îòìåíà"
+msgid "Find &Next"
+msgstr "Íàéòè &ñëåäóþùåå"
 
+msgid "&Replace"
+msgstr "Çà&ìåíà"
+
+msgid "Replace &All"
+msgstr "Çàìåíèòü &âñå"
+
+msgid "&Undo"
+msgstr "Î&òìåíà"
+
+#, c-format
 msgid "E671: Cannot find window title \"%s\""
 msgstr "E671: Îêíî ñ çàãîëîâêîì \"%s\" íå îáíàðóæåíî"
 
@@ -1800,20 +2223,34 @@
 msgid "E672: Unable to open window inside MDI application"
 msgstr "E672: Íåâîçìîæíî îòêðûòü îêíî âíóòðè ïðèëîæåíèÿ MDI"
 
+msgid "Close tab"
+msgstr "Çàêðûòü âêëàäêó"
+
+msgid "Open tab..."
+msgstr "Îòêðûòü âêëàäêó..."
+
 msgid "Find string (use '\\\\' to find  a '\\')"
 msgstr "Ïîèñê ñòðîêè (èñïîëüçóéòå '\\\\' äëÿ ïîèñêà '\\')"
 
 msgid "Find & Replace (use '\\\\' to find  a '\\')"
 msgstr "Ïîèñê è çàìåíà (èñïîëüçóéòå '\\\\' äëÿ ïîèñêà '\\')"
 
+#. We fake this: Use a filter that doesn't select anything and a default
+#. * file name that won't be used.
+msgid "Not Used"
+msgstr "Íå èñïîëüçóåòñÿ"
+
+msgid "Directory\t*.nothing\n"
+msgstr "Êàòàëîã\t*.íè÷åãî\n"
+
 msgid "Vim E458: Cannot allocate colormap entry, some colors may be incorrect"
 msgstr ""
-"Vim E458: íåâîçìîæíî âûäåëèòü çàïèñü â òàáëèöå öâåòà, íåêîòîðûå öâåòàìîãóò "
+"Vim E458: Íåâîçìîæíî âûäåëèòü çàïèñü â òàáëèöå öâåòà, íåêîòîðûå öâåòà ìîãóò "
 "îòîáðàæàòüñÿ íåïðàâèëüíî"
 
 #, c-format
 msgid "E250: Fonts for the following charsets are missing in fontset %s:"
-msgstr "E250: â íàáîðå øðèôòîâ %s îòñóòñòâóþò øðèôòû äëÿ ñëåäóþùèõ êîäèðîâîê:"
+msgstr "E250: Â íàáîðå øðèôòîâ %s îòñóòñòâóþò øðèôòû äëÿ ñëåäóþùèõ êîäèðîâîê:"
 
 #, c-format
 msgid "E252: Fontset name: %s"
@@ -1851,9 +2288,133 @@
 "Øèðèíà øðèôòà font1: %ld\n"
 "\n"
 
+msgid "Invalid font specification"
+msgstr "Íåïðàâèëüíîå îïðåäåëåíèå øðèôòà"
+
+msgid "&Dismiss"
+msgstr "Î&òêëîíèòü"
+
+msgid "no specific match"
+msgstr "íåò ñïåöèàëüíîãî ñîâïàäåíèÿ"
+
+msgid "Vim - Font Selector"
+msgstr "Vim — Âûáîð øðèôòà"
+
+msgid "Name:"
+msgstr "Íàçâàíèå:"
+
+#. create toggle button
+msgid "Show size in Points"
+msgstr "Ïîêàçûâàòü ðàçìåð â ïóíêòàõ"
+
+msgid "Encoding:"
+msgstr "Êîäèðîâêà:"
+
+msgid "Font:"
+msgstr "Øðèôò:"
+
+msgid "Style:"
+msgstr "Ñòèëü:"
+
+msgid "Size:"
+msgstr "Ðàçìåð:"
+
 msgid "E256: Hangul automata ERROR"
 msgstr "E256: ÎØÈÁÊÀ àâòîìàòèêè Õàíãûë"
 
+msgid "E550: Missing colon"
+msgstr "E550: Ïðîïóùåíî äâîåòî÷èå"
+
+msgid "E551: Illegal component"
+msgstr "E551: Íåäîïóñòèìûé êîìïîíåíò"
+
+msgid "E552: digit expected"
+msgstr "E552: Òðåáóåòñÿ óêàçàòü öèôðó"
+
+#, c-format
+msgid "Page %d"
+msgstr "Ñòðàíèöà %d"
+
+msgid "No text to be printed"
+msgstr "Ïå÷àòàòü íå÷åãî"
+
+#, c-format
+msgid "Printing page %d (%d%%)"
+msgstr "Ïå÷àòü ñòð. %d (%d%%)"
+
+#, c-format
+msgid " Copy %d of %d"
+msgstr " Êîïèÿ %d èç %d"
+
+#, c-format
+msgid "Printed: %s"
+msgstr "Íàïå÷àòàíî: %s"
+
+msgid "Printing aborted"
+msgstr "Ïå÷àòü ïðåêðàùåíà"
+
+msgid "E455: Error writing to PostScript output file"
+msgstr "E455: Îøèáêà çàïèñè â ôàéë PostScript"
+
+#, c-format
+msgid "E624: Can't open file \"%s\""
+msgstr "E624: Íåâîçìîæíî îòêðûòü ôàéë \"%s\""
+
+#, c-format
+msgid "E457: Can't read PostScript resource file \"%s\""
+msgstr "E457: Íåâîçìîæíî ïðî÷èòàòü ôàéë ðåñóðñîâ PostScript \"%s\""
+
+#, c-format
+msgid "E618: file \"%s\" is not a PostScript resource file"
+msgstr "E618: Ôàéë \"%s\" íå ÿâëÿåòñÿ ôàéëîì ðåñóðñîâ PostScript"
+
+#, c-format
+msgid "E619: file \"%s\" is not a supported PostScript resource file"
+msgstr "E619: Ôàéë \"%s\" íå ÿâëÿåòñÿ äîïóñòèìûì ôàéëîì ðåñóðñîâ PostScript"
+
+#, c-format
+msgid "E621: \"%s\" resource file has wrong version"
+msgstr "E621: Ôàéë ðåñóðñîâ \"%s\" íåèçâåñòíîé âåðñèè"
+
+msgid "E673: Incompatible multi-byte encoding and character set."
+msgstr "E673: Íåñîâìåñòèìûå ìíîãîáàéòîâàÿ êîäèðîâêà è íàáîð ñèìâîëîâ."
+
+msgid "E674: printmbcharset cannot be empty with multi-byte encoding."
+msgstr "E674: printmbcharset íå ìîæåò áûòü ïóñòûì ïðè ìíîãîáàéòîâîé êîäèðîâêå."
+
+msgid "E675: No default font specified for multi-byte printing."
+msgstr "E675: Íåò îïðåäåëåíèÿ øðèôòà ïî óìîë÷àíèþ äëÿ ìíîãîáàéòîâîé ïå÷àòè."
+
+msgid "E324: Can't open PostScript output file"
+msgstr "E324: Íåâîçìîæíî îòêðûòü ôàéë PostScript"
+
+#, c-format
+msgid "E456: Can't open file \"%s\""
+msgstr "E456: Íåâîçìîæíî îòêðûòü ôàéë \"%s\""
+
+msgid "E456: Can't find PostScript resource file \"prolog.ps\""
+msgstr "E456: Ôàéë ðåñóðñîâ PostScript \"prolog.ps\" íå íàéäåí"
+
+msgid "E456: Can't find PostScript resource file \"cidfont.ps\""
+msgstr "E456: Ôàéë ðåñóðñîâ PostScript \"cidfont.ps\" íå íàéäåí"
+
+#, c-format
+msgid "E456: Can't find PostScript resource file \"%s.ps\""
+msgstr "E456: Ôàéë ðåñóðñîâ PostScript \"%s.ps\" íå íàéäåí"
+
+#, c-format
+msgid "E620: Unable to convert to print encoding \"%s\""
+msgstr "E620: Íåâîçìîæíî ïðåîáðàçîâàòü â êîäèðîâêó ïå÷àòü \"%s\""
+
+msgid "Sending to printer..."
+msgstr "Îòïðàâêà íà ïå÷àòü..."
+
+msgid "E365: Failed to print PostScript file"
+msgstr "E365: Íå óäàëîñü âûïîëíèòü ïå÷àòü ôàéëà PostScript"
+
+msgid "Print job sent."
+msgstr "Çàäàíèå íà ïå÷àòü îòïðàâëåíî."
+
 msgid "Add a new database"
 msgstr "Äîáàâèòü íîâóþ áàçó äàííûõ"
 
@@ -1887,10 +2448,10 @@
 
 #, c-format
 msgid "E563: stat(%s) error: %d"
-msgstr "E563: îøèáêà stat(%s): %d"
+msgstr "E563: Îøèáêà stat(%s): %d"
 
 msgid "E563: stat error"
-msgstr "E563: îøèáêà stat"
+msgstr "E563: Îøèáêà stat"
 
 #, c-format
 msgid "E564: %s is not a directory or a valid cscope database"
@@ -1902,10 +2463,10 @@
 
 #, c-format
 msgid "E262: error reading cscope connection %ld"
-msgstr "E262: îøèáêà ïîëó÷åíèÿ èíôîðìàöèè îò ñîåäèíåíèÿ cscope %ld"
+msgstr "E262: Îøèáêà ïîëó÷åíèÿ èíôîðìàöèè îò ñîåäèíåíèÿ cscope %ld"
 
 msgid "E561: unknown cscope search type"
-msgstr "E561: íåèçâåñòíûé òèï ïîèñêà cscope"
+msgstr "E561: Íåèçâåñòíûé òèï ïîèñêà cscope"
 
 msgid "E566: Could not create cscope pipes"
 msgstr "E566: Íåâîçìîæíî ñîçäàòü òðóáó äëÿ cscope"
@@ -1916,49 +2477,67 @@
 msgid "cs_create_connection exec failed"
 msgstr "íå óäàëîñü âûïîëíèòü cs_create_connection"
 
-msgid "E623: Could not spawn cscope process"
-msgstr "E623: Íå óäàëîñü çàïóñòèòü ïðîöåññ cscope"
-
 msgid "cs_create_connection: fdopen for to_fp failed"
 msgstr "cs_create_connection: íå óäàëîñü âûïîëíèòü fdopen äëÿ to_fp"
 
 msgid "cs_create_connection: fdopen for fr_fp failed"
 msgstr "cs_create_connection: íå óäàëîñü âûïîëíèòü fdopen äëÿ fr_fp"
 
-msgid "E567: no cscope connections"
-msgstr "E567: ñîåäèíåíèé ñ cscope íå ñîçäàíî"
+msgid "E623: Could not spawn cscope process"
+msgstr "E623: Íå óäàëîñü çàïóñòèòü ïðîöåññ cscope"
 
-#, c-format
-msgid "E259: no matches found for cscope query %s of %s"
-msgstr "E259: íå íàéäåíî ñîîòâåòñòâèé ïî çàïðîñó cscope %s äëÿ %s"
+msgid "E567: no cscope connections"
+msgstr "E567: Ñîåäèíåíèé ñ cscope íå ñîçäàíî"
 
 #, c-format
 msgid "E469: invalid cscopequickfix flag %c for %c"
-msgstr "E469: íåïðàâèëüíûé ôëàã cscopequickfix %c äëÿ %c"
-
-msgid "cscope commands:\n"
-msgstr "êîìàíäû cscope:\n"
+msgstr "E469: Íåïðàâèëüíûé ôëàã cscopequickfix %c äëÿ %c"
 
 #, c-format
-msgid "%-5s: %-30s (Usage: %s)"
-msgstr "%-5s: %-30s (Èñïîëüçîâàíèå: %s)"
+msgid "E259: no matches found for cscope query %s of %s"
+msgstr "E259: Íå íàéäåíî ñîîòâåòñòâèé ïî çàïðîñó cscope %s äëÿ %s"
+
+msgid "cscope commands:\n"
+msgstr "Êîìàíäû cscope:\n"
+
+#, c-format
+msgid "%-5s: %s%*s (Usage: %s)"
+msgstr "%-5s: %s%*s (èñïîëüçîâàíèå: %s)"
+
+msgid ""
+"\n"
+"       c: Find functions calling this function\n"
+"       d: Find functions called by this function\n"
+"       e: Find this egrep pattern\n"
+"       f: Find this file\n"
+"       g: Find this definition\n"
+"       i: Find files #including this file\n"
+"       s: Find this C symbol\n"
+"       t: Find this text string\n"
+msgstr ""
+"\n"
+"       c: Íàéòè ôóíêöèè âûçûâàþùèå ýòó ôóíêöèþ\n"
+"       d: Íàéòè ôóíêöèè âûçûâàåìûå ýòîé ôóíêöèåé\n"
+"       e: Íàéòè ýòîò øàáëîí egrep\n"
+"       f: Íàéòè ýòîò ôàéë\n"
+"       g: Íàéòè ýòî îïðåäåëåíèå\n"
+"       i: Íàéòè ôàéëû âêëþ÷àþùèå (#include) ýòîò ôàéë\n"
+"       s: Íàéòè ýòîò C-ñèìâîë\n"
+"       t: Íàéòè ýòó òåêñòîâóþ ñòðîêó\n"
 
 #, c-format
 msgid "E625: cannot open cscope database: %s"
-msgstr "E625: íåâîçìîæíî îòêðûòü áàçó äàííûõ cscope: %s"
+msgstr "E625: Íåâîçìîæíî îòêðûòü áàçó äàííûõ cscope: %s"
 
 msgid "E626: cannot get cscope database information"
-msgstr "E626: èíôîðìàöèÿ î áàçå äàííûõ cscope íå äîñòóïíà"
+msgstr "E626: Èíôîðìàöèÿ î áàçå äàííûõ cscope íå äîñòóïíà"
 
 msgid "E568: duplicate cscope database not added"
-msgstr "E568: äàííàÿ áàçà äàííûõ cscope óæå ïîäñîåäèíåíà"
-
-msgid "E569: maximum number of cscope connections reached"
-msgstr "E569: äîñòèãíóòî ìàêñèìàëüíîå çíà÷åíèå îòêðûòûõ ñîåäèíåíèé ñ cscope"
+msgstr "E568: Äàííàÿ áàçà äàííûõ cscope óæå ïîäñîåäèíåíà"
 
 #, c-format
 msgid "E261: cscope connection %s not found"
-msgstr "E261: ñîåäèíåíèå ñ cscope %s íå îáíàðóæåíî"
+msgstr "E261: Ñîåäèíåíèå ñ cscope %s íå îáíàðóæåíî"
 
 #, c-format
 msgid "cscope connection %s closed"
@@ -1966,7 +2545,7 @@
 
 #. should not reach here
 msgid "E570: fatal error in cs_manage_matches"
-msgstr "E570: êðèòè÷åñêàÿ îøèáêà â cs_manage_matches"
+msgstr "E570: Êðèòè÷åñêàÿ îøèáêà â cs_manage_matches"
 
 #, c-format
 msgid "Cscope tag: %s"
@@ -1995,30 +2574,18 @@
 msgid " # pid    database name                       prepend path\n"
 msgstr " # pid    áàçà äàííûõ                         íà÷àëüíûé ïóòü\n"
 
+msgid "Lua library cannot be loaded."
+msgstr "Áèáëèîòåêà Lua íå ìîæåò áûòü çàãðóæåíà."
+
+msgid "cannot save undo information"
+msgstr "íåâîçìîæíî ñîõðàíèòü èíôîðìàöèþ îá îòìåíå îïåðàöèè"
+
 msgid ""
-"E263: Sorry, this command is disabled, the Python library could not be "
+"E815: Sorry, this command is disabled, the MzScheme libraries could not be "
 "loaded."
 msgstr ""
-"E263: Ê ñîæàëåíèþ ýòà êîìàíäà íå ðàáîòàåò, ïîñêîëüêó íå çàãðóæåíà áèáëèîòåêà "
-"Python"
-
-msgid "E659: Cannot invoke Python recursively"
-msgstr "E659: Íåâîçìîæíî âûïîëíèòü ðåêóðñèâíûé âûçîâ Python"
-
-msgid "can't delete OutputObject attributes"
-msgstr "íåâîçìîæíî óäàëèòü àòðèáóòû OutputObject"
-
-msgid "softspace must be an integer"
-msgstr "çíà÷åíèå softspace äîëæíî áûòü öåëûì ÷èñëîì"
-
-msgid "invalid attribute"
-msgstr "íåïðàâèëüíûé àòðèáóò"
-
-msgid "writelines() requires list of strings"
-msgstr "writelines() òðåáóåò óêàçàíèÿ ñïèñêà ñòðîê"
-
-msgid "E264: Python: Error initialising I/O objects"
-msgstr "E264: Python: Îøèáêà èíèöèàëèçàöèè îáúåêòîâ I/O"
+"E815: Ê ñîæàëåíèþ ýòà êîìàíäà íå ðàáîòàåò, ïîñêîëüêó íå çàãðóæåíà áèáëèîòåêà "
+"MzScheme"
 
 msgid "invalid expression"
 msgstr "íåïðàâèëüíîå âûðàæåíèå"
@@ -2026,48 +2593,17 @@
 msgid "expressions disabled at compile time"
 msgstr "âûðàæåíèÿ îòêëþ÷åíû ïðè êîìïèëÿöèè"
 
-msgid "attempt to refer to deleted buffer"
-msgstr "ïîïûòêà ñîñëàòüñÿ íà óíè÷òîæåííûé áóôåð"
+msgid "hidden option"
+msgstr "ñêðûòàÿ îïöèÿ"
 
-msgid "line number out of range"
-msgstr "çàïðåäåëüíûé íîìåð ñòðîêè"
+msgid "unknown option"
+msgstr "íåèçâåñòíàÿ îïöèÿ"
 
-#, c-format
-msgid "<buffer object (deleted) at %8lX>"
-msgstr "<îáúåêò áóôåðà (óäàëåí) â %8lX>"
+msgid "window index is out of range"
+msgstr "èíäåêñ îêíà çà ïðåäåëàìè äèàïàçîíà"
 
-msgid "invalid mark name"
-msgstr "íåïðàâèëüíîå èìÿ îòìåòêè"
-
-msgid "no such buffer"
-msgstr "íåò òàêîãî áóôåðà"
-
-msgid "attempt to refer to deleted window"
-msgstr "ïîïûòêà ñîñëàòüñÿ íà çàêðûòîå îêíî"
-
-msgid "readonly attribute"
-msgstr "àòðèáóò äîñòóïåí òîëüêî äëÿ ÷òåíèÿ"
-
-msgid "cursor position outside buffer"
-msgstr "ïîçèöèÿ êóðñîðà íàõîäèòñÿ âíå áóôåðà"
-
-#, c-format
-msgid "<window object (deleted) at %.8lX>"
-msgstr "<îáúåêò îêíà (óäàëåí) â %.8lX>"
-
-#, c-format
-msgid "<window object (unknown) at %.8lX>"
-msgstr "<îáúåêò îêíà (íåèçâåñòåí) â %.8lX>"
-
-#, c-format
-msgid "<window %d>"
-msgstr "<îêíî %d>"
-
-msgid "no such window"
-msgstr "íåò òàêîãî îêíà"
-
-msgid "cannot save undo information"
-msgstr "íåâîçìîæíî ñîõðàíèòü èíôîðìàöèþ îá îòìåíå îïåðàöèè"
+msgid "couldn't open buffer"
+msgstr "íåâîçìîæíî îòêðûòü áóôåð"
 
 msgid "cannot delete line"
 msgstr "íåâîçìîæíî óäàëèòü ñòðîêó"
@@ -2081,36 +2617,115 @@
 msgid "string cannot contain newlines"
 msgstr "ñòðîêà íå ìîæåò ñîäåðæàòü ñèìâîë íîâîé ñòðîêè"
 
+msgid "error converting Scheme values to Vim"
+msgstr "íåâîçìîæíî ïðåîáðàçîâàòü çíà÷åíèÿ Scheme â Vim"
+
+msgid "Vim error: ~a"
+msgstr "îøèáêà Vim: ~a"
+
+msgid "Vim error"
+msgstr "îøèáêà Vim"
+
+msgid "buffer is invalid"
+msgstr "íåïðàâèëüíûé áóôåð"
+
+msgid "window is invalid"
+msgstr "íåïðàâèëüíîå îêíî"
+
+msgid "linenr out of range"
+msgstr "íîìåð ñòðîêè çà ïðåäåëàìè äèàïàçîíà"
+
+msgid "not allowed in the Vim sandbox"
+msgstr "íå äîïóñêàåòñÿ â ïåñî÷íèöå Vim"
+
+msgid "E836: This Vim cannot execute :python after using :py3"
+msgstr "E836: Äàííûé Vim íå ìîæåò âûïîëíèòü :python ïîñëå èñïîëüçîâàíèÿ :py3"
+
+msgid "only string keys are allowed"
+msgstr "äîïóñòèìû òîëüêî ñòðîêîâûå êëþ÷è"
+
+msgid ""
+"E263: Sorry, this command is disabled, the Python library could not be "
+"loaded."
+msgstr ""
+"E263: Ê ñîæàëåíèþ ýòà êîìàíäà íå ðàáîòàåò, ïîñêîëüêó íå çàãðóæåíà áèáëèîòåêà "
+"Python"
+
+msgid "E659: Cannot invoke Python recursively"
+msgstr "E659: Íåâîçìîæíî âûïîëíèòü ðåêóðñèâíûé âûçîâ Python"
+
+msgid "E858: Eval did not return a valid python object"
+msgstr "E858: Eval íå âîçâðàòèë äîïóñòèìîãî îáúåêòà Python"
+
+msgid "E859: Failed to convert returned python object to vim value"
+msgstr ""
+"E859: Íå óäàëîñü ïðåîáðàçîâàòü âîçâðàù¸ííûé îáúåêò Python â çíà÷åíèå VIM"
+
+#, c-format
+msgid "<buffer object (deleted) at %p>"
+msgstr "<îáúåêò áóôåðà (óäàëåí) â %p>"
+
+msgid "E837: This Vim cannot execute :py3 after using :python"
+msgstr "E837: Äàííûé Vim íå ìîæåò âûïîëíèòü :py3 ïîñëå èñïîëüçîâàíèÿ :python"
+
+msgid "E860: Eval did not return a valid python 3 object"
+msgstr "E860: Eval íå âîçâðàòèë äîïóñòèìîãî îáúåêòà Python 3"
+
+msgid "E861: Failed to convert returned python 3 object to vim value"
+msgstr ""
+"E861: Íå óäàëîñü ïðåîáðàçîâàòü âîçâðàù¸ííûé îáúåêò Python 3 â çíà÷åíèå VIM"
+
+msgid "E265: $_ must be an instance of String"
+msgstr "E265: $_ äîëæåí áûòü ýêçåìïëÿðîì èëè ñòðîêîé"
+
 msgid ""
 "E266: Sorry, this command is disabled, the Ruby library could not be loaded."
 msgstr ""
 "E266: Ê ñîæàëåíèþ ýòà êîìàíäà íå ðàáîòàåò, ïîñêîëüêó íå çàãðóæåíà áèáëèîòåêà "
-"Ruby."
+"Ruby"
+
+msgid "E267: unexpected return"
+msgstr "E267: Íåîæèäàííûé return"
+
+msgid "E268: unexpected next"
+msgstr "E268: Íåîæèäàííûé next"
+
+msgid "E269: unexpected break"
+msgstr "E269: Íåîæèäàííûé break"
+
+msgid "E270: unexpected redo"
+msgstr "E270: Íåîæèäàííûé redo"
+
+msgid "E271: retry outside of rescue clause"
+msgstr "E271: retry âíå îïåðàòîðà rescue"
+
+msgid "E272: unhandled exception"
+msgstr "E272: Íåîáðàáîòàííîå èñêëþ÷åíèå"
 
 #, c-format
 msgid "E273: unknown longjmp status %d"
-msgstr "E273: íåèçâåñòíîå ñîñòîÿíèå longjmp %d"
+msgstr "E273: Íåèçâåñòíîå ñîñòîÿíèå longjmp %d"
 
 msgid "Toggle implementation/definition"
 msgstr "Ïåðåêëþ÷åíèå ìåæäó ðåàëèçàöèåé/îïðåäåëåíèåì"
 
 msgid "Show base class of"
-msgstr "Ïîêàçàòü áàçîâûé êëàññ "
+msgstr "Ïîêàçàòü îñíîâíîé êëàññ"
 
 msgid "Show overridden member function"
 msgstr "Ïîêàçàòü ïåðåãðóæåííûå ôóíêöèè"
 
 msgid "Retrieve from file"
-msgstr "Ïîëó÷åíèå èç ôàéëà"
+msgstr "Ïîëó÷èòü èç ôàéëà"
 
 msgid "Retrieve from project"
-msgstr "Ïîëó÷åíèå èç ïðîåêòà"
+msgstr "Ïîëó÷èòü èç ïðîåêòà"
 
 msgid "Retrieve from all projects"
-msgstr "Ïîëó÷åíèå èç âñåõ ïðîåêòîâ"
+msgstr "Ïîëó÷èòü èç âñåõ ïðîåêòîâ"
 
 msgid "Retrieve"
-msgstr "Ïîëó÷åíèå"
+msgstr "Ïîëó÷èòü"
 
 msgid "Show source of"
 msgstr "Ïîêàçàòü èñõîäíûé êîä"
@@ -2186,13 +2801,13 @@
 msgid "not implemented yet"
 msgstr "ïîêà íå ðåàëèçîâàíî"
 
-msgid "unknown option"
-msgstr "íåèçâåñòíàÿ îïöèÿ"
-
 #. ???
 msgid "cannot set line(s)"
 msgstr "íåâîçìîæíî íàçíà÷èòü ñòðîêó èëè ñòðîêè"
 
+msgid "invalid mark name"
+msgstr "íåïðàâèëüíîå èìÿ îòìåòêè"
+
 msgid "mark not set"
 msgstr "îòìåòêà íå óñòàíîâëåíà"
 
@@ -2203,6 +2818,9 @@
 msgid "cannot insert/append line"
 msgstr "íåâîçìîæíî âñòàâèòü èëè äîáàâèòü ñòðîêó"
 
+msgid "line number out of range"
+msgstr "íîìåð ñòðîêè çà ïðåäåëàìè äèàïàçîíà"
+
 msgid "unknown flag: "
 msgstr "íåèçâåñòíûé ôëàã: "
 
@@ -2213,7 +2831,7 @@
 msgstr "êëàâèàòóðíîå ïðåðûâàíèå"
 
 msgid "vim error"
-msgstr "îøèáêà vim"
+msgstr "îøèáêà VIM"
 
 msgid "cannot create buffer/window command: object is being deleted"
 msgstr "íåâîçìîæíî ñîçäàòü êîìàíäó áóôåðà èëè îêíà: îáúåêò â ïðîöåññå óäàëåíèÿ"
@@ -2243,11 +2861,9 @@
 "E571: Ê ñîæàëåíèþ ýòà êîìàíäà íå ðàáîòàåò, ïîñêîëüêó íå çàãðóæåíà áèáëèîòåêà "
 "Tcl"
 
-msgid ""
-"E281: TCL ERROR: exit code is not int!? Please report this to vim-dev@vim.org"
-msgstr ""
-"E281: ÎØÈÁÊÀ TCL: Êîä âûõîäà íå ÿâëÿåòñÿ öåëûì ÷èñëîì?! Ñîîáùèòå îá ýòîì â "
-"vim-dev@vim.org"
+#, c-format
+msgid "E572: exit code %d"
+msgstr "E572: Êîä âûõîäà %d"
 
 msgid "cannot get line"
 msgstr "íåâîçìîæíî ïîëó÷èòü ñòðîêó"
@@ -2256,7 +2872,7 @@
 msgstr "Íåâîçìîæíî çàðåãèñòðèðîâàòü èìÿ ñåðâåðà êîìàíä"
 
 msgid "E248: Failed to send command to the destination program"
-msgstr "E248: Îòïðàâêà êîìàíäû â äðóãóþ ïðîãðàììó íå óäàëàñü"
+msgstr "E248: Íå óäàëàñü îòïðàâêà êîìàíäû â äðóãóþ ïðîãðàììó"
 
 #, c-format
 msgid "E573: Invalid server id used: %s"
@@ -2267,29 +2883,39 @@
 "E251: Íåïðàâèëüíî ñôîðìèðîâàíî çíà÷åíèå äàííîãî ïðîöåññà VIM â ðååñòðå. "
 "Óäàëåíî!"
 
-msgid "Unknown option"
-msgstr "Íåèçâåñòíûé àðãóìåíò"
+msgid "Unknown option argument"
+msgstr "Íåèçâåñòíûé íåîáÿçàòåëüíûé ïàðàìåòð"
 
 msgid "Too many edit arguments"
-msgstr "Ñëèøêîì ìíîãî àðãóìåíòîâ ðåäàêòèðîâàíèÿ"
+msgstr "Ñëèøêîì ìíîãî ïàðàìåòðîâ ðåäàêòèðîâàíèÿ"
 
 msgid "Argument missing after"
-msgstr "Ïðîïóùåí àðãóìåíò ïîñëå"
+msgstr "Ïðîïóùåí ïàðàìåòð ïîñëå"
 
-msgid "Garbage after option"
-msgstr "Ìóñîð ïîñëå àðãóìåíòà"
+msgid "Garbage after option argument"
+msgstr "Ìóñîð ïîñëå íåîáÿçàòåëüíîãî ïàðàìåòðà"
 
 msgid "Too many \"+command\", \"-c command\" or \"--cmd command\" arguments"
 msgstr ""
-"Ñëèøêîì ìíîãî àðãóìåíòîâ \"+êîìàíäà\", \"-c êîìàíäà\" èëè \"--cmd êîìàíäà\""
+"Ñëèøêîì ìíîãî ïàðàìåòðîâ \"+êîìàíäà\", \"-c êîìàíäà\" èëè \"--cmd êîìàíäà\""
 
 msgid "Invalid argument for"
-msgstr "Íåäîïóñòèìûå àðãóìåíòû äëÿ"
+msgstr "Íåäîïóñòèìûé ïàðàìåòð äëÿ"
+
+#, c-format
+msgid "%d files to edit\n"
+msgstr "Ôàéëîâ äëÿ ðåäàêòèðîâàíèÿ: %d\n"
+
+msgid "netbeans is not supported with this GUI\n"
+msgstr "NetBeans íå ïîääåðæèâàåòñÿ ñ ýòèì ãðàôè÷åñêèì èíòåðôåéñîì\n"
 
 msgid "This Vim was not compiled with the diff feature."
 msgstr ""
 "Äàííûé Vim áûë ñêîìïèëèðîâàí ñ âûêëþ÷åííîé îñîáåííîñòüþ ïðîñìîòðà îòëè÷èé"
 
+msgid "'-nb' cannot be used: not enabled at compile time\n"
+msgstr "Íåâîçìîæíî èñïîëüçîâàòü '-nb': íå âêëþ÷åíî ïðè êîìïèëÿöèè\n"
+
 msgid "Attempt to open script file again: \""
 msgstr "Ïîïûòêà ïîâòîðíîãî îòêðûòèÿ ôàéëà ñöåíàðèÿ: \""
 
@@ -2299,9 +2925,8 @@
 msgid "Cannot open for script output: \""
 msgstr "Íåâîçìîæíî îòêðûòü äëÿ âûâîäà ñöåíàðèÿ: \""
 
-#, c-format
-msgid "%d files to edit\n"
-msgstr "Ôàéëîâ äëÿ ðåäàêòèðîâàíèÿ: %d\n"
+msgid "Vim: Error: Failure to start gvim from NetBeans\n"
+msgstr "Vim: Îøèáêà: Íå óäàëîñü çàïóñòèòü gvim èç NetBeans\n"
 
 msgid "Vim: Warning: Output is not to a terminal\n"
 msgstr "Vim: Ïðåäóïðåæäåíèå: Âûâîä îñóùåñòâëÿåòñÿ íå íà òåðìèíàë\n"
@@ -2328,13 +2953,16 @@
 msgstr "[ôàéë ..] ðåäàêòèðîâàíèå óêàçàííûõ ôàéëîâ"
 
 msgid "-               read text from stdin"
-msgstr "-                ÷òåíèå òåêñòà èç ïîòîêà ââîäà stdin"
+msgstr "-           ÷òåíèå òåêñòà èç ïîòîêà ââîäà stdin"
 
 msgid "-t tag          edit file where tag is defined"
-msgstr "-t ìåòêà         ðåäàêòèðîâàíèå ôàéëà ñ óêàçàííîé ìåòêîé"
+msgstr "-t ìåòêà    ðåäàêòèðîâàíèå ôàéëà ñ óêàçàííîé ìåòêîé"
 
+# \n\t\t.. äëÿ óìåùåíèÿ â 80 ñòîëáöîâ
 msgid "-q [errorfile]  edit file with first error"
-msgstr "-q [ôàéë îøèáîê] ðåäàêòèðîâàíèå ôàéëà ñ ïåðâîé îøèáêîé"
+msgstr ""
+"-q [ôàéë-îøèáîê]\n"
+"\t\t\t\t    ðåäàêòèðîâàíèå ôàéëà ñ ïåðâîé îøèáêîé"
 
 msgid ""
 "\n"
@@ -2346,7 +2974,7 @@
 "Èñïîëüçîâàíèå:"
 
 msgid " vim [arguments] "
-msgstr " vim [àðãóìåíòû] "
+msgstr " vim [ïàðàìåòðû] "
 
 msgid ""
 "\n"
@@ -2357,12 +2985,19 @@
 
 msgid ""
 "\n"
+"Where case is ignored prepend / to make flag upper case"
+msgstr ""
+"\n"
+"Åñëè ðåãèñòð èãíîðèðóåòñÿ, äîáàâüòå ïåðåä ôëàãîì / äëÿ âåðõíåãî ðåãèñòðà"
+
+msgid ""
+"\n"
 "\n"
 "Arguments:\n"
 msgstr ""
 "\n"
 "\n"
-"Àðãóìåíòû:\n"
+"Ïàðàìåòðû:\n"
 
 msgid "--\t\t\tOnly file names after this"
 msgstr "--\t\t\tÄàëåå óêàçûâàþòñÿ òîëüêî èìåíà ôàéëîâ"
@@ -2388,6 +3023,9 @@
 msgid "-e\t\t\tEx mode (like \"ex\")"
 msgstr "-e\t\t\tÐåæèì Ex (êàê \"ex\")"
 
+msgid "-E\t\t\tImproved Ex mode"
+msgstr "-E\t\t\tÓëó÷øåííûé ðåæèì Ex"
+
 msgid "-s\t\t\tSilent (batch) mode (only for \"ex\")"
 msgstr "-s\t\t\tÒèõèé (ïàêåòíûé) ðåæèì (òîëüêî äëÿ \"ex\")"
 
@@ -2410,7 +3048,7 @@
 msgstr "-M\t\t\tÁåç âîçìîæíîñòè âíåñåíèÿ èçìåíåíèé â òåêñò"
 
 msgid "-b\t\t\tBinary mode"
-msgstr "-b\t\t\tÁèíàðíûé ðåæèì"
+msgstr "-b\t\t\tÄâîè÷íûé ðåæèì"
 
 msgid "-l\t\t\tLisp mode"
 msgstr "-l\t\t\tÐåæèì Lisp"
@@ -2421,8 +3059,11 @@
 msgid "-N\t\t\tNot fully Vi compatible: 'nocompatible'"
 msgstr "-N\t\t\tÐåæèì íåïîëíîé ñîâìåñòèìîñòè ñ Vi: 'nocompatible'"
 
-msgid "-V[N]\t\tVerbose level"
-msgstr "-V[N]\t\tÓðîâåíü ïîäðîáíîñòè ñîîáùåíèé"
+# \n\t\t.. äëÿ óìåùåíèÿ â 80 ñòîëáöîâ
+msgid "-V[N][fname]\t\tBe verbose [level N] [log messages to fname]"
+msgstr ""
+"-V[N][ôàéë]\t\tÂûâîäèòü äîïîëíèòåëüíûå ñîîáùåíèÿ\n"
+"\t\t\t\t[óðîâåíü N] [çàïèñûâàòü â ôàéë]"
 
 msgid "-D\t\t\tDebugging mode"
 msgstr "-D\t\t\tÐåæèì îòëàäêè"
@@ -2466,8 +3107,17 @@
 msgid "--noplugin\t\tDon't load plugin scripts"
 msgstr "--noplugin\t\tÍå çàãðóæàòü ñöåíàðèè ìîäóëåé"
 
+# \n\t\t.. äëÿ óìåùåíèÿ â 80 ñòîëáöîâ
+msgid "-p[N]\t\tOpen N tab pages (default: one for each file)"
+msgstr ""
+"-p[N]\t\tÎòêðûòü N âêëàäîê (ïî óìîë÷àíèþ: ïî îäíîé\n"
+"\t\t\t\tíà êàæäûé ôàéë)"
+
+# \n\t\t.. äëÿ óìåùåíèÿ â 80 ñòîëáöîâ
 msgid "-o[N]\t\tOpen N windows (default: one for each file)"
-msgstr "-o[N]\t\tÎòêðûòü N îêîí (ïî óìîë÷àíèþ: ïî îäíîìó íà êàæäûé ôàéë)"
+msgstr ""
+"-o[N]\t\tÎòêðûòü N îêîí (ïî óìîë÷àíèþ: ïî îäíîìó\n"
+"\t\t\t\tíà êàæäûé ôàéë)"
 
 msgid "-O[N]\t\tLike -o but split vertically"
 msgstr "-O[N]\t\tÒî æå, ÷òî è -o, íî ñ âåðòèêàëüíûì ðàçäåëåíèåì îêîí"
@@ -2484,11 +3134,17 @@
 msgid "-c <command>\t\tExecute <command> after loading the first file"
 msgstr "-c <êîìàíäà>\t\tÂûïîëíèòü <êîìàíäó> ïîñëå çàãðóçêè ïåðâîãî ôàéëà"
 
+# \n\t\t.. äëÿ óìåùåíèÿ â 80 ñòîëáöîâ
 msgid "-S <session>\t\tSource file <session> after loading the first file"
-msgstr "-S <ñåàíñ>\t\tÏðî÷èòàòü ñöåíàðèé <ñåàíñà> ïîñëå çàãðóçêè ïåðâîãî ôàéëà"
+msgstr ""
+"-S <ñåàíñ>\t\tÏðî÷èòàòü ñöåíàðèé <ñåàíñà> ïîñëå çàãðóçêè\n"
+"\t\t\t\tïåðâîãî ôàéëà"
 
+# \n\t\t.. äëÿ óìåùåíèÿ â 80 ñòîëáöîâ
 msgid "-s <scriptin>\tRead Normal mode commands from file <scriptin>"
-msgstr "-s <ñöåíàðèé>\tÏðî÷èòàòü êîìàíäû Îáû÷íîãî ðåæèìà èç ôàéëà <ñöåíàðèÿ>"
+msgstr ""
+"-s <ñöåíàðèé>\tÏðî÷èòàòü êîìàíäû Îáû÷íîãî ðåæèìà èç\n"
+"\t\t\t\tôàéëà <ñöåíàðèÿ>"
 
 msgid "-w <scriptout>\tAppend all typed commands to file <scriptout>"
 msgstr "-w <ñöåíàðèé>\tÄîáàâëÿòü âñå ââåä¸ííûå êîìàíäû â ôàéë <ñöåíàðèÿ>"
@@ -2500,7 +3156,7 @@
 msgstr "-x\t\t\tÐåäàêòèðîâàíèå çàøèôðîâàííûõ ôàéëîâ"
 
 msgid "-display <display>\tConnect vim to this particular X-server"
-msgstr "-display <ýêðàí>\tÏîäñîåäèíèòü vim ê óêàçàííîìó ñåðâåðó X"
+msgstr "-display <ýêðàí>\tÏîäñîåäèíèòü VIM ê óêàçàííîìó X-ñåðâåðó"
 
 msgid "-X\t\t\tDo not connect to X server"
 msgstr "-X\t\t\tÍå âûïîëíÿòü ñîåäèíåíèå ñ ñåðâåðîì X"
@@ -2521,6 +3177,11 @@
 msgstr ""
 "--remote-wait-silent <ôàéëû>  Òî æå, íî áåç æàëîá íà îòñóòñòâèå ñåðâåðà"
 
+msgid ""
+"--remote-tab[-wait][-silent] <files>  As --remote but use tab page per file"
+msgstr ""
+"--remote-tab[-wait][-silent] <ôàéëû>  Òî æå, ÷òî è --remote, íî ñ âêëàäêàìè"
+
 msgid "--remote-send <keys>\tSend <keys> to a Vim server and exit"
 msgstr "--remote-send <êíîïêè>\tÎòïðàâèòü <êíîïêè> íà ñåðâåð Vim è âûéòè"
 
@@ -2534,6 +3195,9 @@
 msgstr ""
 "--servername <èìÿ>\tÎòïðàâèòü íà/ñòàòü ñåðâåðîì Vim ñ óêàçàííûì <èìåíåì>"
 
+msgid "--startuptime <file>\tWrite startup timing messages to <file>"
+msgstr "--startuptime <ôàéë>\tÇàïèñàòü âðåìåííóþ ìåòêó î çàïóñêå â <ôàéë>"
+
 msgid "-i <viminfo>\t\tUse <viminfo> instead of .viminfo"
 msgstr "-i <viminfo>\t\tÈñïîëüçîâàòü âìåñòî .viminfo ôàéë <viminfo>"
 
@@ -2548,33 +3212,27 @@
 "Arguments recognised by gvim (Motif version):\n"
 msgstr ""
 "\n"
-"Àðãóìåíòû äëÿ gvim (âåðñèÿ Motif):\n"
+"Ïàðàìåòðû äëÿ gvim (âåðñèÿ Motif):\n"
 
 msgid ""
 "\n"
 "Arguments recognised by gvim (neXtaw version):\n"
 msgstr ""
 "\n"
-"Àðãóìåíòû äëÿ gvim (âåðñèÿ neXtaw):\n"
+"Ïàðàìåòðû äëÿ gvim (âåðñèÿ neXtaw):\n"
 
 msgid ""
 "\n"
 "Arguments recognised by gvim (Athena version):\n"
 msgstr ""
 "\n"
-"Àðãóìåíòû äëÿ gvim (âåðñèÿ Athena):\n"
+"Ïàðàìåòðû äëÿ gvim (âåðñèÿ Athena):\n"
 
 msgid "-display <display>\tRun vim on <display>"
-msgstr "-display <äèñïëåé>\tÇàïóñòèòü vim íà óêàçàííîì <äèñïëåå>"
+msgstr "-display <äèñïëåé>\tÇàïóñòèòü VIM íà óêàçàííîì <äèñïëåå>"
 
 msgid "-iconic\t\tStart vim iconified"
-msgstr "-iconic\t\tÇàïóñòèòü vim â ñâ¸ðíóòîì âèäå"
-
-msgid "-name <name>\t\tUse resource as if vim was <name>"
-msgstr "-name <èìÿ>\t\tÈñïîëüçîâàòü ðåñóðñ, êàê åñëè áû vim áûë <èìåíåì>"
-
-msgid "\t\t\t  (Unimplemented)\n"
-msgstr "\t\t\t  (Íå ðåàëèçîâàíî)\n"
+msgstr "-iconic\t\tÇàïóñòèòü VIM â ñâ¸ðíóòîì âèäå"
 
 msgid "-background <color>\tUse <color> for the background (also: -bg)"
 msgstr ""
@@ -2618,27 +3276,14 @@
 
 msgid ""
 "\n"
-"Arguments recognised by gvim (RISC OS version):\n"
-msgstr ""
-"\n"
-"Àðãóìåíòû äëÿ gvim (âåðñèÿ RISC OS):\n"
-
-msgid "--columns <number>\tInitial width of window in columns"
-msgstr "--columns <÷èñëî>\tÏåðâîíà÷àëüíàÿ øèðèíà îêíà â êîëîíêàõ"
-
-msgid "--rows <number>\tInitial height of window in rows"
-msgstr "--rows <÷èñëî>\tÏåðâîíà÷àëüíàÿ âûñîòà îêíà â ñòðîêàõ"
-
-msgid ""
-"\n"
 "Arguments recognised by gvim (GTK+ version):\n"
 msgstr ""
 "\n"
-"Àðãóìåíòû äëÿ gvim (âåðñèÿ GTK+):\n"
+"Ïàðàìåòðû äëÿ gvim (âåðñèÿ GTK+):\n"
 
 msgid "-display <display>\tRun vim on <display> (also: --display)"
 msgstr ""
-"-display <äèñïëåé>\tÇàïóñòèòü vim íà óêàçàííîì <äèñïëåå> (òàêæå: --display)"
+"-display <äèñïëåé>\tÇàïóñòèòü VIM íà óêàçàííîì <äèñïëåå> (òàêæå: --display)"
 
 msgid "--role <role>\tSet a unique role to identify the main window"
 msgstr ""
@@ -2647,9 +3292,15 @@
 msgid "--socketid <xid>\tOpen Vim inside another GTK widget"
 msgstr "--socketid <xid>\tÎòêðûòü Vim âíóòðè äðóãîãî êîìïîíåíòà GTK"
 
+msgid "--echo-wid\t\tMake gvim echo the Window ID on stdout"
+msgstr "--echo-wid\t\tÂûâåñòè Window ID äëÿ gvim íà ñòàíäàðòíûé ïîòîê âûâîäà"
+
 msgid "-P <parent title>\tOpen Vim inside parent application"
 msgstr "-P <çàãîëîâîê ðîäèòåëÿ>\tÎòêðûòü Vim â ðîäèòåëüñêîì ïðèëîæåíèè"
 
+msgid "--windowid <HWND>\tOpen Vim inside another win32 widget"
+msgstr "--windowid <HWND>\tÎòêðûòü Vim âíóòðè äðóãîãî êîìïîíåíòà win32"
+
 msgid "No display"
 msgstr "Íåò äèñïëåÿ"
 
@@ -2702,7 +3353,6 @@
 "\n"
 "èçìåí.  ñòð  êîë òåêñò"
 
-#, c-format
 msgid ""
 "\n"
 "# File marks:\n"
@@ -2711,7 +3361,6 @@
 "# Ãëîáàëüíûå îòìåòêè:\n"
 
 #. Write the jumplist with -'
-#, c-format
 msgid ""
 "\n"
 "# Jumplist (newest first):\n"
@@ -2719,7 +3368,6 @@
 "\n"
 "# Ñïèñîê ïðûæêîâ (ñíà÷àëà áîëåå ñâåæèå):\n"
 
-#, c-format
 msgid ""
 "\n"
 "# History of marks within files (newest to oldest):\n"
@@ -2748,24 +3396,14 @@
 "ââîäà"
 
 msgid "E288: input method doesn't support any style"
-msgstr "E288: ìåòîä ââîäà íå ïîääåðæèâàåò ñòèëè"
+msgstr "E288: Ìåòîä ââîäà íå ïîääåðæèâàåò ñòèëè"
 
 msgid "E289: input method doesn't support my preedit type"
 msgstr ""
-"E289: ìåòîä ââîäà íå ïîääåðæèâàåò ìîé òèï ïðåäâàðèòåëüíîãî ðåäàêòèðîâàíèÿ"
-
-msgid "E290: over-the-spot style requires fontset"
-msgstr "E290: ñòèëü \"íàä ìåñòîì\" òðåáóåò óêàçàíèÿ øðèôòîâîãî íàáîðà"
-
-msgid "E291: Your GTK+ is older than 1.2.3. Status area disabled"
-msgstr ""
-"E291: GTK+ áîëåå ðàííåé âåðñèè, ÷åì 1.2.3. Îáëàñòü ñîñòîÿíèÿ íå ðàáîòàåò."
-
-msgid "E292: Input Method Server is not running"
-msgstr "E292: Ñåðâåð ìåòîäà ââîäà íå çàïóùåí"
+"E289: Ìåòîä ââîäà íå ïîääåðæèâàåò ìîé òèï ïðåäâàðèòåëüíîãî ðåäàêòèðîâàíèÿ"
 
 msgid "E293: block was not locked"
-msgstr "E293: áëîê íå çàáëîêèðîâàí"
+msgstr "E293: Áëîê íå çàáëîêèðîâàí"
 
 msgid "E294: Seek error in swap file read"
 msgstr "E294: Îøèáêà ïîèñêà ïðè ÷òåíèè ñâîï-ôàéëà"
@@ -2792,6 +3430,9 @@
 msgid "E298: Didn't get block nr 2?"
 msgstr "E298: Íå ïîëó÷åí áëîê íîìåð 2?"
 
+msgid "E843: Error while updating swap file crypt"
+msgstr "E843: Îøèáêà ïðè îáíîâëåíèè øèôðîâàíèÿ ñâîï-ôàéëà"
+
 #. could not (re)open the swap file, what can we do????
 msgid "E301: Oops, lost the swap file!!!"
 msgstr "E301: Îé, ïîòåðÿëñÿ ñâîï-ôàéë!!!"
@@ -2804,8 +3445,8 @@
 msgstr ""
 "E303: Íå óäàëîñü îòêðûòü ñâîï-ôàéë äëÿ \"%s\", âîññòàíîâëåíèå íåâîçìîæíî"
 
-msgid "E304: ml_timestamp: Didn't get block 0??"
-msgstr "E304: ml_timestamp: Íå ïîëó÷åí áëîê 0??"
+msgid "E304: ml_upd_block0(): Didn't get block 0??"
+msgstr "E304: ml_upd_block0(): Íå ïîëó÷åí áëîê 0??"
 
 #, c-format
 msgid "E305: No swap file found for %s"
@@ -2853,6 +3494,14 @@
 "ëèáî ôàéë áûë ïîâðåæä¸í."
 
 #, c-format
+msgid ""
+"E833: %s is encrypted and this version of Vim does not support encryption"
+msgstr "E833: %s çàøèôðîâàí, à ýòà âåðñèÿ Vim íå ïîääåðæèâàåò øèôðîâàíèå"
+
+msgid " has been damaged (page size is smaller than minimum value).\n"
+msgstr " áûë ïîâðåæä¸í (ðàçìåð ñòðàíèöû ìåíüøå ìèíèìàëüíîãî çíà÷åíèÿ).\n"
+
+#, c-format
 msgid "Using swap file \"%s\""
 msgstr "Èñïîëüçóåòñÿ ñâîï-ôàéë \"%s\""
 
@@ -2864,6 +3513,40 @@
 msgstr "E308: Ïðåäóïðåæäåíèå: èñõîäíûé ôàéë ìîã áûòü èçìåí¸í"
 
 #, c-format
+msgid "Swap file is encrypted: \"%s\""
+msgstr "Ñâîï-ôàéë çàøèôðîâàí: \"%s\""
+
+msgid ""
+"\n"
+"If you entered a new crypt key but did not write the text file,"
+msgstr ""
+"\n"
+"Åñëè âû ââåëè íîâûé ïàðîëü äëÿ øèôðîâàíèÿ, íî íå çàïèñàëè òåêñòîâûé ôàéë,"
+
+msgid ""
+"\n"
+"enter the new crypt key."
+msgstr ""
+"\n"
+"òî ââåäèòå íîâûé ïàðîëü äëÿ øèôðîâàíèÿ."
+
+# Ïåðåâîä ñîîáùåíèÿ ðàçäåë¸í íà äâå ÷àñòè, ÷àñòü ïåðâàÿ
+msgid ""
+"\n"
+"If you wrote the text file after changing the crypt key press enter"
+msgstr ""
+"\n"
+"Åñëè âû çàïèñàëè òåêñòîâûé ôàéë ïîñëå èçìåíåíèÿ ïàðîëÿ øèôðîâàíèÿ, òî íàæìèòå"
+
+# Ïåðåâîä ñîîáùåíèÿ ðàçäåë¸í íà äâå ÷àñòè, ÷àñòü âòîðàÿ
+msgid ""
+"\n"
+"to use the same key for text file and swap file"
+msgstr ""
+"\n"
+"Enter äëÿ èñïîëüçîâàíèÿ îäíîãî êëþ÷à äëÿ òåêñòîâîãî ôàéëà è ñâîï-ôàéëà"
+
+#, c-format
 msgid "E309: Unable to read block 1 from %s"
 msgstr "E309: Íåâîçìîæíî ïðî÷èòàòü áëîê 1 èç %s"
 
@@ -2871,7 +3554,7 @@
 msgstr "???ÎÒÑÓÒÑÒÂÓÅÒ ÌÍÎÃÎ ÑÒÐÎÊ"
 
 msgid "???LINE COUNT WRONG"
-msgstr "???ÍÅÏÐÀÂÈËÜÍÎÅ ÇÍÀ×ÅÍÈÅ Ñ×ÅÒ×ÈÊÀ ÑÒÐÎÊ"
+msgstr "???ÍÅÏÐÀÂÈËÜÍÎÅ ÇÍÀ×ÅÍÈÅ ÑרÒ×ÈÊÀ ÑÒÐÎÊ"
 
 msgid "???EMPTY BLOCK"
 msgstr "???ÏÓÑÒÎÉ ÁËÎÊ"
@@ -2881,7 +3564,7 @@
 
 #, c-format
 msgid "E310: Block 1 ID wrong (%s not a .swp file?)"
-msgstr "E310: íåïðàâèëüíûé áëîê 1 ID (%s íå ÿâëÿåòñÿ ôàéëîì .swp?)"
+msgstr "E310: Íåïðàâèëüíûé áëîê 1 ID (%s íå ÿâëÿåòñÿ ôàéëîì .swp?)"
 
 msgid "???BLOCK MISSING"
 msgstr "???ÏÐÎÏÓÙÅÍ ÁËÎÊ"
@@ -2905,7 +3588,7 @@
 "ñ ???"
 
 msgid "See \":help E312\" for more information."
-msgstr "Ñì. äîïîëíèòåëüíóþ èíôîðìàöèþ â ñïðàâî÷íèêå (\":help E312\")"
+msgstr "Ñì. \":help E312\" äëÿ äîïîëíèòåëüíîé èíôîðìàöèè."
 
 msgid "Recovery completed. You should check if everything is OK."
 msgstr "Âîññòàíîâëåíèå çàâåðøåíî. Ïðîâåðüòå, âñ¸ ëè â ïîðÿäêå."
@@ -2917,15 +3600,23 @@
 "\n"
 "(Ìîæåòå çàïèñàòü ôàéë ïîä äðóãèì èìåíåì è ñðàâíèòü åãî ñ èñõîäíûì\n"
 
-msgid "and run diff with the original file to check for changes)\n"
-msgstr "ôàéëîì ïðè ïîìîùè ïðîãðàììû diff).\n"
+msgid "and run diff with the original file to check for changes)"
+msgstr "ôàéëîì ïðè ïîìîùè ïðîãðàììû diff)"
+
+msgid "Recovery completed. Buffer contents equals file contents."
+msgstr "Âîññòàíîâëåíèå çàâåðøåíî. Ñîäåðæèìîå áóôåðîâ è ôàéëîâ ýêâèâàëåíòíî."
 
 msgid ""
-"Delete the .swp file afterwards.\n"
+"\n"
+"You may want to delete the .swp file now.\n"
 "\n"
 msgstr ""
-"Çàòåì óäàëèòå ôàéë .swp.\n"
 "\n"
+"Âåðîÿòíî, ñåé÷àñ âû çàõîòèòå óäàëèòü ôàéë .swp.\n"
+"\n"
+
+msgid "Using crypt key from swap file for the text file.\n"
+msgstr "Èñïîëüçîâàíèå êëþ÷à øèôðîâàíèÿ èç ñâîï-ôàéëà äëÿ òåêñòîâîãî ôàéëà.\n"
 
 #. use msg() to start the scrolling properly
 msgid "Swap files found:"
@@ -3039,7 +3730,7 @@
 msgstr "E316: ml_get: íåâîçìîæíî íàéòè ñòðîêó %ld"
 
 msgid "E317: pointer block id wrong 3"
-msgstr "E317: íåïðàâèëüíîå çíà÷åíèå óêàçàòåëÿ áëîêà 3"
+msgstr "E317: Íåïðàâèëüíîå çíà÷åíèå óêàçàòåëÿ áëîêà 3"
 
 msgid "stack_idx should be 0"
 msgstr "çíà÷åíèå stack_idx äîëæíî áûòü ðàâíî 0"
@@ -3048,7 +3739,7 @@
 msgstr "E318: Îáíîâëåíî ñëèøêîì ìíîãî áëîêîâ?"
 
 msgid "E317: pointer block id wrong 4"
-msgstr "E317: íåïðàâèëüíîå çíà÷åíèå óêàçàòåëÿ áëîêà 4"
+msgstr "E317: Íåïðàâèëüíîå çíà÷åíèå óêàçàòåëÿ áëîêà 4"
 
 msgid "deleted block 1?"
 msgstr "óäàë¸í áëîê 1?"
@@ -3058,24 +3749,28 @@
 msgstr "E320: Ñòðîêà %ld íå îáíàðóæåíà"
 
 msgid "E317: pointer block id wrong"
-msgstr "E317: íåïðàâèëüíîå çíà÷åíèå óêàçàòåëÿ áëîêà"
+msgstr "E317: Íåïðàâèëüíîå çíà÷åíèå óêàçàòåëÿ áëîêà"
 
 msgid "pe_line_count is zero"
 msgstr "çíà÷åíèå pe_line_count ðàâíî íóëþ"
 
 #, c-format
 msgid "E322: line number out of range: %ld past the end"
-msgstr "E322: íîìåð ñòðîêè çà ïðåäåëàìè äèàïàçîíà: %ld"
+msgstr "E322: Íîìåð ñòðîêè çà ïðåäåëàìè äèàïàçîíà: %ld"
 
 #, c-format
 msgid "E323: line count wrong in block %ld"
-msgstr "E323: íåïðàâèëüíîå çíà÷åíèå ñ÷¸ò÷èêà ñòðîê â áëîêå %ld"
+msgstr "E323: Íåïðàâèëüíîå çíà÷åíèå ñ÷¸ò÷èêà ñòðîê â áëîêå %ld"
 
 msgid "Stack size increases"
 msgstr "Ðàçìåð ñòåêà óâåëè÷åí"
 
 msgid "E317: pointer block id wrong 2"
-msgstr "E317: íåïðàâèëüíîå çíà÷åíèå óêàçàòåëÿ áëîêà 2"
+msgstr "E317: Íåïðàâèëüíîå çíà÷åíèå óêàçàòåëÿ áëîêà 2"
+
+#, c-format
+msgid "E773: Symlink loop for \"%s\""
+msgstr "E773: Ïåòëÿ ñèìâîëüíûõ ññûëîê äëÿ \"%s\""
 
 msgid "E325: ATTENTION"
 msgstr "E325: ÂÍÈÌÀÍÈÅ"
@@ -3087,8 +3782,9 @@
 "\n"
 "Îáíàðóæåí ñâîï-ôàéë ñ èìåíåì \""
 
+# Ñ ìàëåíüêîé áóêâû, ÷òîáû ñîîòâåòñòâîâàëî ïî ñòèëþ ñîñåäíèì ñîîáùåíèÿì.
 msgid "While opening file \""
-msgstr "Ïðè îòêðûòèè ôàéëà: \""
+msgstr "ïðè îòêðûòèè ôàéëà: \""
 
 msgid "      NEWER than swap file!\n"
 msgstr "                    Áîëåå ÑÂÅÆÈÉ, ÷åì ñâîï-ôàéë!\n"
@@ -3097,24 +3793,23 @@
 #. * other languages.
 msgid ""
 "\n"
-"(1) Another program may be editing the same file.\n"
-"    If this is the case, be careful not to end up with two\n"
-"    different instances of the same file when making changes.\n"
+"(1) Another program may be editing the same file.  If this is the case,\n"
+"    be careful not to end up with two different instances of the same\n"
+"    file when making changes."
 msgstr ""
 "\n"
-"(1) Âîçìîæíî, ðåäàêòèðîâàíèå ôàéëà âûïîëíÿåòñÿ â äðóãîé ïðîãðàììå.\n"
-"    Åñëè ýòî òàê, òî áóäüòå âíèìàòåëüíû ïðè âíåñåíèè èçìåíåíèé,\n"
-"    ÷òîáû ó âàñ íå ïîÿâèëîñü äâà ðàçíûõ âàðèàíòà îäíîãî è òîãî æå ôàéëà.\n"
+"(1) Âîçìîæíî, ðåäàêòèðîâàíèå ýòîãî æå ôàéëà âûïîëíÿåòñÿ â äðóãîé ïðîãðàììå.\n"
+"    Åñëè ýòî òàê, òî áóäüòå âíèìàòåëüíû ïðè âíåñåíèè èçìåíåíèé, ÷òîáû\n"
+"    ó âàñ íå ïîÿâèëîñü äâà ðàçíûõ âàðèàíòà îäíîãî è òîãî æå ôàéëà."
 
-msgid "    Quit, or continue with caution.\n"
-msgstr "    Çàâåðøèòå ðàáîòó èëè ïðîäîëæàéòå ñ îñòîðîæíîñòüþ.\n"
-
-msgid ""
-"\n"
-"(2) An edit session for this file crashed.\n"
+# Ñîîáùåíèå ðàçäåëåíî, " \n" äîáàâëåíî ò.ê. ñòðîêà íå ïîìåùàåòñÿ.
+msgid "  Quit, or continue with caution.\n"
 msgstr ""
-"\n"
-"(2) Ïðåäûäóùèé ñåàíñ ðåäàêòèðîâàíèÿ ýòîãî ôàéëà çàâåðø¸í àâàðèéíî.\n"
+" \n"
+"    Çàâåðøèòå ðàáîòó èëè ïðîäîëæàéòå ñ îñòîðîæíîñòüþ.\n"
+
+msgid "(2) An edit session for this file crashed.\n"
+msgstr "(2) Ñåàíñ ðåäàêòèðîâàíèÿ ýòîãî ôàéëà çàâåðø¸í àâàðèéíî.\n"
 
 msgid "    If this is the case, use \":recover\" or \"vim -r "
 msgstr "     ýòîì ñëó÷àå, èñïîëüçóéòå êîìàíäó \":recover\" èëè \"vim -r "
@@ -3124,7 +3819,7 @@
 "    to recover the changes (see \":help recovery\").\n"
 msgstr ""
 "\"\n"
-"    äëÿ âîññòàíîâëåíèÿ èçìåíåíèé (ñì. \":help âîññòàíîâëåíèå\").\n"
+"    äëÿ âîññòàíîâëåíèÿ èçìåíåíèé (ñì. \":help recovery\").\n"
 
 msgid "    If you did this already, delete the swap file \""
 msgstr "    Åñëè âû óæå âûïîëíÿëè ýòó îïåðàöèþ, óäàëèòå ñâîï-ôàéë \""
@@ -3143,7 +3838,7 @@
 msgstr "\" óæå ñóùåñòâóåò!"
 
 msgid "VIM - ATTENTION"
-msgstr "VIM - ÂÍÈÌÀÍÈÅ"
+msgstr "VIM — ÂÍÈÌÀÍÈÅ"
 
 msgid "Swap file already exists!"
 msgstr "Ñâîï-ôàéë óæå ñóùåñòâóåò!"
@@ -3165,16 +3860,16 @@
 "&Open Read-Only\n"
 "&Edit anyway\n"
 "&Recover\n"
+"&Delete it\n"
 "&Quit\n"
-"&Abort\n"
-"&Delete it"
+"&Abort"
 msgstr ""
 "&O Îòêðûòü äëÿ ÷òåíèÿ\n"
 "&E Ðåäàêòèðîâàòü\n"
 "&R Âîññòàíîâèòü\n"
+"&D Óäàëèòü\n"
 "&Q Âûõîä\n"
-"&A Ïðåðâàòü\n"
-"&D Óäàëèòü"
+"&A Ïðåðâàòü"
 
 msgid "E326: Too many swap files found"
 msgstr "E326: Îáíàðóæåíî ñëèøêîì ìíîãî ñâîï-ôàéëîâ"
@@ -3185,8 +3880,13 @@
 msgid "E328: Menu only exists in another mode"
 msgstr "E328: Ìåíþ â ýòîì ðåæèìå íå ñóùåñòâóåò"
 
-msgid "E329: No menu of that name"
-msgstr "E329: Íåò ìåíþ ñ òàêèì èìåíåì"
+#, c-format
+msgid "E329: No menu \"%s\""
+msgstr "E329: Íåò ìåíþ %s"
+
+#. Only a mnemonic or accelerator is not valid.
+msgid "E792: Empty menu name"
+msgstr "E792: Ïóñòîå èìÿ ìåíþ"
 
 msgid "E330: Menu path must not lead to a sub-menu"
 msgstr "E330: Ïóòü ê ìåíþ íå äîëæåí âåñòè ê ïîäìåíþ"
@@ -3224,7 +3924,7 @@
 msgstr "E336: Ïóòü ê ìåíþ äîëæåí âåñòè ê ïîäìåíþ"
 
 msgid "E337: Menu not found - check menu names"
-msgstr "E337: Ìåíþ íå íàéäåíî -- ïðîâåðüòå èìåíà ìåíþ"
+msgstr "E337: Ìåíþ íå íàéäåíî — ïðîâåðüòå èìåíà ìåíþ"
 
 #, c-format
 msgid "Error detected while processing %s:"
@@ -3234,31 +3934,30 @@
 msgid "line %4ld:"
 msgstr "ñòðîêà %4ld:"
 
-msgid "[string too long]"
-msgstr "[ñëèøêîì äëèííàÿ ñòðîêà]"
+#, c-format
+msgid "E354: Invalid register name: '%s'"
+msgstr "E354: Íåäîïóñòèìîå èìÿ ðåãèñòðà: '%s'"
 
 msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
 msgstr ""
 "Ïåðåâîä ñîîáùåíèé íà ðóññêèé ÿçûê: Âàñèëèé Ðàãîçèí <vrr@users.sourceforge."
-"net>"
+"net>, Ñåðãåé Àë¸øèí <alyoshin.s@gmail.com>"
 
 msgid "Interrupt: "
 msgstr "Ïðåðûâàíèå: "
 
-msgid "Hit ENTER to continue"
-msgstr "Äëÿ ïðîäîëæåíèÿ íàæìèòå ENTER"
+msgid "Press ENTER or type command to continue"
+msgstr "Íàæìèòå ENTER èëè ââåäèòå êîìàíäó äëÿ ïðîäîëæåíèÿ"
 
-msgid "Hit ENTER or type command to continue"
-msgstr "Äëÿ ïðîäîëæåíèÿ íàæìèòå ENTER èëè ââåäèòå êîìàíäó"
+#, c-format
+msgid "%s line %ld"
+msgstr "%s ñòðîêà %ld"
 
 msgid "-- More --"
 msgstr "-- Ïðîäîëæåíèå ñëåäóåò --"
 
-msgid " (RET/BS: line, SPACE/b: page, d/u: half page, q: quit)"
-msgstr " (RET/BS: ñòðîêà, SPACE/b: ñòðàíèöà, d/u: ïîëñòðàíèöû, q: âûõîä)"
-
-msgid " (RET: line, SPACE: page, d: half page, q: quit)"
-msgstr " (RET: ñòðîêà, SPACE: ñòðàíèöà, d: ïîëñòðàíèöû, q: âûõîä)"
+msgid " SPACE/d/j: screen/page/line down, b/u/k: up, q: quit "
+msgstr " SPACE/d/j: ýêðàí/ñòðàíèöà/ñòðîêà âíèç, b/u/k: ââåðõ, q: âûõîä "
 
 msgid "Question"
 msgstr "Âîïðîñ"
@@ -3267,8 +3966,8 @@
 "&Yes\n"
 "&No"
 msgstr ""
-"&Äà\n"
-"&Íåò"
+"&Y Äà\n"
+"&N Íåò"
 
 msgid ""
 "&Yes\n"
@@ -3277,11 +3976,14 @@
 "&Discard All\n"
 "&Cancel"
 msgstr ""
-"&Äà\n"
-"&Íåò\n"
-"Ñîõðàíèòü &âñå\n"
-"&Ïîòåðÿòü âñå\n"
-"Î&òìåíà"
+"&Y Äà\n"
+"&N Íåò\n"
+"&A Ñîõðàíèòü âñå\n"
+"&D Ïîòåðÿòü âñå\n"
+"&C Îòìåíà"
+
+msgid "Select Directory dialog"
+msgstr "Âûáîð êàòàëîãà"
 
 msgid "Save File dialog"
 msgstr "Ñîõðàíåíèå ôàéëà"
@@ -3294,14 +3996,29 @@
 msgstr ""
 "E338: Èçâèíèòå, íî â êîíñîëüíîì ðåæèìå íåò ïðîâîäíèêà ïî ôàéëîâîé ñèñòåìå"
 
+msgid "E766: Insufficient arguments for printf()"
+msgstr "E766: Íåäîñòàòî÷íî ïàðàìåòðîâ äëÿ printf()"
+
+msgid "E807: Expected Float argument for printf()"
+msgstr "E807: Îæèäàëñÿ ïàðàìåòð òèïà ñ ïëàâàþùåé òî÷êîé äëÿ printf()"
+
+msgid "E767: Too many arguments to printf()"
+msgstr "E767: Ñëèøêîì ìíîãî ïàðàìåòðîâ äëÿ printf()"
+
 msgid "W10: Warning: Changing a readonly file"
 msgstr "W10: Ïðåäóïðåæäåíèå: Èçìåíåíèå ôàéëà ñ ïðàâàìè òîëüêî äëÿ ÷òåíèÿ"
 
+msgid "Type number and <Enter> or click with mouse (empty cancels): "
+msgstr "Ââåäèòå íîìåð è <Enter> èëè ù¸ëêíèòå ìûøüþ (ïóñòî äëÿ îòìåíû): "
+
+msgid "Type number and <Enter> (empty cancels): "
+msgstr "Ââåäèòå íîìåð è <Enter> (ïóñòî äëÿ îòìåíû): "
+
 msgid "1 more line"
 msgstr "Äîáàâëåíà îäíà ñòðîêà"
 
 msgid "1 line less"
-msgstr "Óäàëåíà îäíà ñòðîêà"
+msgstr "Óáðàíà îäíà ñòðîêà"
 
 #, c-format
 msgid "%ld more lines"
@@ -3309,19 +4026,21 @@
 
 #, c-format
 msgid "%ld fewer lines"
-msgstr "Óäàëåíî ñòðîê: %ld"
+msgstr "Óáðàíî ñòðîê: %ld"
 
 msgid " (Interrupted)"
 msgstr " (Ïðåðâàíî)"
 
+msgid "Beep!"
+msgstr "Áè-áè!"
+
 msgid "Vim: preserving files...\n"
-msgstr "Vim: ñîõðàíÿþòñÿ ôàéëû...\n"
+msgstr "Vim: ñîõðàíåíèå ôàéëîâ...\n"
 
 #. close all memfiles, without deleting
 msgid "Vim: Finished.\n"
 msgstr "Vim: Ãîòîâî.\n"
 
-#, c-format
 msgid "ERROR: "
 msgstr "ÎØÈÁÊÀ: "
 
@@ -3366,7 +4085,7 @@
 msgstr "E547: Íåäîïóñòèìàÿ ôîðìà êóðñîðà"
 
 msgid "E548: digit expected"
-msgstr "E548: òðåáóåòñÿ ââåñòè öèôðó"
+msgstr "E548: Òðåáóåòñÿ ââåñòè öèôðó"
 
 msgid "E549: Illegal percentage"
 msgstr "E549: Íåäîïóñòèìîå çíà÷åíèå ïðîöåíòîâ"
@@ -3375,11 +4094,14 @@
 msgstr "Ââåäèòå ïàðîëü äëÿ øèôðîâàíèÿ: "
 
 msgid "Enter same key again: "
-msgstr "        Ïîâòîðèòå ââîä ïàðîëÿ:"
+msgstr "Ïîâòîðèòå ââîä ïàðîëÿ: "
 
 msgid "Keys don't match!"
 msgstr "Ââåä¸ííûå ïàðîëè íå ñîâïàäàþò!"
 
+msgid "E854: path too long for completion"
+msgstr "E854: ñëèøêîì áîëüøîé ïóòü äëÿ àâòîäîïîëíåíèÿ"
+
 #, c-format
 msgid ""
 "E343: Invalid path: '**[number]' must be at the end of the path or be "
@@ -3404,18 +4126,8 @@
 msgid "E347: No more file \"%s\" found in path"
 msgstr "E347: Â èçâåñòíûõ êàòàëîãàõ áîëüøå íåò ôàéëîâ \"%s\""
 
-msgid "E550: Missing colon"
-msgstr "E550: Ïðîïóùåíî äâîåòî÷èå"
-
-msgid "E551: Illegal component"
-msgstr "E551: Íåäîïóñòèìûé êîìïîíåíò"
-
-msgid "E552: digit expected"
-msgstr "E552: Òðåáóåòñÿ óêàçàòü öèôðó"
-
-#. Get here when the server can't be found.
 msgid "Cannot connect to Netbeans #2"
-msgstr "Íåâîçìîæíî ñîåäèíèòüñÿ ñ Netbeans #2"
+msgstr "Íåâîçìîæíî ñîåäèíèòüñÿ ñ NetBeans #2"
 
 msgid "Cannot connect to Netbeans"
 msgstr "Íåâîçìîæíî ñîåäèíèòüñÿ ñ NetBeans"
@@ -3432,21 +4144,37 @@
 msgid "E658: NetBeans connection lost for buffer %ld"
 msgstr "E658: Ïîòåðÿíî ñîåäèíåíèå ñ NetBeans äëÿ áóôåðà %ld"
 
+msgid "E838: netbeans is not supported with this GUI"
+msgstr "E838: NetBeans íå ïîääåðæèâàåòñÿ ñ ýòèì ãðàôè÷åñêèì èíòåðôåéñîì"
+
+msgid "E511: netbeans already connected"
+msgstr "E511: óæå ñîåäèí¸í ñ NetBeans"
+
+#, c-format
+msgid "E505: %s is read-only (add ! to override)"
+msgstr "E505: %s îòêðûò òîëüêî äëÿ ÷òåíèÿ (äîáàâüòå !, ÷òîáû îáîéòè ïðîâåðêó)"
+
+msgid "E349: No identifier under cursor"
+msgstr "E349: Íåò èìåíè â ïîçèöèè êóðñîðà"
+
+msgid "E774: 'operatorfunc' is empty"
+msgstr "E774: Çíà÷åíèåì îïöèè 'operatorfunc' ÿâëÿåòñÿ ïóñòàÿ ñòðîêà"
+
+msgid "E775: Eval feature not available"
+msgstr "E775: eval íå äîñòóïíà"
+
 msgid "Warning: terminal cannot highlight"
 msgstr "Ïðåäóïðåæäåíèå: òåðìèíàë íå ìîæåò âûïîëíÿòü ïîäñâåòêó"
 
 msgid "E348: No string under cursor"
 msgstr "E348: Íåò ñòðîêè â ïîçèöèè êóðñîðà"
 
-msgid "E349: No identifier under cursor"
-msgstr "E349: Íåò èìåíè â ïîçèöèè êóðñîðà"
-
 msgid "E352: Cannot erase folds with current 'foldmethod'"
 msgstr ""
 "E352: Íåâîçìîæíî ñòåðåòü ñêëàäêè ñ òåêóùèì çíà÷åíèåì îïöèè 'foldmethod'"
 
 msgid "E664: changelist is empty"
-msgstr "E664: ñïèñîê èçìåíåíèé ïóñòîé"
+msgstr "E664: Ñïèñîê èçìåíåíèé ïóñòîé"
 
 msgid "E662: At start of changelist"
 msgstr "E662:  íà÷àëå ñïèñêà èçìåíåíèé"
@@ -3484,6 +4212,9 @@
 msgid "%ld lines indented "
 msgstr "Èçìåíåíû îòñòóïû â ñòðîêàõ (%ld) "
 
+msgid "E748: No previously used register"
+msgstr "E748: Íåò ïðåäûäóùåãî èñïîëüçîâàííîãî ðåãèñòðà"
+
 #. must display the prompt
 msgid "cannot yank; delete anyway"
 msgstr "ñêîïèðîâàòü íå óäàëîñü, óäàëåíèå âûïîëíåíî"
@@ -3499,10 +4230,17 @@
 msgid "freeing %ld lines"
 msgstr "î÷èùåíî ñòðîê: %ld"
 
+msgid "block of 1 line yanked"
+msgstr "ñêîïèðîâàí áëîê èç îäíîé ñòðîêè"
+
 msgid "1 line yanked"
 msgstr "ñêîïèðîâàíà îäíà ñòðîêà"
 
 #, c-format
+msgid "block of %ld lines yanked"
+msgstr "ñêîïèðîâàí áëîê èç ñòðîê: %ld"
+
+#, c-format
 msgid "%ld lines yanked"
 msgstr "ñêîïèðîâàíî ñòðîê: %ld"
 
@@ -3521,7 +4259,6 @@
 msgid "Illegal register name"
 msgstr "Íåäîïóñòèìîå èìÿ ðåãèñòðà"
 
-#, c-format
 msgid ""
 "\n"
 "# Registers:\n"
@@ -3534,10 +4271,6 @@
 msgstr "E574: Íåèçâåñòíûé òèï ðåãèñòðà %d"
 
 #, c-format
-msgid "E354: Invalid register name: '%s'"
-msgstr "E354: Íåäîïóñòèìîå èìÿ ðåãèñòðà: '%s'"
-
-#, c-format
 msgid "%ld Cols; "
 msgstr "Êîëîíîê: %ld; "
 
@@ -3546,8 +4279,24 @@
 msgstr "Âûäåëåíî %s%ld èç %ld ñòðîê; %ld èç %ld ñëîâ; %ld èç %ld áàéò"
 
 #, c-format
+msgid ""
+"Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Chars; %ld of %ld "
+"Bytes"
+msgstr ""
+"Âûäåëåíî %s%ld èç %ld ñòð.; %ld èç %ld ñëîâ; %ld èç %ld ñèìâ.; %ld èç %ld "
+"áàéò"
+
+#, c-format
 msgid "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Byte %ld of %ld"
-msgstr "Êîë. %s èç %s;  ñòð. %ld èç %ld; ñëîâî %ld èç %ld; áàéò %ld èç %ld"
+msgstr "Êîë. %s èç %s; ñòð. %ld èç %ld; ñë. %ld èç %ld; áàéò %ld èç %ld"
+
+#, c-format
+msgid ""
+"Col %s of %s; Line %ld of %ld; Word %ld of %ld; Char %ld of %ld; Byte %ld of "
+"%ld"
+msgstr ""
+"Êîë. %s èç %s; ñòð. %ld èç %ld; ñë. %ld èç %ld; ñèìâ. %ld èç %ld; áàéò %ld "
+"èç %ld"
 
 #, c-format
 msgid "(+%ld for BOM)"
@@ -3568,12 +4317,8 @@
 msgid "E520: Not allowed in a modeline"
 msgstr "E520: Íå äîïóñêàåòñÿ â ðåæèìíîé ñòðîêå"
 
-msgid ""
-"\n"
-"\tLast set from "
-msgstr ""
-"\n"
-"\t ïîñëåäíèé ðàç îïöèÿ èçìåíåíà â "
+msgid "E846: Key code not set"
+msgstr "E846: Êîä êëàâèøè íå óñòàíîâëåí"
 
 msgid "E521: Number required after ="
 msgstr "E521: Ïîñëå = òðåáóåòñÿ óêàçàòü ÷èñëî"
@@ -3595,7 +4340,13 @@
 msgstr "E531: Äëÿ çàïóñêà ãðàôè÷åñêîãî èíòåðôåéñà èñïîëüçóéòå \":gui\""
 
 msgid "E589: 'backupext' and 'patchmode' are equal"
-msgstr "E589: çíà÷åíèÿ îïöèé 'backupext' è 'patchmode' ðàâíû"
+msgstr "E589: Çíà÷åíèÿ îïöèé 'backupext' è 'patchmode' ðàâíû"
+
+msgid "E834: Conflicts with value of 'listchars'"
+msgstr "E834: Êîíôëèêòóåò ñî çíà÷åíèåì 'listchars'"
+
+msgid "E835: Conflicts with value of 'fillchars'"
+msgstr "E835: Êîíôëèêòóåò ñî çíà÷åíèåì 'fillchars'"
 
 msgid "E617: Cannot be changed in the GTK+ 2 GUI"
 msgstr "E617: Íå ìîæåò áûòü èçìåíåíî â ãðàôè÷åñêîì èíòåðôåéñå GTK+ 2"
@@ -3617,19 +4368,19 @@
 msgstr "E528: Íåîáõîäèìî óêàçàòü çíà÷åíèå äëÿ '"
 
 msgid "E595: contains unprintable or wide character"
-msgstr "E595: ñîäåðæèò íåïå÷àòíûé ñèìâîë èëè ñèìâîë äâîéíîé øèðèíû"
+msgstr "E595: Ñîäåðæèò íåïå÷àòíûé ñèìâîë èëè ñèìâîë äâîéíîé øèðèíû"
 
 msgid "E596: Invalid font(s)"
 msgstr "E596: Íåïðàâèëüíûå øðèôòû"
 
 msgid "E597: can't select fontset"
-msgstr "E597: íåâîçìîæíî âûáðàòü øðèôòîâîé íàáîð"
+msgstr "E597: Íåâîçìîæíî âûáðàòü øðèôòîâîé íàáîð"
 
 msgid "E598: Invalid fontset"
 msgstr "E598: Íåïðàâèëüíûé øðèôòîâîé íàáîð"
 
 msgid "E533: can't select wide font"
-msgstr "E533: íåâîçìîæíî âûáðàòü øðèôò ñ ñèìâîëàìè äâîéíîé øèðèíû"
+msgstr "E533: Íåâîçìîæíî âûáðàòü øðèôò ñ ñèìâîëàìè äâîéíîé øèðèíû"
 
 msgid "E534: Invalid wide font"
 msgstr "E534: Íåïðàâèëüíûé øðèôò ñ ñèìâîëàìè äâîéíîé øèðèíû"
@@ -3639,7 +4390,7 @@
 msgstr "E535: Íåïðàâèëüíûé ñèìâîë ïîñëå <%c>"
 
 msgid "E536: comma required"
-msgstr "E536: òðåáóåòñÿ çàïÿòàÿ"
+msgstr "E536: Òðåáóåòñÿ çàïÿòàÿ"
 
 #, c-format
 msgid "E537: 'commentstring' must be empty or contain %s"
@@ -3654,10 +4405,10 @@
 msgstr "E540: Íåçàêðûòàÿ ïîñëåäîâàòåëüíîñòü âûðàæåíèÿ"
 
 msgid "E541: too many items"
-msgstr "E541: ñëèøêîì ìíîãî ýëåìåíòîâ"
+msgstr "E541: Ñëèøêîì ìíîãî ýëåìåíòîâ"
 
 msgid "E542: unbalanced groups"
-msgstr "E542: íåñáàëàíñèðîâàííûå ãðóïïû"
+msgstr "E542: Íåñáàëàíñèðîâàííûå ãðóïïû"
 
 msgid "E590: A preview window already exists"
 msgstr "E590: Îêíî ïðåäïðîñìîòðà óæå åñòü"
@@ -3678,6 +4429,13 @@
 msgid "E355: Unknown option: %s"
 msgstr "E355: Íåèçâåñòíàÿ îïöèÿ: %s"
 
+#. There's another character after zeros or the string
+#. * is empty.  In both cases, we are trying to set a
+#. * num option using a string.
+#, c-format
+msgid "E521: Number required: &%s = '%s'"
+msgstr "E521: Òðåáóåòñÿ óêàçàòü ÷èñëî: &%s = '%s'"
+
 msgid ""
 "\n"
 "--- Terminal codes ---"
@@ -3748,7 +4506,7 @@
 
 #. if Vim opened a window: Executing a shell may cause crashes
 msgid "E360: Cannot execute shell with -f option"
-msgstr "E360: Íåâîçìîæíî âûïîëíèòü îáîëî÷êó ñ àðãóìåíòîì -f"
+msgstr "E360: Íåâîçìîæíî âûïîëíèòü îáîëî÷êó ñ ïàðàìåòðîì -f"
 
 msgid "Cannot execute "
 msgstr "Íåâîçìîæíî âûïîëíèòü "
@@ -3765,8 +4523,8 @@
 msgid "I/O ERROR"
 msgstr "ÎØÈÁÊÀ ÂÂÎÄÀ/ÂÛÂÎÄÀ"
 
-msgid "...(truncated)"
-msgstr "...(îáðåçàíî)"
+msgid "Message"
+msgstr "Ñîîáùåíèå"
 
 msgid "'columns' is not 80, cannot execute external commands"
 msgstr "Çíà÷åíèå îïöèè 'columns' íå ðàâíî 80, âíåøíèå ïðîãðàììû íå âûïîëíÿþòñÿ"
@@ -3786,9 +4544,6 @@
 msgid "E238: Print error: %s"
 msgstr "E238: Îøèáêà ïå÷àòè: %s"
 
-msgid "Unknown"
-msgstr "Íåèçâåñòíî"
-
 #, c-format
 msgid "Printing '%s'"
 msgstr "Ïå÷àòü '%s'"
@@ -3831,6 +4586,20 @@
 
 msgid ""
 "\n"
+"Could not get security context for "
+msgstr ""
+"\n"
+"Íåâîçìîæíî ïîëó÷èòü êîíòåêñò áåçîïàñíîñòè äëÿ "
+
+msgid ""
+"\n"
+"Could not set security context for "
+msgstr ""
+"\n"
+"Íåâîçìîæíî óñòàíîâèòü êîíòåêñò áåçîïàñíîñòè äëÿ "
+
+msgid ""
+"\n"
 "Cannot execute shell "
 msgstr ""
 "\n"
@@ -3874,6 +4643,10 @@
 msgid "XSMP lost ICE connection"
 msgstr "XSMP óòåðÿíî ñîåäèíåíèå ICE"
 
+#, c-format
+msgid "dlerror = \"%s\""
+msgstr "dlerror = \"%s\""
+
 msgid "Opening the X display failed"
 msgstr "Íåóäà÷íîå îòêðûòèå äèñïëåÿ X"
 
@@ -3893,15 +4666,12 @@
 msgid "At line"
 msgstr "Â ñòðîêå"
 
-msgid "Could not allocate memory for command line."
-msgstr "Íåâîçìîæíî âûäåëèòü ïàìÿòü äëÿ êîìàíäíîé ñòðîêè."
+msgid "Could not load vim32.dll!"
+msgstr "Íåâîçìîæíî çàãðóçèòü vim32.dll!"
 
 msgid "VIM Error"
 msgstr "Îøèáêà VIM"
 
-msgid "Could not load vim32.dll!"
-msgstr "Íåâîçìîæíî çàãðóçèòü vim32.dll!"
-
 msgid "Could not fix up function pointers to the DLL!"
 msgstr "Íåâîçìîæíî èñïðàâèòü óêàçàòåëè ôóíêöèé äëÿ DLL!"
 
@@ -3964,7 +4734,7 @@
 msgstr "E378:  çíà÷åíèè îïöèè 'errorformat' îòñóòñòâóåò øàáëîí"
 
 msgid "E379: Missing or empty directory name"
-msgstr "E379: èìÿ êàòàëîãà íå çàäàíî èëè ðàâíî ïóñòîé ñòðîêå"
+msgstr "E379: Èìÿ êàòàëîãà íå çàäàíî èëè ðàâíî ïóñòîé ñòðîêå"
 
 msgid "E553: No more items"
 msgstr "E553: Áîëüøå íåò ýëåìåíòîâ"
@@ -3990,9 +4760,25 @@
 msgstr ""
 "E382: Çàïèñü íåâîçìîæíà, çíà÷åíèå îïöèè 'buftype' íå ÿâëÿåòñÿ ïóñòîé ñòðîêîé"
 
+msgid "Error file"
+msgstr "Ôàéë îøèáîê"
+
+msgid "E683: File name missing or invalid pattern"
+msgstr "E683: Íåò èìåíè ôàéëà èëè íåïðàâèëüíûé øàáëîí"
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr "Íåâîçìîæíî îòêðûòü ôàéë \"%s\""
+
+msgid "E681: Buffer is not loaded"
+msgstr "E681: Áóôåð íå âûãðóæåí"
+
+msgid "E777: String or List expected"
+msgstr "E777: Òðåáóåòñÿ ñòðîêà èëè ñïèñîê"
+
 #, c-format
 msgid "E369: invalid item in %s%%[]"
-msgstr "E369: íåäîïóñòèìûé ýëåìåíò â %s%%[]"
+msgstr "E369: Íåäîïóñòèìûé ýëåìåíò â %s%%[]"
 
 msgid "E339: Pattern too long"
 msgstr "E339: Ñëèøêîì äëèííûé øàáëîí"
@@ -4020,20 +4806,8 @@
 msgstr "E55: Íåò ïàðû äëÿ %s)"
 
 #, c-format
-msgid "E56: %s* operand could be empty"
-msgstr "E56: âîçìîæíî ïóñòîé îïåðàíä %s*"
-
-#, c-format
-msgid "E57: %s+ operand could be empty"
-msgstr "E57: âîçìîæíî ïóñòîé îïåðàíä %s+"
-
-#, c-format
 msgid "E59: invalid character after %s@"
-msgstr "E59: íåäîïóñòèìûé ñèìâîë ïîñëå %s@"
-
-#, c-format
-msgid "E58: %s{ operand could be empty"
-msgstr "E58: âîçìîæíî ïóñòîé îïåðàíä %s{"
+msgstr "E59: Íåäîïóñòèìûé ñèìâîë ïîñëå %s@"
 
 #, c-format
 msgid "E60: Too many complex %s{...}s"
@@ -4048,7 +4822,7 @@
 msgstr "E62: Âëîæåííûå %s%c"
 
 msgid "E63: invalid use of \\_"
-msgstr "E63: íåäîïóñòèìîå èñïîëüçîâàíèå \\_"
+msgstr "E63: Íåäîïóñòèìîå èñïîëüçîâàíèå \\_"
 
 #, c-format
 msgid "E64: %s%c follows nothing"
@@ -4075,28 +4849,24 @@
 msgstr "E70: Ïóñòîå %s%%[]"
 
 #, c-format
+msgid "E678: Invalid character after %s%%[dxouU]"
+msgstr "E678: Íåäîïóñòèìûé ñèìâîë ïîñëå %s%%[dxouU]"
+
+#, c-format
 msgid "E71: Invalid character after %s%%"
 msgstr "E71: Íåäîïóñòèìûé ñèìâîë ïîñëå %s%%"
 
 #, c-format
+msgid "E769: Missing ] after %s["
+msgstr "E769: Ïðîïóùåíà ] ïîñëå %s["
+
+#, c-format
 msgid "E554: Syntax error in %s{...}"
 msgstr "E554: Ñèíòàêñè÷åñêàÿ îøèáêà â %s{...}"
 
-msgid "E361: Crash intercepted; regexp too complex?"
-msgstr ""
-"E361: Ïðåäîòâðàùåíî àâàðèéíîå çàâåðøåíèå: ñëèøêîì ñëîæíîå ðåãóëÿðíîå "
-"âûðàæåíèå?"
-
-msgid "E363: pattern caused out-of-stack error"
-msgstr "E363: ïðèìåíåíèå øàáëîíà ïðèâåëî ê îøèáêå âûõîäà çà ïðåäåëû ñòåêà"
-
 msgid "External submatches:\n"
 msgstr "Âíåøíèå ïîäñîîòâåòñòâèÿ:\n"
 
-#, c-format
-msgid "+--%3ld lines folded "
-msgstr "+--%3ld ñòðîê â ñêëàäêå"
-
 msgid " VREPLACE"
 msgstr " ÂÈÐÒÓÀËÜÍÀß ÇÀÌÅÍÀ"
 
@@ -4151,23 +4921,17 @@
 msgid "recording"
 msgstr "çàïèñü"
 
-msgid "search hit TOP, continuing at BOTTOM"
-msgstr "ïîèñê áóäåò ïðîäîëæåí ñ ÊÎÍÖÀ äîêóìåíòà"
-
-msgid "search hit BOTTOM, continuing at TOP"
-msgstr "ïîèñê áóäåò ïðîäîëæåí ñ ÍÀ×ÀËÀ äîêóìåíòà"
-
 #, c-format
 msgid "E383: Invalid search string: %s"
 msgstr "E383: Íåïðàâèëüíàÿ ñòðîêà ïîèñêà: %s"
 
 #, c-format
 msgid "E384: search hit TOP without match for: %s"
-msgstr "E384: ïîèñê çàêîí÷åí â ÍÀ×ÀËÅ äîêóìåíòà; %s íå íàéäåíî"
+msgstr "E384: Ïîèñê çàêîí÷åí â ÍÀ×ÀËÅ äîêóìåíòà; %s íå íàéäåíî"
 
 #, c-format
 msgid "E385: search hit BOTTOM without match for: %s"
-msgstr "E385: ïîèñê çàêîí÷åí â ÊÎÍÖÅ äîêóìåíòà; %s íå íàéäåíî"
+msgstr "E385: Ïîèñê çàêîí÷åí â ÊÎÍÖÅ äîêóìåíòà; %s íå íàéäåíî"
 
 msgid "E386: Expected '?' or '/'  after ';'"
 msgstr "E386: Ïîñëå ';' îæèäàåòñÿ ââîä '?' èëè '/'"
@@ -4195,6 +4959,10 @@
 msgid "Scanning included file: %s"
 msgstr "Ïðîñìîòð âêëþ÷¸ííûõ ôàéëîâ: %s"
 
+#, c-format
+msgid "Searching included file %s"
+msgstr "Ïîèñê âêëþ÷¸ííîãî ôàéëà %s"
+
 msgid "E387: Match is on current line"
 msgstr "E387: Ñîîòâåòñòâèå â òåêóùåé ñòðîêå"
 
@@ -4210,9 +4978,398 @@
 msgid "E389: Couldn't find pattern"
 msgstr "E389: Øàáëîí íå íàéäåí"
 
+msgid "Substitute "
+msgstr "Çàìåíà "
+
+#, c-format
+msgid ""
+"\n"
+"# Last %sSearch Pattern:\n"
+"~"
+msgstr ""
+"\n"
+"# Ïîñëåäíèé %sØàáëîí ïîèñêà:\n"
+"~"
+
+msgid "E759: Format error in spell file"
+msgstr "E759: Îøèáêà ôîðìàòà â ôàéëå ïðàâîïèñàíèÿ"
+
+msgid "E758: Truncated spell file"
+msgstr "E758: Ôàéë ïðàâîïèñàíèÿ îáðåçàí"
+
+#, c-format
+msgid "Trailing text in %s line %d: %s"
+msgstr "Ëèøíèé òåêñò íà õâîñòå â %s ñòð. %d: %s"
+
+#, c-format
+msgid "Affix name too long in %s line %d: %s"
+msgstr "Èìÿ àôôèêñà ñëèøêîì äëèííîå â %s, ñòðîêà %d: %s"
+
+msgid "E761: Format error in affix file FOL, LOW or UPP"
+msgstr "E761: Îøèáêà ôîðìàòà â ôàéëå àôôèêñîâ FOL, LOW èëè UPP"
+
+msgid "E762: Character in FOL, LOW or UPP is out of range"
+msgstr "E762: Ñèìâîëû â FOL, LOW èëè UPP çà ïðåäåëàìè äèàïàçîíà"
+
+msgid "Compressing word tree..."
+msgstr "Ñæàòèå äåðåâà ñëîâ..."
+
+msgid "E756: Spell checking is not enabled"
+msgstr "E756: Ïðîâåðêà ïðàâîïèñàíèÿ âûêëþ÷åíà"
+
+#, c-format
+msgid "Warning: Cannot find word list \"%s_%s.spl\" or \"%s_ascii.spl\""
+msgstr ""
+"Ïðåäóïðåæäåíèå: Íåâîçìîæíî íàéòè ñïèñîê ñëîâ \"%s_%s.spl\" èëè \"%s_ascii.spl"
+"\""
+
+#, c-format
+msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""
+msgstr ""
+"Ïðåäóïðåæäåíèå: Íåâîçìîæíî íàéòè ñïèñîê ñëîâ \"%s.%s.spl\" èëè \"%s.ascii.spl"
+"\""
+
+#, c-format
+msgid "Reading spell file \"%s\""
+msgstr "×òåíèå ôàéëà ïðàâîïèñàíèÿ \"%s\""
+
+msgid "E757: This does not look like a spell file"
+msgstr "E757: Ýòî íå ïîõîæå íà ôàéë ïðàâîïèñàíèÿ"
+
+msgid "E771: Old spell file, needs to be updated"
+msgstr "E771: Ñòàðûé ôàéë ïðàâîïèñàíèÿ, òðåáóåòñÿ åãî îáíîâëåíèå"
+
+msgid "E772: Spell file is for newer version of Vim"
+msgstr "E772: Ôàéë ïðàâîïèñàíèÿ ïðåäíàçíà÷åí äëÿ áîëåå íîâîé âåðñèè Vim"
+
+msgid "E770: Unsupported section in spell file"
+msgstr "E770: Íåïîääåðæèâàåìûé ðàçäåë â ôàéëå ïðàâîïèñàíèÿ"
+
+#, c-format
+msgid "Warning: region %s not supported"
+msgstr "Ïðåäóïðåæäåíèå: ðåãèîí %s íå ïîääåðæèâàåòñÿ"
+
+#, c-format
+msgid "Reading affix file %s ..."
+msgstr "×òåíèå ôàéëà àôôèêñîâ %s ..."
+
+#, c-format
+msgid "Conversion failure for word in %s line %d: %s"
+msgstr "Íå óäàëîñü ïðåîáðàçîâàòü ñëîâî â %s, ñòðîêà %d: %s"
+
+#, c-format
+msgid "Conversion in %s not supported: from %s to %s"
+msgstr "Ïðåîáðàçîâàíèå â %s íå ïîääåðæèâàåòñÿ: èç %s â %s"
+
+#, c-format
+msgid "Conversion in %s not supported"
+msgstr "Ïðåîáðàçîâàíèå â %s íå ïîääåðæèâàåòñÿ"
+
+#, c-format
+msgid "Invalid value for FLAG in %s line %d: %s"
+msgstr "Íåïðàâèëüíîå çíà÷åíèå FLAG â %s, ñòðîêà %d: %s"
+
+#, c-format
+msgid "FLAG after using flags in %s line %d: %s"
+msgstr "FLAG ïîñëå èñïîëüçîâàíèÿ ôëàãîâ â %s, ñòðîêà %d: %s"
+
+#, c-format
+msgid ""
+"Defining COMPOUNDFORBIDFLAG after PFX item may give wrong results in %s line "
+"%d"
+msgstr ""
+"Îïðåäåëåíèå COMPOUNDFORBIDFLAG ïîñëå ýëåìåíòà PFX ìîæåò äàòü íåïðàâèëüíûå "
+"ðåçóëüòàòû â %s, ñòðîêà %d"
+
+#, c-format
+msgid ""
+"Defining COMPOUNDPERMITFLAG after PFX item may give wrong results in %s line "
+"%d"
+msgstr ""
+"Îïðåäåëåíèå COMPOUNDPERMITFLAG ïîñëå ýëåìåíòà PFX ìîæåò äàòü íåïðàâèëüíûå "
+"ðåçóëüòàòû â %s, ñòðîêà %d"
+
+#, c-format
+msgid "Wrong COMPOUNDRULES value in %s line %d: %s"
+msgstr "Íåïðàâèëüíîå çíà÷åíèå COMPOUNDRULES â %s, ñòðîêà %d: %s"
+
+#, c-format
+msgid "Wrong COMPOUNDWORDMAX value in %s line %d: %s"
+msgstr "Íåïðàâèëüíîå çíà÷åíèå COMPOUNDWORDMAX â %s, ñòðîêà %d: %s"
+
+#, c-format
+msgid "Wrong COMPOUNDMIN value in %s line %d: %s"
+msgstr "Íåïðàâèëüíîå çíà÷åíèå COMPOUNDMIN â %s, ñòðîêà %d: %s"
+
+#, c-format
+msgid "Wrong COMPOUNDSYLMAX value in %s line %d: %s"
+msgstr "Íåïðàâèëüíîå çíà÷åíèå COMPOUNDSYLMAX â %s, ñòðîêà %d: %s"
+
+#, c-format
+msgid "Wrong CHECKCOMPOUNDPATTERN value in %s line %d: %s"
+msgstr "Íåïðàâèëüíîå çíà÷åíèå CHECKCOMPOUNDPATTERN â %s, ñòðîêà %d: %s"
+
+#, c-format
+msgid "Different combining flag in continued affix block in %s line %d: %s"
+msgstr ""
+"Äðóãîé îáúåäèíÿþùèé ôëàã â ïðîäîëæàþùåì áëîêå àôôèêñà â %s, ñòðîêà %d: %s"
+
+#, c-format
+msgid "Duplicate affix in %s line %d: %s"
+msgstr "Ïîâòîðÿþùèéñÿ àôôèêñ â %s, ñòðîêà %d: %s"
+
+#, c-format
+msgid ""
+"Affix also used for BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST in %s "
+"line %d: %s"
+msgstr ""
+"Àôôèêñ òàêæå èñïîëüçóåòñÿ äëÿ BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/"
+"NOSUGGEST â %s, ñòðîêà %d: %s"
+
+#, c-format
+msgid "Expected Y or N in %s line %d: %s"
+msgstr "Îæèäàëîñü Y èëè N â %s, ñòðîêà %d: %s"
+
+#, c-format
+msgid "Broken condition in %s line %d: %s"
+msgstr "Íàðóøåííîå óñëîâèå â %s, ñòðîêà %d: %s"
+
+#, c-format
+msgid "Expected REP(SAL) count in %s line %d"
+msgstr "Îæèäàëñÿ ñ÷¸ò÷èê REP(SAL) â %s, ñòðîêà %d"
+
+#, c-format
+msgid "Expected MAP count in %s line %d"
+msgstr "Îæèäàëñÿ ñ÷¸ò÷èê MAP â %s, ñòðîêà %d"
+
+#, c-format
+msgid "Duplicate character in MAP in %s line %d"
+msgstr "Ïîâòîðÿþùèéñÿ ñèìâîë â MAP â %s, ñòðîêà %d"
+
+#, c-format
+msgid "Unrecognized or duplicate item in %s line %d: %s"
+msgstr "Íåðàñïîçíàííûé èëè ïîâòîðÿþùèéñÿ ýëåìåíò â %s, ñòðîêà %d: %s"
+
+#, c-format
+msgid "Missing FOL/LOW/UPP line in %s"
+msgstr "Ïðîïóùåíà ñòðîêà FOL/LOW/UPP â %s"
+
+msgid "COMPOUNDSYLMAX used without SYLLABLE"
+msgstr "COMPOUNDSYLMAX èñïîëüçóåòñÿ áåç SYLLABLE"
+
+msgid "Too many postponed prefixes"
+msgstr "Ñëèøêîì ìíîãî îòëîæåííûõ ïðåôèêñîâ"
+
+msgid "Too many compound flags"
+msgstr "Ñëèøêîì ìíîãî ñîñòàâíûõ ôëàãîâ"
+
+msgid "Too many postponed prefixes and/or compound flags"
+msgstr "Ñëèøêîì ìíîãî îòëîæåííûõ ïðåôèêñîâ è/èëè ñîñòàâíûõ ôëàãîâ"
+
+#, c-format
+msgid "Missing SOFO%s line in %s"
+msgstr "Ïðîïóùåíà ñòðîêà SOFO%s â %s"
+
+#, c-format
+msgid "Both SAL and SOFO lines in %s"
+msgstr "Îáå ñòðîêè SAL è SOFO â %s"
+
+#, c-format
+msgid "Flag is not a number in %s line %d: %s"
+msgstr "Ôëàã íå ÿâëÿåòñÿ ÷èñëîì â %s, ñòðîêà %d: %s"
+
+#, c-format
+msgid "Illegal flag in %s line %d: %s"
+msgstr "Íåäîïóñòèìûé ôëàã â %s íà ñòðîêå %d: %s"
+
+#, c-format
+msgid "%s value differs from what is used in another .aff file"
+msgstr "%s èìååò äðóãîå çíà÷åíèå, ÷åì â ôàéëå .aff"
+
+#, c-format
+msgid "Reading dictionary file %s ..."
+msgstr "×òåíèå ôàéëà ñëîâàðÿ %s ..."
+
+#, c-format
+msgid "E760: No word count in %s"
+msgstr "E760: Êîëè÷åñòâî ñëîâ íå óêàçàíî â %s"
+
+#, c-format
+msgid "line %6d, word %6d - %s"
+msgstr "ñòðîêà %6d, ñëîâî %6d — %s"
+
+#, c-format
+msgid "Duplicate word in %s line %d: %s"
+msgstr "Ïîâòîð ñëîâà â %s íà ñòðîêå %d: %s "
+
+#, c-format
+msgid "First duplicate word in %s line %d: %s"
+msgstr "Ïåðâûé ïîâòîð ñëîâà â %s íà ñòðîêå %d: %s"
+
+#, c-format
+msgid "%d duplicate word(s) in %s"
+msgstr "%d ïîâòîðÿþùèõñÿ ñëîâ â %s"
+
+#, c-format
+msgid "Ignored %d word(s) with non-ASCII characters in %s"
+msgstr "Ïðîïóùåíî %d ñëîâ ñ íå ASCII ñèìâîëàìè â %s"
+
+#, c-format
+msgid "Reading word file %s ..."
+msgstr "×òåíèå ôàéëà ñëîâ %s ..."
+
+#, c-format
+msgid "Duplicate /encoding= line ignored in %s line %d: %s"
+msgstr "Ïðîèãíîðèðîâàíà ïîâòîðÿþùàÿñÿ ñòðîêà /encoding= â %s, ñòðîêà %d: %s"
+
+#, c-format
+msgid "/encoding= line after word ignored in %s line %d: %s"
+msgstr "Ïðîèãíîðèðîâàíà ñòðîêà /encoding= ïîñëå ñëîâà â %s, ñòðîêà %d: %s"
+
+#, c-format
+msgid "Duplicate /regions= line ignored in %s line %d: %s"
+msgstr "Ïðîïóñêàåòñÿ ïîâòîð ñòðîêè /regions= â %s, ñòðîêà %d: %s"
+
+#, c-format
+msgid "Too many regions in %s line %d: %s"
+msgstr "Ñëèøêîì ìíîãî ðåãèîíîâ â %s, ñòðîêà %d: %s"
+
+#, c-format
+msgid "/ line ignored in %s line %d: %s"
+msgstr "/ ñòðîêà ïðîïóñêàåòñÿ â %s, ñòðîêà %d: %s"
+
+#, c-format
+msgid "Invalid region nr in %s line %d: %s"
+msgstr "Íåäîïóñòèìûé íîìåð ðåãèîíà â %s, ñòðîêà %d: %s"
+
+#, c-format
+msgid "Unrecognized flags in %s line %d: %s"
+msgstr "Íåðàñïîçíàííûå ôëàãè â %s, ñòðîêà %d: %s"
+
+#, c-format
+msgid "Ignored %d words with non-ASCII characters"
+msgstr "Ïðîïóùåíî %d ñëîâ ñ íå ASCII ñèìâîëàìè"
+
+msgid "E845: Insufficient memory, word list will be incomplete"
+msgstr "E845: Íåäîñòàòî÷íî îïåðàòèâíîé ïàìÿòè, ñïèñîê ñëîâ áóäåò íå ïîëîí"
+
+#, c-format
+msgid "Compressed %d of %d nodes; %d (%d%%) remaining"
+msgstr "Ñæàòî %d èç %d óçëîâ; îñòàëîñü %d (%d%%)"
+
+msgid "Reading back spell file..."
+msgstr "×òåíèå çàïèñàííîãî ôàéëà ïðàâîïèñàíèÿ..."
+
+#.
+#. * Go through the trie of good words, soundfold each word and add it to
+#. * the soundfold trie.
+#.
+msgid "Performing soundfolding..."
+msgstr "Âûïîëíåíèå çâóêîâîé ñâ¸ðòêè..."
+
+#, c-format
+msgid "Number of words after soundfolding: %ld"
+msgstr "Êîëè÷åñòâî ñëîâ ïîñëå çâóêîâîé ñâ¸ðòêè: %ld"
+
+#, c-format
+msgid "Total number of words: %d"
+msgstr "Îáùåå êîëè÷åñòâî ñëîâ: %d"
+
+#, c-format
+msgid "Writing suggestion file %s ..."
+msgstr "Çàïèñü ôàéëà ïðåäëîæåíèÿ èñïðàâëåíèé ïðàâîïèñàíèÿ %s"
+
+#, c-format
+msgid "Estimated runtime memory use: %d bytes"
+msgstr "Îöåíêà èñïîëüçîâàíèÿ ïàìÿòè ïðè âûïîëíåíèè: %d áàéò"
+
+msgid "E751: Output file name must not have region name"
+msgstr "E751: Èìÿ âûõîäíîãî ôàéëà íå äîëæíî ñîäåðæàòü íàçâàíèÿ ðåãèîíà"
+
+msgid "E754: Only up to 8 regions supported"
+msgstr "E754: Ïîääåðæèâàåòñÿ íå áîëåå 8-ìè ðåãèîíîâ"
+
+#, c-format
+msgid "E755: Invalid region in %s"
+msgstr "E755: Íåäîïóñòèìûé ðåãèîí â %s"
+
+msgid "Warning: both compounding and NOBREAK specified"
+msgstr "Ïðåäóïðåæäåíèå: îáà ñîñòàâíûå è óêàçàíî NOBREAK"
+
+#, c-format
+msgid "Writing spell file %s ..."
+msgstr "Çàïèñü ôàéëà ïðàâîïèñàíèÿ %s ..."
+
+msgid "Done!"
+msgstr "Çàâåðøåíî!"
+
+#, c-format
+msgid "E765: 'spellfile' does not have %ld entries"
+msgstr "E765: 'spellfile' íå ñîäåðæèò %ld ýëåìåíòîâ"
+
+#, c-format
+msgid "Word removed from %s"
+msgstr "Ñëîâî óäàëåíî èç %s"
+
+#, c-format
+msgid "Word added to %s"
+msgstr "Ñëîâî äîáàâëåíî â %s"
+
+msgid "E763: Word characters differ between spell files"
+msgstr "E763: Ñèìâîëû ñëîâ îòëè÷àþòñÿ â ôàéëàõ ïðàâîïèñàíèÿ"
+
+msgid "Sorry, no suggestions"
+msgstr "Èçâèíèòå, íåò ïðåäïîëîæåíèé"
+
+#, c-format
+msgid "Sorry, only %ld suggestions"
+msgstr "Èçâèíèòå, òîëüêî %ld ïðåäïîëîæåíèé"
+
+#. for when 'cmdheight' > 1
+#. avoid more prompt
+#, c-format
+msgid "Change \"%.*s\" to:"
+msgstr "Çàìåíèòü \"%.*s\" íà:"
+
+#, c-format
+msgid " < \"%.*s\""
+msgstr " < \"%.*s\""
+
+msgid "E752: No previous spell replacement"
+msgstr "E752: Íåò ïðåäûäóùåé çàìåíû ïðàâîïèñàíèÿ"
+
+#, c-format
+msgid "E753: Not found: %s"
+msgstr "E753: Íå íàéäåíî: %s"
+
+#, c-format
+msgid "E778: This does not look like a .sug file: %s"
+msgstr "E778: Ýòî íå ïîõîæå íà ôàéë .sug: %s"
+
+#, c-format
+msgid "E779: Old .sug file, needs to be updated: %s"
+msgstr "E779: Ñòàðûé ôàéë .sug, òðåáóåò îáíîâëåíèÿ: %s"
+
+#, c-format
+msgid "E780: .sug file is for newer version of Vim: %s"
+msgstr "E780: Ôàéë .sug äëÿ áîëåå íîâîé âåðñèè Vim: %s"
+
+#, c-format
+msgid "E781: .sug file doesn't match .spl file: %s"
+msgstr "E781: Ôàéë .sug íå ñîîòâåòñòâóåò ôàéëó .spl: %s"
+
+#, c-format
+msgid "E782: error while reading .sug file: %s"
+msgstr "E782: Îøèáêà ïðè ÷òåíèè ôàéëà .sug: %s"
+
+#. This should have been checked when generating the .spl
+#. * file.
+msgid "E783: duplicate char in MAP entry"
+msgstr "E783: Ïîâòîðÿþùèéñÿ ñèìâîë â ýëåìåíòå MAP"
+
 #, c-format
 msgid "E390: Illegal argument: %s"
-msgstr "E390: Íåäîïóñòèìûé àðãóìåíò: %s"
+msgstr "E390: Íåäîïóñòèìûé ïàðàìåòð: %s"
 
 #, c-format
 msgid "E391: No such syntax cluster: %s"
@@ -4270,29 +5427,39 @@
 msgid " line breaks"
 msgstr " ïåðåíîñîâ ñòðîê"
 
+msgid "E395: contains argument not accepted here"
+msgstr "E395: Çäåñü íåëüçÿ èñïîëüçîâàòü ïàðàìåòð contains"
+
+msgid "E844: invalid cchar value"
+msgstr "E844: Íåäîïóñòèìîå çíà÷åíèå cchar"
+
 msgid "E393: group[t]here not accepted here"
-msgstr "E393: çäåñü íåëüçÿ èñïîëüçîâàòü group[t]here"
+msgstr "E393: Çäåñü íåëüçÿ èñïîëüçîâàòü group[t]here"
 
 #, c-format
 msgid "E394: Didn't find region item for %s"
 msgstr "E394: Ýëåìåíò îáëàñòè äëÿ %s íå íàéäåí"
 
-msgid "E395: contains argument not accepted here"
-msgstr "E395: çäåñü íåëüçÿ èñïîëüçîâàòü àðãóìåíò contains"
-
-msgid "E396: containedin argument not accepted here"
-msgstr "E396: çäåñü íåëüçÿ èñïîëüçîâàòü àðãóìåíò containedin"
-
 msgid "E397: Filename required"
 msgstr "E397: Òðåáóåòñÿ óêàçàòü èìÿ ôàéëà"
 
+msgid "E847: Too many syntax includes"
+msgstr "E847: Ñëèøêîì ìíîãî ñèíòàêñè÷åñêèõ âêëþ÷åíèé"
+
+#, c-format
+msgid "E789: Missing ']': %s"
+msgstr "E789: Ïðîïóùåíî ']': %s"
+
 #, c-format
 msgid "E398: Missing '=': %s"
 msgstr "E398: Ïðîïóùåíî '=': %s"
 
 #, c-format
 msgid "E399: Not enough arguments: syntax region %s"
-msgstr "E399: Íå õâàòàåò àðãóìåíòîâ: ñèíòàêñè÷åñêèé ðåãèîí %s"
+msgstr "E399: Íå õâàòàåò ïàðàìåòðîâ: ñèíòàêñè÷åñêèé ðåãèîí %s"
+
+msgid "E848: Too many syntax clusters"
+msgstr "E848: Ñëèøêîì ìíîãî ñèíòàêñè÷åñêèõ êëàñòåðîâ"
 
 msgid "E400: No cluster specified"
 msgstr "E400: Êëàñòåð íå óêàçàí"
@@ -4307,11 +5474,11 @@
 
 msgid "E403: syntax sync: line continuations pattern specified twice"
 msgstr ""
-"E403: ñèíõðîíèçàöèÿ ñèíòàêñèñà: øàáëîí ïðîäîëæåíèé ñòðîêè óêàçàí äâàæäû"
+"E403: Ñèíõðîíèçàöèÿ ñèíòàêñèñà: øàáëîí ïðîäîëæåíèé ñòðîêè óêàçàí äâàæäû"
 
 #, c-format
 msgid "E404: Illegal arguments: %s"
-msgstr "E404: Íåäîïóñòèìûå àðãóìåíòû: %s"
+msgstr "E404: Íåäîïóñòèìûå ïàðàìåòðû: %s"
 
 #, c-format
 msgid "E405: Missing equal sign: %s"
@@ -4319,7 +5486,7 @@
 
 #, c-format
 msgid "E406: Empty argument: %s"
-msgstr "E406: Ïóñòîé àðãóìåíò: %s"
+msgstr "E406: Ïóñòîé ïàðàìåòð: %s"
 
 #, c-format
 msgid "E407: %s not allowed here"
@@ -4337,32 +5504,35 @@
 msgid "E410: Invalid :syntax subcommand: %s"
 msgstr "E410: Íåïðàâèëüíàÿ ïîäêîìàíäà :syntax: %s"
 
+msgid "E679: recursive loop loading syncolor.vim"
+msgstr "E679: Ðåêóðñèâíàÿ ïåòëÿ ïðè çàãðóçêå syncolor.vim"
+
 #, c-format
 msgid "E411: highlight group not found: %s"
-msgstr "E411: ãðóïïà ïîäñâåòêè ñèíòàêñèñà %s íå íàéäåíà"
+msgstr "E411: Ãðóïïà ïîäñâåòêè ñèíòàêñèñà %s íå íàéäåíà"
 
 #, c-format
 msgid "E412: Not enough arguments: \":highlight link %s\""
-msgstr "E412: Íå õâàòàåò àðãóìåíòîâ: \":highlight link %s\""
+msgstr "E412: Íå õâàòàåò ïàðàìåòðîâ: \":highlight link %s\""
 
 #, c-format
 msgid "E413: Too many arguments: \":highlight link %s\""
-msgstr "E413: Ñëèøêîì ìíîãî àðãóìåíòîâ: \":highlight link %s\""
+msgstr "E413: Ñëèøêîì ìíîãî ïàðàìåòðîâ: \":highlight link %s\""
 
 msgid "E414: group has settings, highlight link ignored"
-msgstr "E414: ó ãðóïïû åñòü ñîáñòâåííûå íàñòðîéêè, ññûëêà èãíîðèðóåòñÿ"
+msgstr "E414: Ó ãðóïïû åñòü íàñòðîéêè, ïðîïóñêàåòñÿ highlight link"
 
 #, c-format
 msgid "E415: unexpected equal sign: %s"
-msgstr "E415: íåîæèäàííûé çíàê ðàâåíñòâà: %s"
+msgstr "E415: Íåîæèäàííûé çíàê ðàâåíñòâà: %s"
 
 #, c-format
 msgid "E416: missing equal sign: %s"
-msgstr "E416: ïðîïóùåí çíàê ðàâåíñòâà: %s"
+msgstr "E416: Ïðîïóùåí çíàê ðàâåíñòâà: %s"
 
 #, c-format
 msgid "E417: missing argument: %s"
-msgstr "E417: ïðîïóùåí àðãóìåíò: %s"
+msgstr "E417: Ïðîïóùåí ïàðàìåòð: %s"
 
 #, c-format
 msgid "E418: Illegal value: %s"
@@ -4380,11 +5550,11 @@
 
 #, c-format
 msgid "E422: terminal code too long: %s"
-msgstr "E422: ñëèøêîì äëèííûé êîä òåðìèíàëà: %s"
+msgstr "E422: Ñëèøêîì äëèííûé êîä òåðìèíàëà: %s"
 
 #, c-format
 msgid "E423: Illegal argument: %s"
-msgstr "E423: Íåäîïóñòèìûé àðãóìåíò: %s"
+msgstr "E423: Íåäîïóñòèìûé ïàðàìåòð: %s"
 
 msgid "E424: Too many different highlighting attributes in use"
 msgstr "E424: Èñïîëüçóåòñÿ ñëèøêîì ìíîãî ðàçíûõ àòðèáóòîâ ïîäñâåòêè ñèíòàêñèñà"
@@ -4392,16 +5562,17 @@
 msgid "E669: Unprintable character in group name"
 msgstr "E669: Íåïå÷àòíûé ñèìâîë â èìåíè ãðóïïû"
 
-#. This is an error, but since there previously was no check only
-#. * give a warning.
 msgid "W18: Invalid character in group name"
 msgstr "W18: Íåäîïóñòèìûé ñèìâîë â èìåíè ãðóïïû"
 
+msgid "E849: Too many highlight and syntax groups"
+msgstr "E849: Ñëèøêîì ìíîãî ãðóïï ïîäñâåòêè è ñèíòàêñèñà"
+
 msgid "E555: at bottom of tag stack"
-msgstr "E555: âíèçó ñòåêà ìåòîê"
+msgstr "E555: Âíèçó ñòåêà ìåòîê"
 
 msgid "E556: at top of tag stack"
-msgstr "E556: íàâåðõó ñòåêà ìåòîê"
+msgstr "E556: Íàâåðõó ñòåêà ìåòîê"
 
 msgid "E425: Cannot go before first matching tag"
 msgstr "E425: Íåâîçìîæíî ïåðåéòè â ïîçèöèþ äî ïåðâîé ñîâïàäàþùåé ìåòêè"
@@ -4416,13 +5587,6 @@
 msgid "file\n"
 msgstr "ôàéë\n"
 
-#.
-#. * Ask to select a tag from the list.
-#. * When using ":silent" assume that <CR> was entered.
-#.
-msgid "Enter nr of choice (<CR> to abort): "
-msgstr "Âûáåðèòå íóæíûé íîìåð (<CR> äëÿ îòêàçà):"
-
 msgid "E427: There is only one matching tag"
 msgstr "E427: Åñòü òîëüêî îäíà ñîâïàäàþùàÿ ìåòêà"
 
@@ -4464,6 +5628,9 @@
 msgid "E430: Tag file path truncated for %s\n"
 msgstr "E430: Ïóòü ê ôàéëó ìåòîê %s îáðåçàí\n"
 
+msgid "Ignoring long line in tags file"
+msgstr "Èãíîðèðîâàíèå äëèííîé ñòðîêè â ôàéëå tags"
+
 #, c-format
 msgid "E431: Format error in tags file \"%s\""
 msgstr "E431: Îøèáêà ôîðìàòà â ôàéëå ìåòîê \"%s\""
@@ -4486,6 +5653,10 @@
 msgid "E435: Couldn't find tag, just guessing!"
 msgstr "E435: Ìåòêà íå íàéäåíà, ïûòàåìñÿ óãàäàòü!"
 
+#, c-format
+msgid "Duplicate field name: %s"
+msgstr "Ïîâòîðÿþùååñÿ èìÿ ïîëÿ: %s"
+
 msgid "' not known. Available builtin terminals are:"
 msgstr "' íå èçâåñòåí. Äîñòóïíû âñòðîåííûå òåðìèíàëû:"
 
@@ -4506,7 +5677,7 @@
 msgstr "E436: Â termcap íåò çàïèñè \"%s\""
 
 msgid "E437: terminal capability \"cm\" required"
-msgstr "E437: òðåáóåòñÿ ñïîñîáíîñòü òåðìèíàëà \"cm\""
+msgstr "E437: Òðåáóåòñÿ ñïîñîáíîñòü òåðìèíàëà \"cm\""
 
 #. Highlight title
 msgid ""
@@ -4522,25 +5693,147 @@
 msgid "Vim: Error reading input, exiting...\n"
 msgstr "Vim: Îøèáêà ÷òåíèÿ ââîäà, âûõîä...\n"
 
+msgid "Used CUT_BUFFER0 instead of empty selection"
+msgstr "Âìåñòî ïóñòîãî âûäåëåíèÿ èñïîëüçóåòñÿ CUT_BUFFER0"
+
+#. This happens when the FileChangedRO autocommand changes the
+#. * file in a way it becomes shorter.
+msgid "E834: Line count changed unexpectedly"
+msgstr "E834: Íåîæèäàííî èçìåíèëñÿ ñ÷¸ò÷èê ñòðîê"
+
 #. must display the prompt
 msgid "No undo possible; continue anyway"
 msgstr "Îòìåíà íåâîçìîæíà; ïðîäîëæàòü âûïîëíåíèå"
 
+#, c-format
+msgid "E828: Cannot open undo file for writing: %s"
+msgstr "E828: Íåâîçìîæíî îòêðûòü ôàéë îòìåí äëÿ çàïèñè: %s"
+
+#, c-format
+msgid "E825: Corrupted undo file (%s): %s"
+msgstr "E825: Ôàéë îòìåí ïîâðåæä¸í (%s): %s"
+
+msgid "Cannot write undo file in any directory in 'undodir'"
+msgstr "Íåâîçìîæíî çàïèñàòü ôàéë îòìåí â êàêîì-ëèáî êàòàëîãå èç 'undodir'"
+
+#, c-format
+msgid "Will not overwrite with undo file, cannot read: %s"
+msgstr "Ôàéë îòìåí íå ïåðåçàïèñàí, íåâîçìîæíî ïðî÷èòàòü: %s"
+
+#, c-format
+msgid "Will not overwrite, this is not an undo file: %s"
+msgstr "Ïåðåçàïèñü íå âûïîëíåíà, ýòî íå ôàéë îòìåí: %s"
+
+msgid "Skipping undo file write, nothing to undo"
+msgstr "Ïðîïóùåíà çàïèñü ôàéëà îòìåí, íå÷åãî îòìåíÿòü"
+
+#, c-format
+msgid "Writing undo file: %s"
+msgstr "Çàïèñü ôàéëà îòìåí: %s"
+
+#, c-format
+msgid "E829: write error in undo file: %s"
+msgstr "E829: Îøèáêà ïðè çàïèñè ôàéëà îòìåí: %s"
+
+#, c-format
+msgid "Not reading undo file, owner differs: %s"
+msgstr "Ôàéë îòìåí íå ïðî÷èòàí, äðóãîé âëàäåëåö: %s"
+
+#, c-format
+msgid "Reading undo file: %s"
+msgstr "×òåíèå ôàéëà îòìåí: %s"
+
+#, c-format
+msgid "E822: Cannot open undo file for reading: %s"
+msgstr "E822: Íåâîçìîæíî îòêðûòü ôàéë îòìåí äëÿ ÷òåíèÿ: %s"
+
+#, c-format
+msgid "E823: Not an undo file: %s"
+msgstr "E823: Ýòî íå ôàéë îòìåí: %s"
+
+#, c-format
+msgid "E832: Non-encrypted file has encrypted undo file: %s"
+msgstr "E832: Íå çàøèôðîâàííûé ôàéë èìååò çàøèôðîâàííûé ôàéë îòìåí: %s"
+
+#, c-format
+msgid "E826: Undo file decryption failed: %s"
+msgstr "E826: Íå óäàëîñü äåøèôðîâàòü ôàéë îòìåí: %s"
+
+#, c-format
+msgid "E827: Undo file is encrypted: %s"
+msgstr "E827: Ôàéë îòìåí çàøèôðîâàí: %s"
+
+#, c-format
+msgid "E824: Incompatible undo file: %s"
+msgstr "E824: Íåñîâìåñòèìûé ôàéë îòìåí: %s"
+
+msgid "File contents changed, cannot use undo info"
+msgstr "Èçìåíèëîñü ñîäåðæèìîå ôàéëà, íåâîçìîæíî èñïîëüçîâàòü èíôîðìàöèþ îòìåí"
+
+#, c-format
+msgid "Finished reading undo file %s"
+msgstr "Çàâåðøåíî ÷òåíèå ôàéëà îòìåí %s"
+
+msgid "Already at oldest change"
+msgstr "Óæå íà ñàìîì ïåðâîì èçìåíåíèè"
+
+msgid "Already at newest change"
+msgstr "Óæå íà ñàìîì ïîñëåäíåì èçìåíåíèè"
+
+#, c-format
+msgid "E830: Undo number %ld not found"
+msgstr "E830: Íå íàéäåíà îòìåíà íîìåð %ld"
+
 msgid "E438: u_undo: line numbers wrong"
 msgstr "E438: u_undo: íåïðàâèëüíûå íîìåðà ñòðîê"
 
-msgid "1 change"
-msgstr "Åäèíñòâåííîå èçìåíåíèå"
+msgid "more line"
+msgstr "ñòð. äîáàâëåíà"
+
+msgid "more lines"
+msgstr "ñòð. äîáàâëåíî"
+
+msgid "line less"
+msgstr "ñòð. óäàëåíà"
+
+msgid "fewer lines"
+msgstr "ñòð. óäàëåíî"
+
+msgid "change"
+msgstr "èçì."
+
+msgid "changes"
+msgstr "èçì."
 
 #, c-format
-msgid "%ld changes"
-msgstr "Èçìåíåíèé: %ld"
+msgid "%ld %s; %s #%ld  %s"
+msgstr "%ld %s; %s #%ld  %s"
+
+msgid "before"
+msgstr "ïåðåä"
+
+msgid "after"
+msgstr "ïîñëå"
+
+msgid "Nothing to undo"
+msgstr "Íå÷åãî îòìåíÿòü"
+
+# Çàãîëîâîê òàáëèöû :undolist
+msgid "number changes  when               saved"
+msgstr " íîìåð  èçìåí.  êîãäà              ñîõðàíåíî"
+
+#, c-format
+msgid "%ld seconds ago"
+msgstr "%ld ñ íàçàä"
+
+msgid "E790: undojoin is not allowed after undo"
+msgstr "E790: Îáúåäèíåíèå îòìåí íå äîïóñêàåòñÿ ïîñëå îòìåíû"
 
 msgid "E439: undo list corrupt"
 msgstr "E439: Ïîâðåæä¸í ñïèñîê îòìåíû"
 
 msgid "E440: undo line missing"
-msgstr "E440: ïîòåðÿíà ñòðîêà îòìåíû"
+msgstr "E440: Ïîòåðÿíà ñòðîêà îòìåíû"
 
 #. Only MS VC 4.1 and earlier can do Win32s
 msgid ""
@@ -4552,19 +5845,33 @@
 
 msgid ""
 "\n"
+"MS-Windows 64-bit GUI version"
+msgstr ""
+"\n"
+"Âåðñèÿ ñ ãðàôè÷åñêèì èíòåðôåéñîì äëÿ MS-Windows 64 áèò"
+
+msgid ""
+"\n"
 "MS-Windows 32-bit GUI version"
 msgstr ""
 "\n"
 "Âåðñèÿ ñ ãðàôè÷åñêèì èíòåðôåéñîì äëÿ MS-Windows 32 áèò"
 
 msgid " in Win32s mode"
-msgstr " â ðåæèìå Win32s"
+msgstr " â ðåæèìå Win32"
 
 msgid " with OLE support"
 msgstr " ñ ïîääåðæêîé OLE"
 
 msgid ""
 "\n"
+"MS-Windows 64-bit console version"
+msgstr ""
+"\n"
+"Êîíñîëüíàÿ âåðñèÿ äëÿ MS-Windows 64 áèò"
+
+msgid ""
+"\n"
 "MS-Windows 32-bit console version"
 msgstr ""
 "\n"
@@ -4614,10 +5921,10 @@
 
 msgid ""
 "\n"
-"RISC OS version"
+"OpenVMS version"
 msgstr ""
 "\n"
-"Âåðñèÿ äëÿ RISC OS"
+"Âåðñèÿ äëÿ OpenVMS"
 
 msgid ""
 "\n"
@@ -4626,6 +5933,13 @@
 "\n"
 "Çàïëàòêè: "
 
+msgid ""
+"\n"
+"Extra patches: "
+msgstr ""
+"\n"
+"Äîïîëíèòåëüíûå çàïëàòêè: "
+
 msgid "Modified by "
 msgstr "Ñ èçìåíåíèÿìè, âíåñ¸ííûìè "
 
@@ -4680,15 +5994,9 @@
 msgid "with GTK2-GNOME GUI."
 msgstr "ñ ãðàôè÷åñêèì èíòåðôåéñîì GTK2-GNOME."
 
-msgid "with GTK-GNOME GUI."
-msgstr "ñ ãðàôè÷åñêèì èíòåðôåéñîì GTK-GNOME."
-
 msgid "with GTK2 GUI."
 msgstr "ñ ãðàôè÷åñêèì èíòåðôåéñîì GTK2."
 
-msgid "with GTK GUI."
-msgstr "ñ ãðàôè÷åñêèì èíòåðôåéñîì GTK."
-
 msgid "with X11-Motif GUI."
 msgstr "ñ ãðàôè÷åñêèì èíòåðôåéñîì X11-Motif."
 
@@ -4698,9 +6006,6 @@
 msgid "with X11-Athena GUI."
 msgstr "ñ ãðàôè÷åñêèì èíòåðôåéñîì X11-Athena."
 
-msgid "with BeOS GUI."
-msgstr "ñ ãðàôè÷åñêèì èíòåðôåéñîì BeOS."
-
 msgid "with Photon GUI."
 msgstr "ñ ãðàôè÷åñêèì èíòåðôåéñîì Photon."
 
@@ -4771,7 +6076,7 @@
 msgstr "  ÎÒËÀÄÎ×ÍÀß ÑÁÎÐÊÀ"
 
 msgid "VIM - Vi IMproved"
-msgstr "VIM ::: Vi IMproved (Óëó÷øåííûé Vi) ::: Ðóññêàÿ âåðñèÿ"
+msgstr "VIM — Vi IMproved (óëó÷øåííûé Vi)"
 
 msgid "version "
 msgstr "âåðñèÿ "
@@ -4810,16 +6115,16 @@
 msgstr "ìåíþ Ñïðàâêà->Ñèðîòû             äëÿ ïîëó÷åíèÿ èíôîðìàöèè     "
 
 msgid "Running modeless, typed text is inserted"
-msgstr "Áåçðåæèìíàÿ ðàáîòû, âñòàâêà ââåä¸ííîãî òåêñòà"
+msgstr "Áåçðåæèìíàÿ ðàáîòà, âñòàâêà ââåä¸ííîãî òåêñòà"
 
 msgid "menu  Edit->Global Settings->Toggle Insert Mode  "
-msgstr "ìåíþ Ïðàâêà->Îáùèå Íàñòðîéêè->Ðåæèì Âñòàâêè                     "
+msgstr "ìåíþ Ïðàâêà->Ãëîáàëüíûå íàñòðîéêè->Ðåæèì Âñòàâêè                     "
 
 msgid "                              for two modes      "
 msgstr "                                 äëÿ äâóõ ðåæèìîâ               "
 
 msgid "menu  Edit->Global Settings->Toggle Vi Compatible"
-msgstr "ìåíþ Ïðàâêà->Îáùèå Íàñòðîéêè->Ñîâìåñòèìîñòü ñ Vi                "
+msgstr "ìåíþ Ïðàâêà->Ãëîáàëüíûå íàñòðîéêè->Ñîâìåñòèìîñòü ñ Vi                "
 
 msgid "                              for Vim defaults   "
 msgstr "                                 äëÿ ïåðåõîäà â ðåæèì Vim       "
@@ -4845,6 +6150,9 @@
 msgid "type  :help windows95<Enter>  for info on this"
 msgstr "íàáåðèòå :help windows95<Enter>  äëÿ ïîëó÷åíèÿ èíôîðìàöèè     "
 
+msgid "Already only one window"
+msgstr "Íà ýêðàíå âñåãî îäíî îêíî"
+
 msgid "E441: There is no preview window"
 msgstr "E441: Îêíî ïðåäïðîñìîòðà îòñóòñòâóåò"
 
@@ -4857,8 +6165,11 @@
 msgid "E444: Cannot close last window"
 msgstr "E444: Íåëüçÿ çàêðûòü ïîñëåäíåå îêíî"
 
-msgid "Already only one window"
-msgstr "Íà ýêðàíå âñåãî îäíî îêíî"
+msgid "E813: Cannot close autocmd window"
+msgstr "E813: Íåëüçÿ çàêðûòü îêíî àâòîêîìàíä"
+
+msgid "E814: Cannot close window, only autocmd window would remain"
+msgstr "E814: Íåëüçÿ çàêðûòü îêíî, îñòàíåòñÿ òîëüêî îêíî àâòîêîìàíä"
 
 msgid "E445: Other window contains changes"
 msgstr "E445:  äðóãîì îêíå åñòü íåñîõðàí¸ííûå èçìåíåíèÿ"
@@ -4896,7 +6207,7 @@
 
 #. Now concatenate
 msgid "Edit with existing Vim - "
-msgstr "Ðåäàêòèðîâàòü â çàïóùåííîì Vim - "
+msgstr "Ðåäàêòèðîâàòü â çàïóùåííîì Vim — "
 
 msgid "Edits the selected file(s) with Vim"
 msgstr "Ðåäàêòèðîâàòü âûäåëåííûå ôàéëû ñ ïîìîùüþ Vim"
@@ -4943,11 +6254,17 @@
 msgid "E170: Missing :endwhile"
 msgstr "E170: Îòñóòñòâóåò êîìàíäà :endwhile"
 
+msgid "E170: Missing :endfor"
+msgstr "E170: Îòñóòñòâóåò êîìàíäà :endfor"
+
 msgid "E588: :endwhile without :while"
 msgstr "E588: Êîìàíäà :endwhile áåç ïàðíîé êîìàíäû :while"
 
+msgid "E588: :endfor without :for"
+msgstr "E588: :endfor áåç :for"
+
 msgid "E13: File exists (add ! to override)"
-msgstr "E13: Ôàéë ñóùåñòâóåò (äëÿ ïåðåçàïèñè äîáàâüòå !)"
+msgstr "E13: Ôàéë ñóùåñòâóåò (äîáàâüòå !, ÷òîáû ïåðåçàïèñàòü)"
 
 msgid "E472: Command failed"
 msgstr "E472: Íå óäàëîñü âûïîëíèòü êîìàíäó"
@@ -4962,7 +6279,7 @@
 
 #, c-format
 msgid "E236: Font \"%s\" is not fixed-width"
-msgstr "E236: Øðèôò \"%s\" íå ÿâëÿåòñÿ ìîíîøèðèííûì øðèôòîì"
+msgstr "E236: Øðèôò \"%s\" íå ÿâëÿåòñÿ ìîíîøèðèííûì"
 
 msgid "E473: Internal error"
 msgstr "E473: Âíóòðåííÿÿ îøèáêà"
@@ -4974,11 +6291,11 @@
 msgstr "E14: Íåäîïóñòèìûé àäðåñ"
 
 msgid "E474: Invalid argument"
-msgstr "E474: Íåäîïóñòèìûé àðãóìåíò"
+msgstr "E474: Íåäîïóñòèìûé ïàðàìåòð"
 
 #, c-format
 msgid "E475: Invalid argument: %s"
-msgstr "E475: Íåäîïóñòèìûé àðãóìåíò: %s"
+msgstr "E475: Íåäîïóñòèìûé ïàðàìåòð: %s"
 
 #, c-format
 msgid "E15: Invalid expression: %s"
@@ -4994,9 +6311,6 @@
 msgid "E17: \"%s\" is a directory"
 msgstr "E17: \"%s\" ÿâëÿåòñÿ êàòàëîãîì"
 
-msgid "E18: Unexpected characters before '='"
-msgstr "E18: Ïåðåä '=' îáíàðóæåíû íåîæèäàííûå ñèìâîëû"
-
 #, c-format
 msgid "E364: Library call failed for \"%s()\""
 msgstr "E364: Íåóäà÷íûé âûçîâ ôóíêöèè \"%s()\" èç áèáëèîòåêè"
@@ -5080,7 +6394,7 @@
 
 #, c-format
 msgid "E247: no registered server named \"%s\""
-msgstr "E247: ñåðâåð \"%s\" íå çàðåãèñòðèðîâàí"
+msgstr "E247: Ñåðâåð \"%s\" íå çàðåãèñòðèðîâàí"
 
 #, c-format
 msgid "E482: Can't create file %s"
@@ -5101,7 +6415,7 @@
 msgstr "E37: Èçìåíåíèÿ íå ñîõðàíåíû (äîáàâüòå !, ÷òîáû îáîéòè ïðîâåðêó)"
 
 msgid "E38: Null argument"
-msgstr "E38: Íóëåâîé àðãóìåíò"
+msgstr "E38: Íóëåâîé ïàðàìåòð"
 
 msgid "E39: Number expected"
 msgstr "E39: Òðåáóåòñÿ ÷èñëî"
@@ -5111,7 +6425,7 @@
 msgstr "E40: Íå óäàëîñü îòêðûòü ôàéë îøèáîê %s"
 
 msgid "E233: cannot open display"
-msgstr "E233: íåâîçìîæíî îòêðûòü äèñïëåé"
+msgstr "E233: Íåâîçìîæíî îòêðûòü äèñïëåé"
 
 msgid "E41: Out of memory!"
 msgstr "E41: Íå õâàòàåò ïàìÿòè!"
@@ -5130,7 +6444,10 @@
 msgstr "E459: Âîçâðàò â ïðåäûäóùèé êàòàëîã íåâîçìîæåí"
 
 msgid "E42: No Errors"
-msgstr "E42: Îøèáîê íåò"
+msgstr "E42: Íåò îøèáîê"
+
+msgid "E776: No location list"
+msgstr "E776: Íåò ñïèñêà ðàñïîëîæåíèé"
 
 msgid "E43: Damaged match string"
 msgstr "E43: Ïîâðåæäåíà ñòðîêà ñîîòâåòñòâèÿ"
@@ -5139,12 +6456,15 @@
 msgstr "E44: Ïðîãðàììà îáðàáîòêè ðåãóëÿðíûõ âûðàæåíèé ïîâðåæäåíà"
 
 msgid "E45: 'readonly' option is set (add ! to override)"
-msgstr ""
-"E45: Âêëþ÷åíà îïöèÿ 'readonly' (äîáàâüòå !, ÷òîáû íå îáðàùàòü âíèìàíèÿ)"
+msgstr "E45: Âêëþ÷åíà îïöèÿ 'readonly' (äîáàâüòå !, ÷òîáû îáîéòè ïðîâåðêó)"
 
 #, c-format
-msgid "E46: Cannot set read-only variable \"%s\""
-msgstr "E46: Íåâîçìîæíî èçìåíèòü äîñòóïíóþ òîëüêî äëÿ ÷òåíèÿ ïåðåìåííóþ \"%s\""
+msgid "E46: Cannot change read-only variable \"%s\""
+msgstr "E46: Íåâîçìîæíî èçìåíèòü ïåðåìåííóþ òîëüêî äëÿ ÷òåíèÿ \"%s\""
+
+#, c-format
+msgid "E794: Cannot set variable in the sandbox: \"%s\""
+msgstr "E794: Íåâîçìîæíî èçìåíèòü ïåðåìåííóþ â ïåñî÷íèöå: \"%s\""
 
 msgid "E47: Error while reading errorfile"
 msgstr "E47: Îøèáêà ïðè ÷òåíèè ôàéëà îøèáîê"
@@ -5217,3 +6537,146 @@
 msgid "E463: Region is guarded, cannot modify"
 msgstr "E463: Íåâîçìîæíî èçìåíèòü îõðàíÿåìóþ îáëàñòü"
 
+msgid "E744: NetBeans does not allow changes in read-only files"
+msgstr "E744: NetBeans íå äîïóñêàåò èçìåíåíèé â ôàéëàõ òîëüêî äëÿ ÷òåíèÿ"
+
+#, c-format
+msgid "E685: Internal error: %s"
+msgstr "E685: Âíóòðåííÿÿ îøèáêà: %s"
+
+msgid "E363: pattern uses more memory than 'maxmempattern'"
+msgstr "E363: Øàáëîí èñïîëüçóåò áîëüøå ïàìÿòè ÷åì 'maxmempattern'"
+
+msgid "E749: empty buffer"
+msgstr "E749: Ïóñòîé áóôåð"
+
+msgid "E682: Invalid search pattern or delimiter"
+msgstr "E682: Íåïðàâèëüíàÿ ñòðîêà ïîèñêà èëè ðàçäåëèòåëü"
+
+msgid "E139: File is loaded in another buffer"
+msgstr "E139: Ôàéë çàãðóæåí â äðóãîì áóôåðå"
+
+#, c-format
+msgid "E764: Option '%s' is not set"
+msgstr "E764: Îïöèÿ '%s' íå óñòàíîâëåíà"
+
+msgid "E850: Invalid register name"
+msgstr "E850: Íåäîïóñòèìîå èìÿ ðåãèñòðà"
+
+msgid "search hit TOP, continuing at BOTTOM"
+msgstr "Ïîèñê áóäåò ïðîäîëæåí ñ ÊÎÍÖÀ äîêóìåíòà"
+
+msgid "search hit BOTTOM, continuing at TOP"
+msgstr "Ïîèñê áóäåò ïðîäîëæåí ñ ÍÀ×ÀËÀ äîêóìåíòà"
+
+#, c-format
+msgid "Need encryption key for \"%s\""
+msgstr "Òðåáóåòñÿ êëþ÷ øèôðîâàíèÿ äëÿ \"%s\""
+
+msgid "can't delete OutputObject attributes"
+msgstr "íåâîçìîæíî óäàëèòü àòðèáóòû OutputObject"
+
+msgid "softspace must be an integer"
+msgstr "çíà÷åíèå softspace äîëæíî áûòü öåëûì ÷èñëîì"
+
+msgid "invalid attribute"
+msgstr "íåïðàâèëüíûé àòðèáóò"
+
+msgid "writelines() requires list of strings"
+msgstr "writelines() òðåáóåò óêàçàíèÿ ñïèñêà ñòðîê"
+
+msgid "E264: Python: Error initialising I/O objects"
+msgstr "E264: Python: Îøèáêà èíèöèàëèçàöèè îáúåêòîâ I/O"
+
+msgid "no such buffer"
+msgstr "íåò òàêîãî áóôåðà"
+
+msgid "empty keys are not allowed"
+msgstr "ïóñòûå êëþ÷è íå äîïóñòèìû"
+
+msgid "failed to add key to dictionary"
+msgstr "íåâîçìîæíî äîáàâèòü êëþ÷ ê ñëîâàðþ"
+
+msgid "Cannot delete DictionaryObject attributes"
+msgstr "Íåâîçìîæíî óäàëèòü àòðèáóòû DictionaryObject"
+
+msgid "Cannot modify fixed dictionary"
+msgstr "Íåâîçìîæíî èçìåíèòü ôèêñèðîâàííûé ñëîâàðü"
+
+msgid "Only boolean objects are allowed"
+msgstr "Ðàçðåøåíî èñïîëüçîâàòü òîëüêî ëîãè÷åñêèå îáúåêòû"
+
+msgid "Cannot set this attribute"
+msgstr "Íåâîçìîæíî óñòàíîâèòü ýòîò àòðèáóò"
+
+msgid "no such key in dictionary"
+msgstr "íåò òàêîãî êëþ÷à â ñëîâàðå"
+
+msgid "dict is locked"
+msgstr "ñëîâàðü çàáëîêèðîâàí"
+
+msgid "internal error: failed to get vim list item"
+msgstr "âíóòðåííÿÿ îøèáêà: íå óäàëîñü ïîëó÷èòü ýëåìåíò ñïèñêà VIM"
+
+msgid "list is locked"
+msgstr "ñïèñîê çàáëîêèðîâàí"
+
+msgid "Failed to add item to list"
+msgstr "Íåâîçìîæíî äîáàâèòü ýëåìåíò â ñïèñîê"
+
+msgid "internal error: no vim list item"
+msgstr "âíóòðåííÿÿ îøèáêà: íåò ýëåìåíòà ñïèñêà VIM"
+
+msgid "can only assign lists to slice"
+msgstr "íàçíà÷åíèå âûáîðêè âîçìîæíî òîëüêî äëÿ ñïèñêîâ"
+
+msgid "internal error: failed to add item to list"
+msgstr "âíóòðåííÿÿ îøèáêà: íå óäàëîñü äîáàâèòü ýëåìåíò â ñïèñîê"
+
+msgid "can only concatenate with lists"
+msgstr "ìîæíî îáúåäèíèòü òîëüêî ñïèñêè"
+
+msgid "Cannot modify fixed list"
+msgstr "Íåâîçìîæíî èçìåíèòü ôèêñèðîâàííûé ñïèñîê"
+
+msgid "'self' argument must be a dictionary"
+msgstr "ïàðàìåòð 'self' äîëæåí áûòü ñëîâàð¸ì"
+
+msgid "failed to run function"
+msgstr "íåâîçìîæíî âûïîëíèòü ôóíêöèþ"
+
+msgid "attempt to refer to deleted window"
+msgstr "ïîïûòêà ñîñëàòüñÿ íà çàêðûòîå îêíî"
+
+msgid "readonly attribute"
+msgstr "àòðèáóò äîñòóïåí òîëüêî äëÿ ÷òåíèÿ"
+
+msgid "cursor position outside buffer"
+msgstr "ïîçèöèÿ êóðñîðà íàõîäèòñÿ âíå áóôåðà"
+
+#, c-format
+msgid "<window object (deleted) at %p>"
+msgstr "<îáúåêò îêíà (óäàëåí) â %p>"
+
+#, c-format
+msgid "<window object (unknown) at %p>"
+msgstr "<îáúåêò îêíà (íåèçâåñòåí) â %p>"
+
+#, c-format
+msgid "<window %d>"
+msgstr "<îêíî %d>"
+
+msgid "no such window"
+msgstr "íåò òàêîãî îêíà"
+
+msgid "attempt to refer to deleted buffer"
+msgstr "ïîïûòêà ñîñëàòüñÿ íà óíè÷òîæåííûé áóôåð"
+
+msgid "unable to convert to vim structure"
+msgstr "íåâîçìîæíî ïðåîáðàçîâàòü â ñòðóêòóðó VIM"
+
+msgid "NULL reference passed"
+msgstr "ïåðåäàíà ññûëêà íà NULL"
+
+msgid "internal error: invalid value type"
+msgstr "âíóòðåííÿÿ îøèáêà: íåïðàâèëüíûé òèï çíà÷åíèÿ"
diff --git a/src/po/ru.po b/src/po/ru.po
index 4eb782b..1e1cc26 100644
--- a/src/po/ru.po
+++ b/src/po/ru.po
@@ -1,39 +1,60 @@
 # Russian translation for Vim
-# 
+#
 # Об условиях использования читайте в редакторе Vim ":help uganda"
-# О людях, делающих Vim читайте в редакторе ":help авторы"
 #
 # vassily "vr" ragosin <vrr@users.sourceforge.net>, 2004
-#
-# Original translations.
+# Sergey Alyoshin <alyoshin.s@gmail.com>, 2013
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Vim 6.3\n"
+"Project-Id-Version: vim_7.3_ru\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2004-06-15 09:39+0400\n"
-"PO-Revision-Date: 2004-05-19 00:23+0400\n"
-"Last-Translator: vassily ragosin <vrr@users.sourceforge.net>\n"
-"Language-Team: vassily ragosin <vrr@users.sourceforge.net>\n"
+"POT-Creation-Date: 2013-06-01 13:52+0400\n"
+"PO-Revision-Date: 2013-06-01 14:16+0400\n"
+"Last-Translator: Sergey Alyoshin <alyoshin.s@gmail.com>\n"
+"Language-Team: \n"
+"Language: Russian\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
+msgid "E831: bf_key_init() called with empty password"
+msgstr "E831: bf_key_init() вызван с пустым паролем"
+
+msgid "E820: sizeof(uint32_t) != 4"
+msgstr "E820: sizeof(uint32_t) != 4"
+
+msgid "E817: Blowfish big/little endian use wrong"
+msgstr ""
+"E817: Неправильное использование обратного/прямого порядка байт в Blowfish"
+
+msgid "E818: sha256 test failed"
+msgstr "E818: Не удалось выполнить тест sha256"
+
+msgid "E819: Blowfish test failed"
+msgstr "E819: Не удалось выполнить тест Blowfish"
+
+msgid "[Location List]"
+msgstr "[Список расположений]"
+
+msgid "[Quickfix List]"
+msgstr "[Список быстрых исправлений]"
+
+msgid "E855: Autocommands caused command to abort"
+msgstr "E855: Автокоманды вызвали прекращение команды"
+
 msgid "E82: Cannot allocate any buffer, exiting..."
 msgstr "E82: Невозможно выделить память даже для одного буфера, выход..."
 
 msgid "E83: Cannot allocate buffer, using other one..."
 msgstr "E83: Невозможно выделить память для буфера, используем другой буфер..."
 
-#, c-format
 msgid "E515: No buffers were unloaded"
 msgstr "E515: Ни один буфер не был выгружен из памяти"
 
-#, c-format
 msgid "E516: No buffers were deleted"
 msgstr "E516: Ни один буфер не был удалён"
 
-#, c-format
 msgid "E517: No buffers were wiped out"
 msgstr "E517: Ни один буфер не был очищен"
 
@@ -77,7 +98,8 @@
 
 #, c-format
 msgid "E89: No write since last change for buffer %ld (add ! to override)"
-msgstr "E89: Изменения в буфере %ld не сохранены (!, чтобы обойти проверку)"
+msgstr ""
+"E89: Изменения в буфере %ld не сохранены (добавьте !, чтобы обойти проверку)"
 
 msgid "E90: Cannot unload last buffer"
 msgstr "E90: Невозможно выгрузить из памяти последний буфер"
@@ -116,6 +138,9 @@
 msgid "[Read errors]"
 msgstr "[Ошибки чтения]"
 
+msgid "[RO]"
+msgstr "[ТЧ]"
+
 msgid "[readonly]"
 msgstr "[только для чтения]"
 
@@ -131,15 +156,15 @@
 msgid "line %ld of %ld --%d%%-- col "
 msgstr "стр. %ld из %ld --%d%%-- кол. "
 
-msgid "[No file]"
-msgstr "[Нет файла]"
+msgid "[No Name]"
+msgstr "[Нет имени]"
 
 #. must be a help buffer
 msgid "help"
 msgstr "справка"
 
-msgid "[help]"
-msgstr "[справка]"
+msgid "[Help]"
+msgstr "[Справка]"
 
 msgid "[Preview]"
 msgstr "[Предпросмотр]"
@@ -153,7 +178,6 @@
 msgid "Top"
 msgstr "Наверху"
 
-#, c-format
 msgid ""
 "\n"
 "# Buffer list:\n"
@@ -161,11 +185,8 @@
 "\n"
 "# Список буферов:\n"
 
-msgid "[Error List]"
-msgstr "[Список ошибок]"
-
-msgid "[No File]"
-msgstr "[Нет файла]"
+msgid "[Scratch]"
+msgstr "[Временный]"
 
 msgid ""
 "\n"
@@ -186,18 +207,27 @@
 msgid "E96: Can not diff more than %ld buffers"
 msgstr "E96: Следить за отличиями можно не более чем в %ld буферах"
 
+msgid "E810: Cannot read or write temp files"
+msgstr "E810: Невозможно прочитать или записать временные файлы"
+
 msgid "E97: Cannot create diffs"
 msgstr "E97: Невозможно создать файлы отличий"
 
 msgid "Patch file"
 msgstr "Файл-заплатка"
 
+msgid "E816: Cannot read patch output"
+msgstr "E816: Невозможно прочитать вывод patch"
+
 msgid "E98: Cannot read diff output"
-msgstr "E98: Невозможно прочитать вывод команды diff"
+msgstr "E98: Невозможно прочитать вывод diff"
 
 msgid "E99: Current buffer is not in diff mode"
 msgstr "E99: Активный буфер не находится в режиме отличий"
 
+msgid "E793: No other buffer in diff mode is modifiable"
+msgstr "E793: Больше нет изменяемых буферов в режиме отличий"
+
 msgid "E100: No other buffer in diff mode"
 msgstr "E100: Больше нет буферов в режиме отличий"
 
@@ -212,6 +242,9 @@
 msgid "E103: Buffer \"%s\" is not in diff mode"
 msgstr "E103: Буфер \"%s\" не находится в режиме отличий"
 
+msgid "E787: Buffer changed unexpectedly"
+msgstr "E787: Буфер неожиданно изменился"
+
 msgid "E104: Escape not allowed in digraph"
 msgstr "E104: Экранирующий символ Escape нельзя использовать в диграфе"
 
@@ -221,17 +254,15 @@
 msgid "E105: Using :loadkeymap not in a sourced file"
 msgstr "E105: Команда :loadkeymap применена вне файла сценария"
 
+msgid "E791: Empty keymap entry"
+msgstr "E791: пустая запись раскладки клавиатуры"
+
 msgid " Keyword completion (^N^P)"
 msgstr " Автодополнение ключевого слова (^N^P)"
 
 #. ctrl_x_mode == 0, ^P/^N compl.
-msgid " ^X mode (^E^Y^L^]^F^I^K^D^V^N^P)"
-msgstr " Автодополнение ^X (^E^Y^L^]^F^I^K^D^V^N^P)"
-
-#. Scroll has it's own msgs, in it's place there is the msg for local
-#. * ctrl_x_mode = 0 (eg continue_status & CONT_LOCAL)  -- Acevedo
-msgid " Keyword Local completion (^N^P)"
-msgstr " Местное автодополнение ключевого слова (^N^P)"
+msgid " ^X mode (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
+msgstr " Режим ^X (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
 
 msgid " Whole line completion (^L^N^P)"
 msgstr " Автодополнение целой строки (^L^N^P)"
@@ -257,15 +288,33 @@
 msgid " Command-line completion (^V^N^P)"
 msgstr " Автодополнение командной строки (^V^N^P)"
 
+msgid " User defined completion (^U^N^P)"
+msgstr " Пользовательское автодополнение (^U^N^P)"
+
+msgid " Omni completion (^O^N^P)"
+msgstr " Omni-дополнение (^O^N^P)"
+
+msgid " Spelling suggestion (s^N^P)"
+msgstr " Предложение исправления правописания (s^N^P)"
+
+msgid " Keyword Local completion (^N^P)"
+msgstr " Местное автодополнение ключевого слова (^N^P)"
+
 msgid "Hit end of paragraph"
 msgstr "Конец абзаца"
 
-msgid "'thesaurus' option is empty"
-msgstr "Не задано значение опции 'thesaurus'"
+msgid "E839: Completion function changed window"
+msgstr "E839: Функция автодополнения изменила окно"
+
+msgid "E840: Completion function deleted text"
+msgstr "E840: Функция автодополнения удалила текст"
 
 msgid "'dictionary' option is empty"
 msgstr "Не задано значение опции 'dictionary'"
 
+msgid "'thesaurus' option is empty"
+msgstr "Не задано значение опции 'thesaurus'"
+
 #, c-format
 msgid "Scanning dictionary: %s"
 msgstr "Просмотр словаря: %s"
@@ -280,7 +329,6 @@
 msgid "Scanning: %s"
 msgstr "Просмотр: %s"
 
-#, c-format
 msgid "Scanning tags."
 msgstr "Выполняется поиск среди меток."
 
@@ -311,11 +359,100 @@
 msgid "match %d"
 msgstr "соответствие %d"
 
-#. Skip further arguments but do continue to
-#. * search for a trailing command.
+msgid "E18: Unexpected characters in :let"
+msgstr "E18: Неожиданные символы в :let"
+
 #, c-format
-msgid "E106: Unknown variable: \"%s\""
-msgstr "E106: Неизвестная переменная: \"%s\""
+msgid "E684: list index out of range: %ld"
+msgstr "E684: Индекс списка за пределами диапазона: %ld"
+
+#, c-format
+msgid "E121: Undefined variable: %s"
+msgstr "E121: Неопределённая переменная: %s"
+
+msgid "E111: Missing ']'"
+msgstr "E111: Пропущена ']'"
+
+#, c-format
+msgid "E686: Argument of %s must be a List"
+msgstr "E686: Параметр %s должен быть списком"
+
+#, c-format
+msgid "E712: Argument of %s must be a List or Dictionary"
+msgstr "E712: Параметр %s должен быть списком или словарём"
+
+msgid "E713: Cannot use empty key for Dictionary"
+msgstr "E713: Невозможно использовать пустой ключ для словаря"
+
+msgid "E714: List required"
+msgstr "E714: Требуется список"
+
+msgid "E715: Dictionary required"
+msgstr "E715: Требуется словарь"
+
+#, c-format
+msgid "E118: Too many arguments for function: %s"
+msgstr "E118: Слишком много параметров для функции %s"
+
+#, c-format
+msgid "E716: Key not present in Dictionary: %s"
+msgstr "E716: Нет ключа в словаре: %s"
+
+#, c-format
+msgid "E122: Function %s already exists, add ! to replace it"
+msgstr "E122: Функция %s уже существует. Добавьте !, чтобы заменить её."
+
+msgid "E717: Dictionary entry already exists"
+msgstr "E717: Запись уже существует в словаре"
+
+msgid "E718: Funcref required"
+msgstr "E718: Требуется ссылка на функцию"
+
+msgid "E719: Cannot use [:] with a Dictionary"
+msgstr "E719: Невозможно использовать [:] со словарём"
+
+#, c-format
+msgid "E734: Wrong variable type for %s="
+msgstr "E734: Неправильный тип переменной для %s="
+
+#, c-format
+msgid "E130: Unknown function: %s"
+msgstr "E130: Неизвестная функция: %s"
+
+#, c-format
+msgid "E461: Illegal variable name: %s"
+msgstr "E461: Недопустимое имя переменной: %s"
+
+msgid "E687: Less targets than List items"
+msgstr "E687: Целей меньше чем элементов списка"
+
+msgid "E688: More targets than List items"
+msgstr "E688: Целей больше чем элементов списка"
+
+msgid "Double ; in list of variables"
+msgstr "Двойная ; в списке переменных"
+
+#, c-format
+msgid "E738: Can't list variables for %s"
+msgstr "E738: Невозможно отобразить переменные для %s"
+
+msgid "E689: Can only index a List or Dictionary"
+msgstr "E689: Индексирование возможно только списка или словаря"
+
+msgid "E708: [:] must come last"
+msgstr "E708: [:] должно быть последним"
+
+msgid "E709: [:] requires a List value"
+msgstr "E709: [:] требует значением список"
+
+msgid "E710: List value has more items than target"
+msgstr "E710: Элементов списка-значения больше чем в цели"
+
+msgid "E711: List value has not enough items"
+msgstr "E711: Список-значение не содержит достаточно элементов"
+
+msgid "E690: Missing \"in\" after :for"
+msgstr "E690: Пропущено \"in\" после :for"
 
 #, c-format
 msgid "E107: Missing parentheses: %s"
@@ -325,14 +462,38 @@
 msgid "E108: No such variable: \"%s\""
 msgstr "E108: Нет такой переменной: \"%s\""
 
+msgid "E743: variable nested too deep for (un)lock"
+msgstr "E743: Слишком глубоко вложенные переменные для (раз)блокировки"
+
 msgid "E109: Missing ':' after '?'"
 msgstr "E109: Пропущено ':' после '?'"
 
+msgid "E691: Can only compare List with List"
+msgstr "E691: Список можно сравнивать только со списком"
+
+msgid "E692: Invalid operation for Lists"
+msgstr "E692: Недопустимая операция для списков"
+
+msgid "E735: Can only compare Dictionary with Dictionary"
+msgstr "E735: Словарь можно сравнивать только со словарём"
+
+msgid "E736: Invalid operation for Dictionary"
+msgstr "E736: Недопустимая операция для словаря"
+
+msgid "E693: Can only compare Funcref with Funcref"
+msgstr "E693: Ссылку на функцию можно сравнивать только с ссылкой на функцию"
+
+msgid "E694: Invalid operation for Funcrefs"
+msgstr "E694: Недопустимая операция для ссылки на функцию"
+
+msgid "E804: Cannot use '%' with Float"
+msgstr "E804: Невозможно использовать '%' с числом с плавающей точкой"
+
 msgid "E110: Missing ')'"
 msgstr "E110: Пропущена ')'"
 
-msgid "E111: Missing ']'"
-msgstr "E111: Пропущена ']'"
+msgid "E695: Cannot index a Funcref"
+msgstr "E695: Невозможно индексировать ссылку на функцию"
 
 #, c-format
 msgid "E112: Option name missing: %s"
@@ -351,6 +512,37 @@
 msgstr "E115: Пропущена кавычка: %s"
 
 #, c-format
+msgid "E696: Missing comma in List: %s"
+msgstr "E696: Пропущена запятая в списке: %s"
+
+#, c-format
+msgid "E697: Missing end of List ']': %s"
+msgstr "E697: Пропущено окончание списка ']': %s"
+
+#, c-format
+msgid "E720: Missing colon in Dictionary: %s"
+msgstr "E720: Пропущено двоеточие в словаре: %s"
+
+#, c-format
+msgid "E721: Duplicate key in Dictionary: \"%s\""
+msgstr "E721: Повтор ключа в словаре: \"%s\""
+
+#, c-format
+msgid "E722: Missing comma in Dictionary: %s"
+msgstr "E722: Пропущена запятая в словаре: %s"
+
+#, c-format
+msgid "E723: Missing end of Dictionary '}': %s"
+msgstr "E723: Пропущено окончание словаря '}': %s"
+
+msgid "E724: variable nested too deep for displaying"
+msgstr "E724: Слишком глубоко вложенные переменные для отображения"
+
+#, c-format
+msgid "E740: Too many arguments for function %s"
+msgstr "E740: Слишком много параметров для функции %s"
+
+#, c-format
 msgid "E116: Invalid arguments for function %s"
 msgstr "E116: Параметры для функции %s заданы неверно"
 
@@ -359,10 +551,6 @@
 msgstr "E117: Неизвестная функция: %s"
 
 #, c-format
-msgid "E118: Too many arguments for function: %s"
-msgstr "E118: Слишком много параметров для функции %s"
-
-#, c-format
 msgid "E119: Not enough arguments for function: %s"
 msgstr "E119: Недостаточно параметров для функции %s"
 
@@ -370,6 +558,22 @@
 msgid "E120: Using <SID> not in a script context: %s"
 msgstr "E120: <SID> используется вне сценария: %s"
 
+#, c-format
+msgid "E725: Calling dict function without Dictionary: %s"
+msgstr "E725: Вызов функции dict без словаря: %s"
+
+msgid "E808: Number or Float required"
+msgstr "E808: Требуется целое число или с плавающей точкой"
+
+msgid "add() argument"
+msgstr "параметр add()"
+
+msgid "E699: Too many arguments"
+msgstr "E699: Слишком много параметров"
+
+msgid "E785: complete() can only be used in Insert mode"
+msgstr "E785: complete() может использоваться только в режиме Вставки"
+
 #.
 #. * Yes this is ugly, I don't particularly like it either.  But doing it
 #. * this way has the compelling advantage that translations need not to
@@ -378,54 +582,148 @@
 msgid "&Ok"
 msgstr "&Ok"
 
+msgid "extend() argument"
+msgstr "параметр extend()"
+
+#, c-format
+msgid "E737: Key already exists: %s"
+msgstr "E737: Ключ уже существует: %s"
+
+msgid "map() argument"
+msgstr "параметр map()"
+
+msgid "filter() argument"
+msgstr "параметр filter()"
+
 #, c-format
 msgid "+-%s%3ld lines: "
 msgstr "+-%s%3ld строк: "
 
+#, c-format
+msgid "E700: Unknown function: %s"
+msgstr "E700: Неизвестная функция: %s"
+
 msgid ""
 "&OK\n"
 "&Cancel"
 msgstr ""
 "&OK\n"
-"О&тмена"
+"&C Отмена"
 
 msgid "called inputrestore() more often than inputsave()"
 msgstr "Функция inputrestore() вызывается чаще, чем функция inputsave()"
 
-msgid "E655: Too many symbolic links (cycle?)"
-msgstr "E655: Слишком много символических ссылок (цикл?)"
+msgid "insert() argument"
+msgstr "параметр insert()"
+
+msgid "E786: Range not allowed"
+msgstr "E786: Диапазон не допускается"
+
+msgid "E701: Invalid type for len()"
+msgstr "E701: Неправильные тип для len()"
+
+msgid "E726: Stride is zero"
+msgstr "E726: Нулевой шаг"
+
+msgid "E727: Start past end"
+msgstr "E727: Начало после конца"
+
+msgid "<empty>"
+msgstr "<пусто>"
 
 msgid "E240: No connection to Vim server"
 msgstr "E240: Нет связи с сервером Vim"
 
-msgid "E277: Unable to read a server reply"
-msgstr "E277: Сервер не отвечает"
-
-msgid "E258: Unable to send to client"
-msgstr "E258: Не могу ответить клиенту"
-
 #, c-format
 msgid "E241: Unable to send to %s"
 msgstr "E241: Не могу отправить сообщение для %s"
 
+msgid "E277: Unable to read a server reply"
+msgstr "E277: Сервер не отвечает"
+
+msgid "remove() argument"
+msgstr "параметр remove()"
+
+msgid "E655: Too many symbolic links (cycle?)"
+msgstr "E655: Слишком много символических ссылок (цикл?)"
+
+msgid "reverse() argument"
+msgstr "параметр reverse()"
+
+msgid "E258: Unable to send to client"
+msgstr "E258: Не могу ответить клиенту"
+
+msgid "sort() argument"
+msgstr "параметр sort()"
+
+msgid "E702: Sort compare function failed"
+msgstr "E702: Неудачное завершение функции сравнения при сортировке"
+
 msgid "(Invalid)"
 msgstr "(Неправильно)"
 
-#, c-format
-msgid "E121: Undefined variable: %s"
-msgstr "E121: Неопределенная переменная: %s"
+msgid "E677: Error writing temp file"
+msgstr "E677: Ошибка записи во временный файл"
+
+msgid "E805: Using a Float as a Number"
+msgstr "E805: Использование числа с плавающей точкой как целого"
+
+msgid "E703: Using a Funcref as a Number"
+msgstr "E703: Использование ссылки на функцию как числа"
+
+msgid "E745: Using a List as a Number"
+msgstr "E745: Использование списка как числа"
+
+msgid "E728: Using a Dictionary as a Number"
+msgstr "E728: Использование словаря как числа"
+
+msgid "E729: using Funcref as a String"
+msgstr "E729: Использование ссылки на функцию как строки"
+
+msgid "E730: using List as a String"
+msgstr "E730: Использование списка как строки"
+
+msgid "E731: using Dictionary as a String"
+msgstr "E731: Использование словаря как строки"
+
+msgid "E806: using Float as a String"
+msgstr "E806: Использование числа с плавающей точкой как строки"
 
 #, c-format
-msgid "E461: Illegal variable name: %s"
-msgstr "E461: Недопустимое имя переменной: %s"
+msgid "E706: Variable type mismatch for: %s"
+msgstr "E706: Несоответствие типа переменной для: %s"
 
 #, c-format
-msgid "E122: Function %s already exists, add ! to replace it"
-msgstr "E122: Функция %s уже существует. Добавьте !, чтобы заменить её."
+msgid "E795: Cannot delete variable %s"
+msgstr "E795: Невозможно удалить переменную %s"
+
+#, c-format
+msgid "E704: Funcref variable name must start with a capital: %s"
+msgstr ""
+"E704: Имя переменной ссылки на функцию должно начинаться с заглавной буквы: "
+"%s"
+
+#, c-format
+msgid "E705: Variable name conflicts with existing function: %s"
+msgstr "E705: Имя переменной конфликтует с существующей функцией: %s"
+
+#, c-format
+msgid "E741: Value is locked: %s"
+msgstr "E741: Значение заблокировано: %s"
+
+msgid "Unknown"
+msgstr "Неизвестно"
+
+#, c-format
+msgid "E742: Cannot change value of %s"
+msgstr "E742: Невозможно изменить значение %s"
+
+msgid "E698: variable nested too deep for making a copy"
+msgstr "E698: Слишком глубоко вложенные переменные для копирования"
 
 #, c-format
 msgid "E123: Undefined function: %s"
-msgstr "E123: Неопределенная функция: %s"
+msgstr "E123: Неопределённая функция: %s"
 
 #, c-format
 msgid "E124: Missing '(': %s"
@@ -435,23 +733,33 @@
 msgid "E125: Illegal argument: %s"
 msgstr "E125: Недопустимый параметр: %s"
 
+#, c-format
+msgid "E853: Duplicate argument name: %s"
+msgstr "E853: Повторяющееся имя параметра: %s"
+
 msgid "E126: Missing :endfunction"
 msgstr "E126: Пропущена команда :endfunction"
 
 #, c-format
+msgid "E707: Function name conflicts with variable: %s"
+msgstr "E707: Имя функции конфликтует с переменной: %s"
+
+#, c-format
 msgid "E127: Cannot redefine function %s: It is in use"
 msgstr "E127: Невозможно переопределить функцию %s, она используется"
 
+#, c-format
+msgid "E746: Function name does not match script file name: %s"
+msgstr "E746: Имя функции не соответствует имени файла сценария: %s"
+
 msgid "E129: Function name required"
 msgstr "E129: Требуется имя функции"
 
 #, c-format
-msgid "E128: Function name must start with a capital: %s"
-msgstr "E128: Имя функции должно начинаться с прописной буквы: %s"
-
-#, c-format
-msgid "E130: Undefined function: %s"
-msgstr "E130: Функция %s не определена"
+msgid "E128: Function name must start with a capital or contain a colon: %s"
+msgstr ""
+"E128: Имя функции должно начинаться с заглавной буквы или содержать "
+"двоеточие: %s"
 
 #, c-format
 msgid "E131: Cannot delete function %s: It is in use"
@@ -460,7 +768,6 @@
 msgid "E132: Function call depth is higher than 'maxfuncdepth'"
 msgstr "E132: Глубина вызова функции больше, чем значение 'maxfuncdepth'"
 
-#. always scroll up, don't overwrite
 #, c-format
 msgid "calling %s"
 msgstr "вызов %s"
@@ -474,10 +781,9 @@
 msgstr "%s возвращает #%ld"
 
 #, c-format
-msgid "%s returning \"%s\""
-msgstr "%s возвращает \"%s\""
+msgid "%s returning %s"
+msgstr "%s возвращает %s"
 
-#. always scroll up, don't overwrite
 #, c-format
 msgid "continuing in %s"
 msgstr "продолжение в %s"
@@ -485,7 +791,6 @@
 msgid "E133: :return not inside a function"
 msgstr "E133: команда :return вне функции"
 
-#, c-format
 msgid ""
 "\n"
 "# global variables:\n"
@@ -493,6 +798,16 @@
 "\n"
 "# глобальные переменные:\n"
 
+msgid ""
+"\n"
+"\tLast set from "
+msgstr ""
+"\n"
+"\tВ последний раз опция изменена в "
+
+msgid "No old files"
+msgstr "Нет старых файлов"
+
 #, c-format
 msgid "<%s>%s%s  %d,  Hex %02x,  Octal %03o"
 msgstr "<%s>%s%s  %d,  Hex %02x,  Octal %03o"
@@ -543,9 +858,13 @@
 msgid " marks"
 msgstr " отметок"
 
+msgid " oldfiles"
+msgstr " старых файлов"
+
 msgid " FAILED"
 msgstr " НЕУДАЧНО"
 
+#. avoid a wait_return for this message, it's annoying
 #, c-format
 msgid "E137: Viminfo file is not writable: %s"
 msgstr "E137: Права на запись файла viminfo отсутствуют: %s"
@@ -563,7 +882,6 @@
 msgid "# This viminfo file was generated by Vim %s.\n"
 msgstr "# Этот файл viminfo автоматически создан Vim %s.\n"
 
-#, c-format
 msgid ""
 "# You may edit it if you're careful!\n"
 "\n"
@@ -571,7 +889,6 @@
 "# Его можно (осторожно!) редактировать.\n"
 "\n"
 
-#, c-format
 msgid "# Value of 'encoding' when this file was written\n"
 msgstr "# Значение опции 'encoding' в момент записи файла\n"
 
@@ -581,11 +898,6 @@
 msgid "Save As"
 msgstr "Сохранить как"
 
-#. Overwriting a file that is loaded in another buffer is not a
-#. * good idea.
-msgid "E139: File is loaded in another buffer"
-msgstr "E139: Файл загружен в другом буфере"
-
 msgid "Write partial file?"
 msgstr "Записать файл частично?"
 
@@ -593,8 +905,16 @@
 msgstr "E140: Для записи части буфера используйте !"
 
 #, c-format
-msgid "Overwrite existing file \"%.*s\"?"
-msgstr "Переписать существующий файл \"%.*s\"?"
+msgid "Overwrite existing file \"%s\"?"
+msgstr "Перезаписать существующий файл \"%s\"?"
+
+#, c-format
+msgid "Swap file \"%s\" exists, overwrite anyway?"
+msgstr "Своп-файл \"%s\" существует, перезаписать?"
+
+#, c-format
+msgid "E768: Swap file exists: %s (:silent! overrides)"
+msgstr "E768: Своп-файл существует: %s (:silent! чтобы обойти проверку)"
 
 #, c-format
 msgid "E141: No file name for buffer %ld"
@@ -605,12 +925,27 @@
 
 #, c-format
 msgid ""
-"'readonly' option is set for \"%.*s\".\n"
+"'readonly' option is set for \"%s\".\n"
 "Do you wish to write anyway?"
 msgstr ""
-"Для \"%.*s\" включена опция 'readonly'.\n"
+"Для \"%s\" включена опция 'readonly'.\n"
 "Записать?"
 
+#, c-format
+msgid ""
+"File permissions of \"%s\" are read-only.\n"
+"It may still be possible to write it.\n"
+"Do you wish to try?"
+msgstr ""
+"Файл \"%s\" имеет режим доступа только для чтения.\n"
+"Но, возможно, файл удастся записать.\n"
+"Хотите попробовать?"
+
+#, c-format
+msgid "E505: \"%s\" is read-only (add ! to override)"
+msgstr ""
+"E505: \"%s\" открыт только для чтения (добавьте !, чтобы обойти проверку)"
+
 msgid "Edit File"
 msgstr "Редактирование файла"
 
@@ -634,10 +969,17 @@
 msgid "(Interrupted) "
 msgstr "(Прервано)"
 
+msgid "1 match"
+msgstr "Одно соответствие"
+
 msgid "1 substitution"
 msgstr "Одна замена"
 
 #, c-format
+msgid "%ld matches"
+msgstr "%ld соответствий"
+
+#, c-format
 msgid "%ld substitutions"
 msgstr "%ld замен"
 
@@ -658,7 +1000,6 @@
 msgid "Pattern found in every line: %s"
 msgstr "Соответствие шаблону найдено на каждой строке: %s"
 
-#, c-format
 msgid ""
 "\n"
 "# Last Substitute String:\n"
@@ -673,7 +1014,7 @@
 
 #, c-format
 msgid "E661: Sorry, no '%s' help for %s"
-msgstr "E661: к сожалению, справка '%s' для %s отсутствует"
+msgstr "E661: К сожалению, справка '%s' для %s отсутствует"
 
 #, c-format
 msgid "E149: Sorry, no help for %s"
@@ -700,8 +1041,8 @@
 msgstr "E670: Файлы справки используют разные кодировки для одного языка: %s"
 
 #, c-format
-msgid "E154: Duplicate tag \"%s\" in file %s"
-msgstr "E154: Повторяющаяся метка \"%s\" в файле %s"
+msgid "E154: Duplicate tag \"%s\" in file %s/%s"
+msgstr "E154: Повторяющаяся метка \"%s\" в файле %s/%s"
 
 #, c-format
 msgid "E160: Unknown sign command: %s"
@@ -767,9 +1108,12 @@
 msgid "%3d  %s %s  line %ld"
 msgstr "%3d  %s %s стр. %ld"
 
+msgid "E750: First use \":profile start {fname}\""
+msgstr "E750: Первое использование \":profile start {имя-файла}\""
+
 #, c-format
-msgid "Save changes to \"%.*s\"?"
-msgstr "Сохранить изменения в \"%.*s\"?"
+msgid "Save changes to \"%s\"?"
+msgstr "Сохранить изменения в \"%s\"?"
 
 msgid "Untitled"
 msgstr "Без имени"
@@ -793,7 +1137,7 @@
 
 #, c-format
 msgid "E666: compiler not supported: %s"
-msgstr "E666: компилятор не поддерживается: %s"
+msgstr "E666: Компилятор не поддерживается: %s"
 
 #, c-format
 msgid "Searching for \"%s\" in \"%s\""
@@ -834,6 +1178,21 @@
 msgid "finished sourcing %s"
 msgstr "считывание сценария %s завершено"
 
+msgid "modeline"
+msgstr "режимная строка"
+
+msgid "--cmd argument"
+msgstr "--cmd параметр"
+
+msgid "-c argument"
+msgstr "-c параметр"
+
+msgid "environment variable"
+msgstr "переменная окружения"
+
+msgid "error handler"
+msgstr "обработчик ошибки"
+
 msgid "W15: Warning: Wrong line separator, ^M may be missing"
 msgstr ""
 "W15: Предупреждение: неправильный разделитель строки. Возможно пропущено ^M"
@@ -845,80 +1204,6 @@
 msgstr "E168: Команда :finish используется вне файла сценария"
 
 #, c-format
-msgid "Page %d"
-msgstr "Страница %d"
-
-msgid "No text to be printed"
-msgstr "Печатать нечего"
-
-#, c-format
-msgid "Printing page %d (%d%%)"
-msgstr "Печать стр. %d (%d%%)"
-
-#, c-format
-msgid " Copy %d of %d"
-msgstr " Копия %d из %d"
-
-#, c-format
-msgid "Printed: %s"
-msgstr "Напечатано: %s"
-
-#, c-format
-msgid "Printing aborted"
-msgstr "Печать прекращена"
-
-msgid "E455: Error writing to PostScript output file"
-msgstr "E455: Ошибка записи в файл PostScript"
-
-#, c-format
-msgid "E624: Can't open file \"%s\""
-msgstr "E624: Невозможно открыть файл \"%s\""
-
-#, c-format
-msgid "E457: Can't read PostScript resource file \"%s\""
-msgstr "E457: Невозможно прочитать файл ресурсов PostScript \"%s\""
-
-#, c-format
-msgid "E618: file \"%s\" is not a PostScript resource file"
-msgstr "E618: файл \"%s\" не является файлом ресурсов PostScript"
-
-#, c-format
-msgid "E619: file \"%s\" is not a supported PostScript resource file"
-msgstr "E619: файл \"%s\" не является допустимым файлом ресурсов PostScript"
-
-#, c-format
-msgid "E621: \"%s\" resource file has wrong version"
-msgstr "E621: файл ресурсов \"%s\" неизвестной версии"
-
-msgid "E324: Can't open PostScript output file"
-msgstr "E324: Невозможно открыть файл PostScript"
-
-#, c-format
-msgid "E456: Can't open file \"%s\""
-msgstr "E456: Невозможно открыть файл \"%s\""
-
-msgid "E456: Can't find PostScript resource file \"prolog.ps\""
-msgstr "E456: Файл ресурсов PostScript \"prolog.ps\" не найден"
-
-#, c-format
-msgid "E456: Can't find PostScript resource file \"%s.ps\""
-msgstr "E456: Файл ресурсов PostScript \"%s.ps\" не найден"
-
-#, c-format
-msgid "E620: Unable to convert from multi-byte to \"%s\" encoding"
-msgstr ""
-"E620: Преобразование из мультибайтных символов в кодировку \"%s\" невозможно"
-
-msgid "Sending to printer..."
-msgstr "Отправка на печать..."
-
-msgid "E365: Failed to print PostScript file"
-msgstr "E365: Не удалось выполнить печать файла PostScript"
-
-msgid "Print job sent."
-msgstr "Задание на печать отправлено."
-
-#, c-format
 msgid "Current %slanguage: \"%s\""
 msgstr "Активный %sязык: \"%s\""
 
@@ -929,12 +1214,11 @@
 msgid "Entering Ex mode.  Type \"visual\" to go to Normal mode."
 msgstr "Переход в режим Ex. Для перехода в Обычный режим наберите \"visual\""
 
-#. must be at EOF
 msgid "E501: At end-of-file"
 msgstr "E501: В конце файла"
 
 msgid "E169: Command too recursive"
-msgstr "E169: Cлишком рекурсивная команда"
+msgstr "E169: Слишком рекурсивная команда"
 
 #, c-format
 msgid "E605: Exception not caught: %s"
@@ -995,7 +1279,7 @@
 msgstr "Команды, определённые пользователем, не обнаружены."
 
 msgid "E175: No attribute specified"
-msgstr "E175: параметр не задан"
+msgstr "E175: Параметр не задан"
 
 msgid "E176: Invalid number of arguments"
 msgstr "E176: Неправильное количество параметров"
@@ -1006,8 +1290,26 @@
 msgid "E178: Invalid default value for count"
 msgstr "E178: Неправильное значение числа-приставки по умолчанию"
 
-msgid "E179: argument required for complete"
-msgstr "E179: для завершения требуется указать параметр"
+msgid "E179: argument required for -complete"
+msgstr "E179: Для -complete требуется указать параметр"
+
+#, c-format
+msgid "E181: Invalid attribute: %s"
+msgstr "E181: Неправильный атрибут: %s"
+
+msgid "E182: Invalid command name"
+msgstr "E182: Неправильное имя команды"
+
+msgid "E183: User defined commands must start with an uppercase letter"
+msgstr "E183: Команда пользователя должна начинаться с заглавной буквы"
+
+msgid "E841: Reserved name, cannot be used for user defined command"
+msgstr ""
+"E841: Зарезервированное имя не может использоваться для команд пользователя"
+
+#, c-format
+msgid "E184: No such user-defined command: %s"
+msgstr "E184: Нет такой команды пользователя: %s"
 
 #, c-format
 msgid "E180: Invalid complete value: %s"
@@ -1020,36 +1322,40 @@
 msgid "E467: Custom completion requires a function argument"
 msgstr "E467: Особое дополнение требует указания параметра функции"
 
-#, c-format
-msgid "E181: Invalid attribute: %s"
-msgstr "E181: Неправильный атрибут: %s"
-
-msgid "E182: Invalid command name"
-msgstr "E182: Неправильное имя команды"
-
-msgid "E183: User defined commands must start with an uppercase letter"
-msgstr "E183: Команда пользователя должна начинаться с заглавной буквы"
+msgid "unknown"
+msgstr "неизвестно"
 
 #, c-format
-msgid "E184: No such user-defined command: %s"
-msgstr "E184: Нет такой команды пользователя: %s"
-
-#, c-format
-msgid "E185: Cannot find color scheme %s"
-msgstr "E185: Цветовая схема %s не найдена"
+msgid "E185: Cannot find color scheme '%s'"
+msgstr "E185: Невозможно найти цветовую схему '%s'"
 
 msgid "Greetings, Vim user!"
-msgstr "Привет, пользователь Vim!"
+msgstr "Приветствуем вас, пользователь Vim!"
+
+msgid "E784: Cannot close last tab page"
+msgstr "E784: Нельзя закрыть последнюю вкладку"
+
+msgid "Already only one tab page"
+msgstr "На экране всего одна вкладка"
 
 msgid "Edit File in new window"
 msgstr "Редактировать файл в новом окне"
 
+#, c-format
+msgid "Tab page %d"
+msgstr "Вкладка %d"
+
 msgid "No swap file"
 msgstr "Без своп-файла"
 
 msgid "Append File"
 msgstr "Добавить файл"
 
+msgid "E747: Cannot change directory, buffer is modified (add ! to override)"
+msgstr ""
+"E747: Смена каталога невозможна, буфер изменён (добавьте !, чтобы обойти "
+"проверку)"
+
 msgid "E186: No previous directory"
 msgstr "E186: Нет предыдущего каталога"
 
@@ -1057,7 +1363,7 @@
 msgstr "E187: Неизвестно"
 
 msgid "E465: :winsize requires two number arguments"
-msgstr "E465: команда :winsize требует указания двух числовых параметров"
+msgstr "E465: Команда :winsize требует указания двух числовых параметров"
 
 #, c-format
 msgid "Window position: X %d, Y %d"
@@ -1067,7 +1373,7 @@
 msgstr "E188: В данной системе определение положения окна не работает"
 
 msgid "E466: :winpos requires two number arguments"
-msgstr "E466: команда :winpos требует указания двух числовых параметров"
+msgstr "E466: Команда :winpos требует указания двух числовых параметров"
 
 msgid "Save Redirection"
 msgstr "Перенаправление записи"
@@ -1082,8 +1388,12 @@
 msgstr "Сохранение настроек"
 
 #, c-format
+msgid "E739: Cannot create directory: %s"
+msgstr "E739: Невозможно создать каталог: %s"
+
+#, c-format
 msgid "E189: \"%s\" exists (add ! to override)"
-msgstr "E189: \"%s\" существует (!, чтобы обойти проверку)"
+msgstr "E189: \"%s\" существует (добавьте !, чтобы обойти проверку)"
 
 #, c-format
 msgid "E190: Cannot open \"%s\" for writing"
@@ -1096,6 +1406,9 @@
 msgid "E192: Recursive use of :normal too deep"
 msgstr "E192: Слишком глубокая рекурсия при использовании команды :normal"
 
+msgid "E809: #< is not available without the +eval feature"
+msgstr "E809: #< не доступно без особенности +eval"
+
 msgid "E194: No alternate file name to substitute for '#'"
 msgstr "E194: Нет соседнего имени файла для замены '#'"
 
@@ -1109,7 +1422,10 @@
 msgstr "E497: Нет автокомандного имени соответствия для замены \"<amatch>\""
 
 msgid "E498: no :source file name to substitute for \"<sfile>\""
-msgstr "E498: нет имени файла :source для замены \"<sfile>\""
+msgstr "E498: Нет имени файла :source для замены \"<sfile>\""
+
+msgid "E842: no line number to use for \"<slnum>\""
+msgstr "E842: Нет номера строки для использования \"<slnum>\""
 
 #, no-c-format
 msgid "E499: Empty file name for '%' or '#', only works with \":p:h\""
@@ -1176,7 +1492,7 @@
 msgstr "Прерывание"
 
 msgid "E579: :if nesting too deep"
-msgstr "E579: слишком глубоко вложенный :if"
+msgstr "E579: Слишком глубоко вложенный :if"
 
 msgid "E580: :endif without :if"
 msgstr "E580: :endif без :if"
@@ -1188,22 +1504,28 @@
 msgstr "E582: :elseif без :if"
 
 msgid "E583: multiple :else"
-msgstr "E583: обнаружено несколько :else"
+msgstr "E583: Обнаружено несколько :else"
 
 msgid "E584: :elseif after :else"
 msgstr "E584: :elseif после :else"
 
-msgid "E585: :while nesting too deep"
-msgstr "E585: слишком глубоко вложенный :while"
+msgid "E585: :while/:for nesting too deep"
+msgstr "E585: Слишком глубокое вложение :while или :for"
 
-msgid "E586: :continue without :while"
-msgstr "E586: :continue без :while"
+msgid "E586: :continue without :while or :for"
+msgstr "E586: :continue без :while или :for"
 
-msgid "E587: :break without :while"
-msgstr "E587: :break без :while"
+msgid "E587: :break without :while or :for"
+msgstr "E587: :break без :while или :for"
+
+msgid "E732: Using :endfor with :while"
+msgstr "E732: Использование :endfor с :while"
+
+msgid "E733: Using :endwhile with :for"
+msgstr "E733: Использование :endwhile с :for"
 
 msgid "E601: :try nesting too deep"
-msgstr "E601: слишком глубоко вложенный :try"
+msgstr "E601: Слишком глубоко вложенный :try"
 
 msgid "E603: :catch without :try"
 msgstr "E603: :catch без :try"
@@ -1218,13 +1540,19 @@
 
 #. Give up for a multiple ":finally" and ignore it.
 msgid "E607: multiple :finally"
-msgstr "E607: обнаружено несколько :finally"
+msgstr "E607: Обнаружено несколько :finally"
 
 msgid "E602: :endtry without :try"
 msgstr "E602: :endtry без :try"
 
 msgid "E193: :endfunction not inside a function"
-msgstr "E193: команда :endfunction может использоваться только внутри функции"
+msgstr "E193: Команда :endfunction может использоваться только внутри функции"
+
+msgid "E788: Not allowed to edit another buffer now"
+msgstr "E788: Сейчас не допускается редактирование другого буфера"
+
+msgid "E811: Not allowed to change buffer information now"
+msgstr "E811: Сейчас не допускается изменение информации о буфере"
 
 msgid "tagname"
 msgstr "имя метки"
@@ -1261,6 +1589,9 @@
 msgid "E199: Active window or buffer deleted"
 msgstr "E199: Удалено активное окно или буфер"
 
+msgid "E812: Autocommands changed buffer or buffer name"
+msgstr "E812: Автокоманды изменили буфер или имя буфера"
+
 msgid "Illegal file name"
 msgstr "Недопустимое имя файла"
 
@@ -1270,9 +1601,18 @@
 msgid "is not a file"
 msgstr "не является файлом"
 
+msgid "is a device (disabled with 'opendevice' option)"
+msgstr "является устройством (отключено при опции 'opendevice')"
+
 msgid "[New File]"
 msgstr "[Новый файл]"
 
+msgid "[New DIRECTORY]"
+msgstr "[Новый КАТАЛОГ]"
+
+msgid "[File too big]"
+msgstr "[Файл слишком большой]"
+
 msgid "[Permission Denied]"
 msgstr "[Доступ запрещён]"
 
@@ -1280,13 +1620,13 @@
 msgstr "E200: В результате выполнения автокоманд *ReadPre файл стал нечитаемым"
 
 msgid "E201: *ReadPre autocommands must not change current buffer"
-msgstr "E201: автокоманды *ReadPre не должны изменять активный буфер"
+msgstr "E201: Автокоманды *ReadPre не должны изменять активный буфер"
 
 msgid "Vim: Reading from stdin...\n"
-msgstr "Vim: выполняется чтение из стандартного потока ввода stdin...\n"
+msgstr "Vim: Чтение из стандартного потока ввода stdin...\n"
 
 msgid "Reading from stdin..."
-msgstr "Выполняется чтение из стандартного потока ввода stdin..."
+msgstr "Чтение из стандартного потока ввода stdin..."
 
 #. Re-opening the original file failed!
 msgid "E202: Conversion made file unreadable!"
@@ -1301,15 +1641,12 @@
 msgid "[socket]"
 msgstr "[гнездо]"
 
-msgid "[RO]"
-msgstr "[RO]"
+msgid "[character special]"
+msgstr "[специальный символьный]"
 
 msgid "[CR missing]"
 msgstr "[пропущены символы CR]"
 
-msgid "[NL found]"
-msgstr "[Обнаружены символы NL]"
-
 msgid "[long lines split]"
 msgstr "[длинные строки разбиты]"
 
@@ -1319,11 +1656,15 @@
 msgid "[converted]"
 msgstr "[перекодировано]"
 
+msgid "[blowfish]"
+msgstr "[blowfish]"
+
 msgid "[crypted]"
 msgstr "[зашифровано]"
 
-msgid "[CONVERSION ERROR]"
-msgstr "[ОШИБКА ПРЕОБРАЗОВАНИЯ]"
+#, c-format
+msgid "[CONVERSION ERROR in line %ld]"
+msgstr "[ОШИБКА ПРЕОБРАЗОВАНИЯ в строке %ld]"
 
 #, c-format
 msgid "[ILLEGAL BYTE in line %ld]"
@@ -1341,6 +1682,12 @@
 msgid "can't read output of 'charconvert'"
 msgstr "невозможно прочитать вывод 'charconvert'"
 
+msgid "E821: File is encrypted with unknown method"
+msgstr "E821: Файл зашифрован неизвестным методом"
+
+msgid "E676: No matching autocommands for acwrite buffer"
+msgstr "E676: Нет подходящих автокоманд для буфера acwrite"
+
 msgid "E203: Autocommands deleted or unloaded buffer to be written"
 msgstr ""
 "E203: Буфер, который требовалось записать, удалён или выгружен автокомандой"
@@ -1357,32 +1704,41 @@
 msgid "is not a file or writable device"
 msgstr "не является файлом или устройством, доступным для записи"
 
+msgid "writing to device disabled with 'opendevice' option"
+msgstr "запись в устройство отключена при опции 'opendevice'"
+
 msgid "is read-only (add ! to override)"
-msgstr "открыт только для чтения (!, чтобы обойти проверку)"
+msgstr "открыт только для чтения (добавьте !, чтобы обойти проверку)"
 
 msgid "E506: Can't write to backup file (add ! to override)"
-msgstr "E506: Запись в резервный файл невозможна (!, чтобы обойти проверку)"
+msgstr ""
+"E506: Запись в резервный файл невозможна (добавьте !, чтобы обойти проверку)"
 
 msgid "E507: Close error for backup file (add ! to override)"
-msgstr "E507: Ошибка закрытия резервного файла (!, чтобы обойти проверку)"
+msgstr ""
+"E507: Ошибка закрытия резервного файла (добавьте !, чтобы обойти проверку)"
 
 msgid "E508: Can't read file for backup (add ! to override)"
-msgstr "E508: Невозможно прочитать резервный файл (!, чтобы обойти проверку)"
+msgstr ""
+"E508: Невозможно прочитать резервный файл (добавьте !, чтобы обойти проверку)"
 
 msgid "E509: Cannot create backup file (add ! to override)"
-msgstr "E509: Невозможно создать резервный файл (!, чтобы обойти проверку)"
+msgstr ""
+"E509: Невозможно создать резервный файл (добавьте !, чтобы обойти проверку)"
 
 msgid "E510: Can't make backup file (add ! to override)"
-msgstr "E510: Невозможно создать резервный файл (!, чтобы обойти проверку)"
+msgstr ""
+"E510: Невозможно создать резервный файл (добавьте !, чтобы обойти проверку)"
 
 msgid "E460: The resource fork would be lost (add ! to override)"
-msgstr "E460: Вилка ресурса будет потеряна (!, чтобы обойти проверку)"
+msgstr "E460: Ветвь ресурса будет потеряна (добавьте !, чтобы обойти проверку)"
 
 msgid "E214: Can't find temp file for writing"
 msgstr "E214: Временный файл для записи не найден"
 
 msgid "E213: Cannot convert (add ! to write without conversion)"
-msgstr "E213: Перекодировка невозможна (! для записи без перекодировки)"
+msgstr ""
+"E213: Перекодировка невозможна (добавьте ! для записи без перекодировки)"
 
 msgid "E166: Can't open linked file for writing"
 msgstr "E166: Невозможно открыть связанный файл для записи"
@@ -1396,15 +1752,29 @@
 msgid "E512: Close failed"
 msgstr "E512: Операция закрытия не удалась"
 
-msgid "E513: write error, conversion failed"
-msgstr "E513: Ошибка записи, преобразование не удалось"
+msgid "E513: write error, conversion failed (make 'fenc' empty to override)"
+msgstr ""
+"E513: Ошибка записи, преобразование не удалось (очистите 'fenc', чтобы "
+"обойти)"
+
+#, c-format
+msgid ""
+"E513: write error, conversion failed in line %ld (make 'fenc' empty to "
+"override)"
+msgstr ""
+"E513: Ошибка записи, преобразование не удалось на строке %ld (очистите "
+"'fenc', чтобы обойти)"
 
 msgid "E514: write error (file system full?)"
-msgstr "E514: ошибка записи (нет свободного места?)"
+msgstr "E514: Ошибка записи (нет свободного места?)"
 
 msgid " CONVERSION ERROR"
 msgstr " ОШИБКА ПРЕОБРАЗОВАНИЯ"
 
+#, c-format
+msgid " in line %ld;"
+msgstr " на строке %ld;"
+
 msgid "[Device]"
 msgstr "[Устройство]"
 
@@ -1412,13 +1782,13 @@
 msgstr "[Новый]"
 
 msgid " [a]"
-msgstr " [a]"
+msgstr " [д]"
 
 msgid " appended"
 msgstr " добавлено"
 
 msgid " [w]"
-msgstr " [w]"
+msgstr " [з]"
 
 msgid " written"
 msgstr " записано"
@@ -1472,6 +1842,11 @@
 msgstr "1 символ"
 
 #, c-format
+msgid "%lld characters"
+msgstr "символов: %lld"
+
+#. Explicit typecast avoids warning on Mac OS X 10.6
+#, c-format
 msgid "%ld characters"
 msgstr "символов: %ld"
 
@@ -1506,8 +1881,8 @@
 msgstr "E246: Буфер удалён при выполнении автокоманды FileChangedShell"
 
 #, c-format
-msgid "E211: Warning: File \"%s\" no longer available"
-msgstr "E211: Предупреждение: файл \"%s\" больше не доступен"
+msgid "E211: File \"%s\" no longer available"
+msgstr "E211: Файл \"%s\" больше не доступен"
 
 #, c-format
 msgid ""
@@ -1517,25 +1892,31 @@
 "W12: Предупреждение: файл \"%s\" и буфер Vim были изменены независимо друг "
 "от друга"
 
+msgid "See \":help W12\" for more info."
+msgstr "См. \":help W12\" для дополнительной информации."
+
 #, c-format
 msgid "W11: Warning: File \"%s\" has changed since editing started"
 msgstr ""
 "W11: Предупреждение: файл \"%s\" был изменён после начала редактирования"
 
+msgid "See \":help W11\" for more info."
+msgstr "См. \":help W11\" для дополнительной информации."
+
 #, c-format
 msgid "W16: Warning: Mode of file \"%s\" has changed since editing started"
 msgstr ""
 "W16: Предупреждение: режим доступа к файлу \"%s\" был изменён после начала "
 "редактирования"
 
+msgid "See \":help W16\" for more info."
+msgstr "См. \":help W16\" для дополнительной информации."
+
 #, c-format
 msgid "W13: Warning: File \"%s\" has been created after editing started"
 msgstr ""
 "W13: Предупреждение: файл \"%s\" был создан после начала редактирования"
 
-msgid "See \":help W11\" for more info."
-msgstr "См. дополнительную информацию в \":help W11\"."
-
 msgid "Warning"
 msgstr "Предупреждение"
 
@@ -1544,7 +1925,7 @@
 "&Load File"
 msgstr ""
 "&OK\n"
-"&Загрузить файл"
+"&L Загрузить файл"
 
 #, c-format
 msgid "E462: Could not prepare for reloading \"%s\""
@@ -1557,6 +1938,10 @@
 msgid "--Deleted--"
 msgstr "--Удалено--"
 
+#, c-format
+msgid "auto-removing autocommand: %s <buffer=%d>"
+msgstr "авто-удаление автокоманды: %s <буффер=%d>"
+
 #. the group doesn't exist
 #, c-format
 msgid "E367: No such group: \"%s\""
@@ -1582,6 +1967,10 @@
 "\n"
 "--- Автокоманды ---"
 
+#, c-format
+msgid "E680: <buffer=%d>: invalid buffer number "
+msgstr "E680: <buffer=%d>: неправильный номер буфера "
+
 msgid "E217: Can't execute autocommands for ALL events"
 msgstr "E217: Невозможно выполнить автокоманды для ВСЕХ событий"
 
@@ -1599,7 +1988,6 @@
 msgid "Executing %s"
 msgstr "Выполнение %s"
 
-#. always scroll up, don't overwrite
 #, c-format
 msgid "autocommand %s"
 msgstr "автокоманда %s"
@@ -1621,27 +2009,31 @@
 msgstr ""
 "E351: Складка не может быть удалена с текущим значением опции 'foldmethod'"
 
+#, c-format
+msgid "+--%3ld lines folded "
+msgstr "+--%3ld строк в складке"
+
 msgid "E222: Add to read buffer"
 msgstr "E222: Добавление в буфер чтения"
 
 msgid "E223: recursive mapping"
-msgstr "E223: рекурсивная привязка"
+msgstr "E223: Рекурсивная привязка"
 
 #, c-format
 msgid "E224: global abbreviation already exists for %s"
-msgstr "E224: уже есть глобальное сокращение для %s"
+msgstr "E224: Уже есть глобальное сокращение для %s"
 
 #, c-format
 msgid "E225: global mapping already exists for %s"
-msgstr "E225: уже есть глобальная привязка для %s"
+msgstr "E225: Уже есть глобальная привязка для %s"
 
 #, c-format
 msgid "E226: abbreviation already exists for %s"
-msgstr "E226: уже есть сокращение для %s"
+msgstr "E226: Уже есть сокращение для %s"
 
 #, c-format
 msgid "E227: mapping already exists for %s"
-msgstr "E227: уже есть привязка для %s"
+msgstr "E227: Уже есть привязка для %s"
 
 msgid "No abbreviation found"
 msgstr "Сокращения не найдены"
@@ -1652,6 +2044,12 @@
 msgid "E228: makemap: Illegal mode"
 msgstr "E228: makemap: недопустимый режим"
 
+msgid "E851: Failed to create a new process for the GUI"
+msgstr "E851: Невозможно создать новый процесс для граф. интерфейса"
+
+msgid "E852: The child process failed to start the GUI"
+msgstr "E852: Процессу-потомку не удалось запустить граф. интерфейс"
+
 msgid "E229: Cannot start the GUI"
 msgstr "E229: Невозможно перейти в режим графического интерфейса"
 
@@ -1664,15 +2062,18 @@
 "E665: Невозможно перейти в режим граф. интерфейса, неправильно заданы шрифты"
 
 msgid "E231: 'guifontwide' invalid"
-msgstr "E231: неправильное значение опции 'guifontwide'"
+msgstr "E231: Неправильное значение опции 'guifontwide'"
 
 msgid "E599: Value of 'imactivatekey' is invalid"
-msgstr "E599: неправильное значение опции 'imactivatekey'"
+msgstr "E599: Неправильное значение опции 'imactivatekey'"
 
 #, c-format
 msgid "E254: Cannot allocate color %s"
 msgstr "E254: Невозможно назначить цвет %s"
 
+msgid "No match at cursor, finding next"
+msgstr "Нет совпадения под курсором, поиск следующего"
+
 msgid "<cannot open> "
 msgstr "<нельзя открыть> "
 
@@ -1706,9 +2107,6 @@
 "E232: \"Пузырь\" для вычислений, включающий и сообщение, и обратный вызов, "
 "не может быть создан"
 
-msgid "Vim dialog..."
-msgstr "Диалоговое окно Vim..."
-
 msgid ""
 "&Yes\n"
 "&No\n"
@@ -1722,10 +2120,10 @@
 msgstr "Методы Ввода"
 
 msgid "VIM - Search and Replace..."
-msgstr "VIM - Поиск и замена..."
+msgstr "VIM — Поиск и замена..."
 
 msgid "VIM - Search..."
-msgstr "VIM - Поиск..."
+msgstr "VIM — Поиск..."
 
 msgid "Find what:"
 msgstr "Что ищем:"
@@ -1751,45 +2149,70 @@
 msgid "Down"
 msgstr "Вниз"
 
+#. 'Find Next' button
 msgid "Find Next"
 msgstr "Найти следующее"
 
+#. 'Replace' button
 msgid "Replace"
 msgstr "Замена"
 
+#. 'Replace All' button
 msgid "Replace All"
 msgstr "Заменить все"
 
 msgid "Vim: Received \"die\" request from session manager\n"
 msgstr "Vim: Получен запрос на прекращение работы от диспетчера сеансов\n"
 
+msgid "Close"
+msgstr "Закрыть"
+
+msgid "New tab"
+msgstr "Новая вкладка"
+
+msgid "Open Tab..."
+msgstr "Открыть вкладку..."
+
 msgid "Vim: Main window unexpectedly destroyed\n"
 msgstr "Vim: Основное окно было неожиданно закрыто\n"
 
-msgid "Font Selection"
-msgstr "Выбор шрифта"
+msgid "&Filter"
+msgstr "&Фильтр"
 
-msgid "Used CUT_BUFFER0 instead of empty selection"
-msgstr "Вместо пустого выделения используется CUT_BUFFER0"
-
-msgid "Filter"
-msgstr "Фильтр"
+msgid "&Cancel"
+msgstr "О&тмена"
 
 msgid "Directories"
 msgstr "Каталоги"
 
-msgid "Help"
-msgstr "Справка"
+msgid "Filter"
+msgstr "Фильтр"
+
+msgid "&Help"
+msgstr "&Справка"
 
 msgid "Files"
 msgstr "Файлы"
 
+msgid "&OK"
+msgstr "&Да"
+
 msgid "Selection"
 msgstr "Выделение"
 
-msgid "Undo"
-msgstr "Отмена"
+msgid "Find &Next"
+msgstr "Найти &следующее"
 
+msgid "&Replace"
+msgstr "За&мена"
+
+msgid "Replace &All"
+msgstr "Заменить &все"
+
+msgid "&Undo"
+msgstr "О&тмена"
+
+#, c-format
 msgid "E671: Cannot find window title \"%s\""
 msgstr "E671: Окно с заголовком \"%s\" не обнаружено"
 
@@ -1800,20 +2223,34 @@
 msgid "E672: Unable to open window inside MDI application"
 msgstr "E672: Невозможно открыть окно внутри приложения MDI"
 
+msgid "Close tab"
+msgstr "Закрыть вкладку"
+
+msgid "Open tab..."
+msgstr "Открыть вкладку..."
+
 msgid "Find string (use '\\\\' to find  a '\\')"
 msgstr "Поиск строки (используйте '\\\\' для поиска '\\')"
 
 msgid "Find & Replace (use '\\\\' to find  a '\\')"
 msgstr "Поиск и замена (используйте '\\\\' для поиска '\\')"
 
+#. We fake this: Use a filter that doesn't select anything and a default
+#. * file name that won't be used.
+msgid "Not Used"
+msgstr "Не используется"
+
+msgid "Directory\t*.nothing\n"
+msgstr "Каталог\t*.ничего\n"
+
 msgid "Vim E458: Cannot allocate colormap entry, some colors may be incorrect"
 msgstr ""
-"Vim E458: невозможно выделить запись в таблице цвета, некоторые цветамогут "
+"Vim E458: Невозможно выделить запись в таблице цвета, некоторые цвета могут "
 "отображаться неправильно"
 
 #, c-format
 msgid "E250: Fonts for the following charsets are missing in fontset %s:"
-msgstr "E250: в наборе шрифтов %s отсутствуют шрифты для следующих кодировок:"
+msgstr "E250: В наборе шрифтов %s отсутствуют шрифты для следующих кодировок:"
 
 #, c-format
 msgid "E252: Fontset name: %s"
@@ -1851,9 +2288,133 @@
 "Ширина шрифта font1: %ld\n"
 "\n"
 
+msgid "Invalid font specification"
+msgstr "Неправильное определение шрифта"
+
+msgid "&Dismiss"
+msgstr "О&тклонить"
+
+msgid "no specific match"
+msgstr "нет специального совпадения"
+
+msgid "Vim - Font Selector"
+msgstr "Vim — Выбор шрифта"
+
+msgid "Name:"
+msgstr "Название:"
+
+#. create toggle button
+msgid "Show size in Points"
+msgstr "Показывать размер в пунктах"
+
+msgid "Encoding:"
+msgstr "Кодировка:"
+
+msgid "Font:"
+msgstr "Шрифт:"
+
+msgid "Style:"
+msgstr "Стиль:"
+
+msgid "Size:"
+msgstr "Размер:"
+
 msgid "E256: Hangul automata ERROR"
 msgstr "E256: ОШИБКА автоматики Хангыл"
 
+msgid "E550: Missing colon"
+msgstr "E550: Пропущено двоеточие"
+
+msgid "E551: Illegal component"
+msgstr "E551: Недопустимый компонент"
+
+msgid "E552: digit expected"
+msgstr "E552: Требуется указать цифру"
+
+#, c-format
+msgid "Page %d"
+msgstr "Страница %d"
+
+msgid "No text to be printed"
+msgstr "Печатать нечего"
+
+#, c-format
+msgid "Printing page %d (%d%%)"
+msgstr "Печать стр. %d (%d%%)"
+
+#, c-format
+msgid " Copy %d of %d"
+msgstr " Копия %d из %d"
+
+#, c-format
+msgid "Printed: %s"
+msgstr "Напечатано: %s"
+
+msgid "Printing aborted"
+msgstr "Печать прекращена"
+
+msgid "E455: Error writing to PostScript output file"
+msgstr "E455: Ошибка записи в файл PostScript"
+
+#, c-format
+msgid "E624: Can't open file \"%s\""
+msgstr "E624: Невозможно открыть файл \"%s\""
+
+#, c-format
+msgid "E457: Can't read PostScript resource file \"%s\""
+msgstr "E457: Невозможно прочитать файл ресурсов PostScript \"%s\""
+
+#, c-format
+msgid "E618: file \"%s\" is not a PostScript resource file"
+msgstr "E618: Файл \"%s\" не является файлом ресурсов PostScript"
+
+#, c-format
+msgid "E619: file \"%s\" is not a supported PostScript resource file"
+msgstr "E619: Файл \"%s\" не является допустимым файлом ресурсов PostScript"
+
+#, c-format
+msgid "E621: \"%s\" resource file has wrong version"
+msgstr "E621: Файл ресурсов \"%s\" неизвестной версии"
+
+msgid "E673: Incompatible multi-byte encoding and character set."
+msgstr "E673: Несовместимые многобайтовая кодировка и набор символов."
+
+msgid "E674: printmbcharset cannot be empty with multi-byte encoding."
+msgstr "E674: printmbcharset не может быть пустым при многобайтовой кодировке."
+
+msgid "E675: No default font specified for multi-byte printing."
+msgstr "E675: Нет определения шрифта по умолчанию для многобайтовой печати."
+
+msgid "E324: Can't open PostScript output file"
+msgstr "E324: Невозможно открыть файл PostScript"
+
+#, c-format
+msgid "E456: Can't open file \"%s\""
+msgstr "E456: Невозможно открыть файл \"%s\""
+
+msgid "E456: Can't find PostScript resource file \"prolog.ps\""
+msgstr "E456: Файл ресурсов PostScript \"prolog.ps\" не найден"
+
+msgid "E456: Can't find PostScript resource file \"cidfont.ps\""
+msgstr "E456: Файл ресурсов PostScript \"cidfont.ps\" не найден"
+
+#, c-format
+msgid "E456: Can't find PostScript resource file \"%s.ps\""
+msgstr "E456: Файл ресурсов PostScript \"%s.ps\" не найден"
+
+#, c-format
+msgid "E620: Unable to convert to print encoding \"%s\""
+msgstr "E620: Невозможно преобразовать в кодировку печать \"%s\""
+
+msgid "Sending to printer..."
+msgstr "Отправка на печать..."
+
+msgid "E365: Failed to print PostScript file"
+msgstr "E365: Не удалось выполнить печать файла PostScript"
+
+msgid "Print job sent."
+msgstr "Задание на печать отправлено."
+
 msgid "Add a new database"
 msgstr "Добавить новую базу данных"
 
@@ -1887,10 +2448,10 @@
 
 #, c-format
 msgid "E563: stat(%s) error: %d"
-msgstr "E563: ошибка stat(%s): %d"
+msgstr "E563: Ошибка stat(%s): %d"
 
 msgid "E563: stat error"
-msgstr "E563: ошибка stat"
+msgstr "E563: Ошибка stat"
 
 #, c-format
 msgid "E564: %s is not a directory or a valid cscope database"
@@ -1902,10 +2463,10 @@
 
 #, c-format
 msgid "E262: error reading cscope connection %ld"
-msgstr "E262: ошибка получения информации от соединения cscope %ld"
+msgstr "E262: Ошибка получения информации от соединения cscope %ld"
 
 msgid "E561: unknown cscope search type"
-msgstr "E561: неизвестный тип поиска cscope"
+msgstr "E561: Неизвестный тип поиска cscope"
 
 msgid "E566: Could not create cscope pipes"
 msgstr "E566: Невозможно создать трубу для cscope"
@@ -1916,49 +2477,67 @@
 msgid "cs_create_connection exec failed"
 msgstr "не удалось выполнить cs_create_connection"
 
-msgid "E623: Could not spawn cscope process"
-msgstr "E623: Не удалось запустить процесс cscope"
-
 msgid "cs_create_connection: fdopen for to_fp failed"
 msgstr "cs_create_connection: не удалось выполнить fdopen для to_fp"
 
 msgid "cs_create_connection: fdopen for fr_fp failed"
 msgstr "cs_create_connection: не удалось выполнить fdopen для fr_fp"
 
-msgid "E567: no cscope connections"
-msgstr "E567: соединений с cscope не создано"
+msgid "E623: Could not spawn cscope process"
+msgstr "E623: Не удалось запустить процесс cscope"
 
-#, c-format
-msgid "E259: no matches found for cscope query %s of %s"
-msgstr "E259: не найдено соответствий по запросу cscope %s для %s"
+msgid "E567: no cscope connections"
+msgstr "E567: Соединений с cscope не создано"
 
 #, c-format
 msgid "E469: invalid cscopequickfix flag %c for %c"
-msgstr "E469: неправильный флаг cscopequickfix %c для %c"
-
-msgid "cscope commands:\n"
-msgstr "команды cscope:\n"
+msgstr "E469: Неправильный флаг cscopequickfix %c для %c"
 
 #, c-format
-msgid "%-5s: %-30s (Usage: %s)"
-msgstr "%-5s: %-30s (Использование: %s)"
+msgid "E259: no matches found for cscope query %s of %s"
+msgstr "E259: Не найдено соответствий по запросу cscope %s для %s"
+
+msgid "cscope commands:\n"
+msgstr "Команды cscope:\n"
+
+#, c-format
+msgid "%-5s: %s%*s (Usage: %s)"
+msgstr "%-5s: %s%*s (использование: %s)"
+
+msgid ""
+"\n"
+"       c: Find functions calling this function\n"
+"       d: Find functions called by this function\n"
+"       e: Find this egrep pattern\n"
+"       f: Find this file\n"
+"       g: Find this definition\n"
+"       i: Find files #including this file\n"
+"       s: Find this C symbol\n"
+"       t: Find this text string\n"
+msgstr ""
+"\n"
+"       c: Найти функции вызывающие эту функцию\n"
+"       d: Найти функции вызываемые этой функцией\n"
+"       e: Найти этот шаблон egrep\n"
+"       f: Найти этот файл\n"
+"       g: Найти это определение\n"
+"       i: Найти файлы включающие (#include) этот файл\n"
+"       s: Найти этот C-символ\n"
+"       t: Найти эту текстовую строку\n"
 
 #, c-format
 msgid "E625: cannot open cscope database: %s"
-msgstr "E625: невозможно открыть базу данных cscope: %s"
+msgstr "E625: Невозможно открыть базу данных cscope: %s"
 
 msgid "E626: cannot get cscope database information"
-msgstr "E626: информация о базе данных cscope не доступна"
+msgstr "E626: Информация о базе данных cscope не доступна"
 
 msgid "E568: duplicate cscope database not added"
-msgstr "E568: данная база данных cscope уже подсоединена"
-
-msgid "E569: maximum number of cscope connections reached"
-msgstr "E569: достигнуто максимальное значение открытых соединений с cscope"
+msgstr "E568: Данная база данных cscope уже подсоединена"
 
 #, c-format
 msgid "E261: cscope connection %s not found"
-msgstr "E261: соединение с cscope %s не обнаружено"
+msgstr "E261: Соединение с cscope %s не обнаружено"
 
 #, c-format
 msgid "cscope connection %s closed"
@@ -1966,7 +2545,7 @@
 
 #. should not reach here
 msgid "E570: fatal error in cs_manage_matches"
-msgstr "E570: критическая ошибка в cs_manage_matches"
+msgstr "E570: Критическая ошибка в cs_manage_matches"
 
 #, c-format
 msgid "Cscope tag: %s"
@@ -1995,30 +2574,18 @@
 msgid " # pid    database name                       prepend path\n"
 msgstr " # pid    база данных                         начальный путь\n"
 
+msgid "Lua library cannot be loaded."
+msgstr "Библиотека Lua не может быть загружена."
+
+msgid "cannot save undo information"
+msgstr "невозможно сохранить информацию об отмене операции"
+
 msgid ""
-"E263: Sorry, this command is disabled, the Python library could not be "
+"E815: Sorry, this command is disabled, the MzScheme libraries could not be "
 "loaded."
 msgstr ""
-"E263: К сожалению эта команда не работает, поскольку не загружена библиотека "
-"Python"
-
-msgid "E659: Cannot invoke Python recursively"
-msgstr "E659: Невозможно выполнить рекурсивный вызов Python"
-
-msgid "can't delete OutputObject attributes"
-msgstr "невозможно удалить атрибуты OutputObject"
-
-msgid "softspace must be an integer"
-msgstr "значение softspace должно быть целым числом"
-
-msgid "invalid attribute"
-msgstr "неправильный атрибут"
-
-msgid "writelines() requires list of strings"
-msgstr "writelines() требует указания списка строк"
-
-msgid "E264: Python: Error initialising I/O objects"
-msgstr "E264: Python: Ошибка инициализации объектов I/O"
+"E815: К сожалению эта команда не работает, поскольку не загружена библиотека "
+"MzScheme"
 
 msgid "invalid expression"
 msgstr "неправильное выражение"
@@ -2026,48 +2593,17 @@
 msgid "expressions disabled at compile time"
 msgstr "выражения отключены при компиляции"
 
-msgid "attempt to refer to deleted buffer"
-msgstr "попытка сослаться на уничтоженный буфер"
+msgid "hidden option"
+msgstr "скрытая опция"
 
-msgid "line number out of range"
-msgstr "запредельный номер строки"
+msgid "unknown option"
+msgstr "неизвестная опция"
 
-#, c-format
-msgid "<buffer object (deleted) at %8lX>"
-msgstr "<объект буфера (удален) в %8lX>"
+msgid "window index is out of range"
+msgstr "индекс окна за пределами диапазона"
 
-msgid "invalid mark name"
-msgstr "неправильное имя отметки"
-
-msgid "no such buffer"
-msgstr "нет такого буфера"
-
-msgid "attempt to refer to deleted window"
-msgstr "попытка сослаться на закрытое окно"
-
-msgid "readonly attribute"
-msgstr "атрибут доступен только для чтения"
-
-msgid "cursor position outside buffer"
-msgstr "позиция курсора находится вне буфера"
-
-#, c-format
-msgid "<window object (deleted) at %.8lX>"
-msgstr "<объект окна (удален) в %.8lX>"
-
-#, c-format
-msgid "<window object (unknown) at %.8lX>"
-msgstr "<объект окна (неизвестен) в %.8lX>"
-
-#, c-format
-msgid "<window %d>"
-msgstr "<окно %d>"
-
-msgid "no such window"
-msgstr "нет такого окна"
-
-msgid "cannot save undo information"
-msgstr "невозможно сохранить информацию об отмене операции"
+msgid "couldn't open buffer"
+msgstr "невозможно открыть буфер"
 
 msgid "cannot delete line"
 msgstr "невозможно удалить строку"
@@ -2081,36 +2617,115 @@
 msgid "string cannot contain newlines"
 msgstr "строка не может содержать символ новой строки"
 
+msgid "error converting Scheme values to Vim"
+msgstr "невозможно преобразовать значения Scheme в Vim"
+
+msgid "Vim error: ~a"
+msgstr "ошибка Vim: ~a"
+
+msgid "Vim error"
+msgstr "ошибка Vim"
+
+msgid "buffer is invalid"
+msgstr "неправильный буфер"
+
+msgid "window is invalid"
+msgstr "неправильное окно"
+
+msgid "linenr out of range"
+msgstr "номер строки за пределами диапазона"
+
+msgid "not allowed in the Vim sandbox"
+msgstr "не допускается в песочнице Vim"
+
+msgid "E836: This Vim cannot execute :python after using :py3"
+msgstr "E836: Данный Vim не может выполнить :python после использования :py3"
+
+msgid "only string keys are allowed"
+msgstr "допустимы только строковые ключи"
+
+msgid ""
+"E263: Sorry, this command is disabled, the Python library could not be "
+"loaded."
+msgstr ""
+"E263: К сожалению эта команда не работает, поскольку не загружена библиотека "
+"Python"
+
+msgid "E659: Cannot invoke Python recursively"
+msgstr "E659: Невозможно выполнить рекурсивный вызов Python"
+
+msgid "E858: Eval did not return a valid python object"
+msgstr "E858: Eval не возвратил допустимого объекта Python"
+
+msgid "E859: Failed to convert returned python object to vim value"
+msgstr ""
+"E859: Не удалось преобразовать возвращённый объект Python в значение VIM"
+
+#, c-format
+msgid "<buffer object (deleted) at %p>"
+msgstr "<объект буфера (удален) в %p>"
+
+msgid "E837: This Vim cannot execute :py3 after using :python"
+msgstr "E837: Данный Vim не может выполнить :py3 после использования :python"
+
+msgid "E860: Eval did not return a valid python 3 object"
+msgstr "E860: Eval не возвратил допустимого объекта Python 3"
+
+msgid "E861: Failed to convert returned python 3 object to vim value"
+msgstr ""
+"E861: Не удалось преобразовать возвращённый объект Python 3 в значение VIM"
+
+msgid "E265: $_ must be an instance of String"
+msgstr "E265: $_ должен быть экземпляром или строкой"
+
 msgid ""
 "E266: Sorry, this command is disabled, the Ruby library could not be loaded."
 msgstr ""
 "E266: К сожалению эта команда не работает, поскольку не загружена библиотека "
-"Ruby."
+"Ruby"
+
+msgid "E267: unexpected return"
+msgstr "E267: Неожиданный return"
+
+msgid "E268: unexpected next"
+msgstr "E268: Неожиданный next"
+
+msgid "E269: unexpected break"
+msgstr "E269: Неожиданный break"
+
+msgid "E270: unexpected redo"
+msgstr "E270: Неожиданный redo"
+
+msgid "E271: retry outside of rescue clause"
+msgstr "E271: retry вне оператора rescue"
+
+msgid "E272: unhandled exception"
+msgstr "E272: Необработанное исключение"
 
 #, c-format
 msgid "E273: unknown longjmp status %d"
-msgstr "E273: неизвестное состояние longjmp %d"
+msgstr "E273: Неизвестное состояние longjmp %d"
 
 msgid "Toggle implementation/definition"
 msgstr "Переключение между реализацией/определением"
 
 msgid "Show base class of"
-msgstr "Показать базовый класс "
+msgstr "Показать основной класс"
 
 msgid "Show overridden member function"
 msgstr "Показать перегруженные функции"
 
 msgid "Retrieve from file"
-msgstr "Получение из файла"
+msgstr "Получить из файла"
 
 msgid "Retrieve from project"
-msgstr "Получение из проекта"
+msgstr "Получить из проекта"
 
 msgid "Retrieve from all projects"
-msgstr "Получение из всех проектов"
+msgstr "Получить из всех проектов"
 
 msgid "Retrieve"
-msgstr "Получение"
+msgstr "Получить"
 
 msgid "Show source of"
 msgstr "Показать исходный код"
@@ -2186,13 +2801,13 @@
 msgid "not implemented yet"
 msgstr "пока не реализовано"
 
-msgid "unknown option"
-msgstr "неизвестная опция"
-
 #. ???
 msgid "cannot set line(s)"
 msgstr "невозможно назначить строку или строки"
 
+msgid "invalid mark name"
+msgstr "неправильное имя отметки"
+
 msgid "mark not set"
 msgstr "отметка не установлена"
 
@@ -2203,6 +2818,9 @@
 msgid "cannot insert/append line"
 msgstr "невозможно вставить или добавить строку"
 
+msgid "line number out of range"
+msgstr "номер строки за пределами диапазона"
+
 msgid "unknown flag: "
 msgstr "неизвестный флаг: "
 
@@ -2213,7 +2831,7 @@
 msgstr "клавиатурное прерывание"
 
 msgid "vim error"
-msgstr "ошибка vim"
+msgstr "ошибка VIM"
 
 msgid "cannot create buffer/window command: object is being deleted"
 msgstr "невозможно создать команду буфера или окна: объект в процессе удаления"
@@ -2243,11 +2861,9 @@
 "E571: К сожалению эта команда не работает, поскольку не загружена библиотека "
 "Tcl"
 
-msgid ""
-"E281: TCL ERROR: exit code is not int!? Please report this to vim-dev@vim.org"
-msgstr ""
-"E281: ОШИБКА TCL: Код выхода не является целым числом?! Сообщите об этом в "
-"vim-dev@vim.org"
+#, c-format
+msgid "E572: exit code %d"
+msgstr "E572: Код выхода %d"
 
 msgid "cannot get line"
 msgstr "невозможно получить строку"
@@ -2256,7 +2872,7 @@
 msgstr "Невозможно зарегистрировать имя сервера команд"
 
 msgid "E248: Failed to send command to the destination program"
-msgstr "E248: Отправка команды в другую программу не удалась"
+msgstr "E248: Не удалась отправка команды в другую программу"
 
 #, c-format
 msgid "E573: Invalid server id used: %s"
@@ -2267,29 +2883,39 @@
 "E251: Неправильно сформировано значение данного процесса VIM в реестре. "
 "Удалено!"
 
-msgid "Unknown option"
-msgstr "Неизвестный аргумент"
+msgid "Unknown option argument"
+msgstr "Неизвестный необязательный параметр"
 
 msgid "Too many edit arguments"
-msgstr "Слишком много аргументов редактирования"
+msgstr "Слишком много параметров редактирования"
 
 msgid "Argument missing after"
-msgstr "Пропущен аргумент после"
+msgstr "Пропущен параметр после"
 
-msgid "Garbage after option"
-msgstr "Мусор после аргумента"
+msgid "Garbage after option argument"
+msgstr "Мусор после необязательного параметра"
 
 msgid "Too many \"+command\", \"-c command\" or \"--cmd command\" arguments"
 msgstr ""
-"Слишком много аргументов \"+команда\", \"-c команда\" или \"--cmd команда\""
+"Слишком много параметров \"+команда\", \"-c команда\" или \"--cmd команда\""
 
 msgid "Invalid argument for"
-msgstr "Недопустимые аргументы для"
+msgstr "Недопустимый параметр для"
+
+#, c-format
+msgid "%d files to edit\n"
+msgstr "Файлов для редактирования: %d\n"
+
+msgid "netbeans is not supported with this GUI\n"
+msgstr "NetBeans не поддерживается с этим графическим интерфейсом\n"
 
 msgid "This Vim was not compiled with the diff feature."
 msgstr ""
 "Данный Vim был скомпилирован с выключенной особенностью просмотра отличий"
 
+msgid "'-nb' cannot be used: not enabled at compile time\n"
+msgstr "Невозможно использовать '-nb': не включено при компиляции\n"
+
 msgid "Attempt to open script file again: \""
 msgstr "Попытка повторного открытия файла сценария: \""
 
@@ -2299,9 +2925,8 @@
 msgid "Cannot open for script output: \""
 msgstr "Невозможно открыть для вывода сценария: \""
 
-#, c-format
-msgid "%d files to edit\n"
-msgstr "Файлов для редактирования: %d\n"
+msgid "Vim: Error: Failure to start gvim from NetBeans\n"
+msgstr "Vim: Ошибка: Не удалось запустить gvim из NetBeans\n"
 
 msgid "Vim: Warning: Output is not to a terminal\n"
 msgstr "Vim: Предупреждение: Вывод осуществляется не на терминал\n"
@@ -2328,13 +2953,16 @@
 msgstr "[файл ..] редактирование указанных файлов"
 
 msgid "-               read text from stdin"
-msgstr "-                чтение текста из потока ввода stdin"
+msgstr "-           чтение текста из потока ввода stdin"
 
 msgid "-t tag          edit file where tag is defined"
-msgstr "-t метка         редактирование файла с указанной меткой"
+msgstr "-t метка    редактирование файла с указанной меткой"
 
+# \n\t\t.. для умещения в 80 столбцов
 msgid "-q [errorfile]  edit file with first error"
-msgstr "-q [файл ошибок] редактирование файла с первой ошибкой"
+msgstr ""
+"-q [файл-ошибок]\n"
+"\t\t\t\t    редактирование файла с первой ошибкой"
 
 msgid ""
 "\n"
@@ -2346,7 +2974,7 @@
 "Использование:"
 
 msgid " vim [arguments] "
-msgstr " vim [аргументы] "
+msgstr " vim [параметры] "
 
 msgid ""
 "\n"
@@ -2357,12 +2985,19 @@
 
 msgid ""
 "\n"
+"Where case is ignored prepend / to make flag upper case"
+msgstr ""
+"\n"
+"Если регистр игнорируется, добавьте перед флагом / для верхнего регистра"
+
+msgid ""
+"\n"
 "\n"
 "Arguments:\n"
 msgstr ""
 "\n"
 "\n"
-"Аргументы:\n"
+"Параметры:\n"
 
 msgid "--\t\t\tOnly file names after this"
 msgstr "--\t\t\tДалее указываются только имена файлов"
@@ -2388,6 +3023,9 @@
 msgid "-e\t\t\tEx mode (like \"ex\")"
 msgstr "-e\t\t\tРежим Ex (как \"ex\")"
 
+msgid "-E\t\t\tImproved Ex mode"
+msgstr "-E\t\t\tУлучшенный режим Ex"
+
 msgid "-s\t\t\tSilent (batch) mode (only for \"ex\")"
 msgstr "-s\t\t\tТихий (пакетный) режим (только для \"ex\")"
 
@@ -2410,7 +3048,7 @@
 msgstr "-M\t\t\tБез возможности внесения изменений в текст"
 
 msgid "-b\t\t\tBinary mode"
-msgstr "-b\t\t\tБинарный режим"
+msgstr "-b\t\t\tДвоичный режим"
 
 msgid "-l\t\t\tLisp mode"
 msgstr "-l\t\t\tРежим Lisp"
@@ -2421,8 +3059,11 @@
 msgid "-N\t\t\tNot fully Vi compatible: 'nocompatible'"
 msgstr "-N\t\t\tРежим неполной совместимости с Vi: 'nocompatible'"
 
-msgid "-V[N]\t\tVerbose level"
-msgstr "-V[N]\t\tУровень подробности сообщений"
+# \n\t\t.. для умещения в 80 столбцов
+msgid "-V[N][fname]\t\tBe verbose [level N] [log messages to fname]"
+msgstr ""
+"-V[N][файл]\t\tВыводить дополнительные сообщения\n"
+"\t\t\t\t[уровень N] [записывать в файл]"
 
 msgid "-D\t\t\tDebugging mode"
 msgstr "-D\t\t\tРежим отладки"
@@ -2466,8 +3107,17 @@
 msgid "--noplugin\t\tDon't load plugin scripts"
 msgstr "--noplugin\t\tНе загружать сценарии модулей"
 
+# \n\t\t.. для умещения в 80 столбцов
+msgid "-p[N]\t\tOpen N tab pages (default: one for each file)"
+msgstr ""
+"-p[N]\t\tОткрыть N вкладок (по умолчанию: по одной\n"
+"\t\t\t\tна каждый файл)"
+
+# \n\t\t.. для умещения в 80 столбцов
 msgid "-o[N]\t\tOpen N windows (default: one for each file)"
-msgstr "-o[N]\t\tОткрыть N окон (по умолчанию: по одному на каждый файл)"
+msgstr ""
+"-o[N]\t\tОткрыть N окон (по умолчанию: по одному\n"
+"\t\t\t\tна каждый файл)"
 
 msgid "-O[N]\t\tLike -o but split vertically"
 msgstr "-O[N]\t\tТо же, что и -o, но с вертикальным разделением окон"
@@ -2484,11 +3134,17 @@
 msgid "-c <command>\t\tExecute <command> after loading the first file"
 msgstr "-c <команда>\t\tВыполнить <команду> после загрузки первого файла"
 
+# \n\t\t.. для умещения в 80 столбцов
 msgid "-S <session>\t\tSource file <session> after loading the first file"
-msgstr "-S <сеанс>\t\tПрочитать сценарий <сеанса> после загрузки первого файла"
+msgstr ""
+"-S <сеанс>\t\tПрочитать сценарий <сеанса> после загрузки\n"
+"\t\t\t\tпервого файла"
 
+# \n\t\t.. для умещения в 80 столбцов
 msgid "-s <scriptin>\tRead Normal mode commands from file <scriptin>"
-msgstr "-s <сценарий>\tПрочитать команды Обычного режима из файла <сценария>"
+msgstr ""
+"-s <сценарий>\tПрочитать команды Обычного режима из\n"
+"\t\t\t\tфайла <сценария>"
 
 msgid "-w <scriptout>\tAppend all typed commands to file <scriptout>"
 msgstr "-w <сценарий>\tДобавлять все введённые команды в файл <сценария>"
@@ -2500,7 +3156,7 @@
 msgstr "-x\t\t\tРедактирование зашифрованных файлов"
 
 msgid "-display <display>\tConnect vim to this particular X-server"
-msgstr "-display <экран>\tПодсоединить vim к указанному серверу X"
+msgstr "-display <экран>\tПодсоединить VIM к указанному X-серверу"
 
 msgid "-X\t\t\tDo not connect to X server"
 msgstr "-X\t\t\tНе выполнять соединение с сервером X"
@@ -2521,6 +3177,11 @@
 msgstr ""
 "--remote-wait-silent <файлы>  То же, но без жалоб на отсутствие сервера"
 
+msgid ""
+"--remote-tab[-wait][-silent] <files>  As --remote but use tab page per file"
+msgstr ""
+"--remote-tab[-wait][-silent] <файлы>  То же, что и --remote, но с вкладками"
+
 msgid "--remote-send <keys>\tSend <keys> to a Vim server and exit"
 msgstr "--remote-send <кнопки>\tОтправить <кнопки> на сервер Vim и выйти"
 
@@ -2534,6 +3195,9 @@
 msgstr ""
 "--servername <имя>\tОтправить на/стать сервером Vim с указанным <именем>"
 
+msgid "--startuptime <file>\tWrite startup timing messages to <file>"
+msgstr "--startuptime <файл>\tЗаписать временную метку о запуске в <файл>"
+
 msgid "-i <viminfo>\t\tUse <viminfo> instead of .viminfo"
 msgstr "-i <viminfo>\t\tИспользовать вместо .viminfo файл <viminfo>"
 
@@ -2548,33 +3212,27 @@
 "Arguments recognised by gvim (Motif version):\n"
 msgstr ""
 "\n"
-"Аргументы для gvim (версия Motif):\n"
+"Параметры для gvim (версия Motif):\n"
 
 msgid ""
 "\n"
 "Arguments recognised by gvim (neXtaw version):\n"
 msgstr ""
 "\n"
-"Аргументы для gvim (версия neXtaw):\n"
+"Параметры для gvim (версия neXtaw):\n"
 
 msgid ""
 "\n"
 "Arguments recognised by gvim (Athena version):\n"
 msgstr ""
 "\n"
-"Аргументы для gvim (версия Athena):\n"
+"Параметры для gvim (версия Athena):\n"
 
 msgid "-display <display>\tRun vim on <display>"
-msgstr "-display <дисплей>\tЗапустить vim на указанном <дисплее>"
+msgstr "-display <дисплей>\tЗапустить VIM на указанном <дисплее>"
 
 msgid "-iconic\t\tStart vim iconified"
-msgstr "-iconic\t\tЗапустить vim в свёрнутом виде"
-
-msgid "-name <name>\t\tUse resource as if vim was <name>"
-msgstr "-name <имя>\t\tИспользовать ресурс, как если бы vim был <именем>"
-
-msgid "\t\t\t  (Unimplemented)\n"
-msgstr "\t\t\t  (Не реализовано)\n"
+msgstr "-iconic\t\tЗапустить VIM в свёрнутом виде"
 
 msgid "-background <color>\tUse <color> for the background (also: -bg)"
 msgstr ""
@@ -2618,27 +3276,14 @@
 
 msgid ""
 "\n"
-"Arguments recognised by gvim (RISC OS version):\n"
-msgstr ""
-"\n"
-"Аргументы для gvim (версия RISC OS):\n"
-
-msgid "--columns <number>\tInitial width of window in columns"
-msgstr "--columns <число>\tПервоначальная ширина окна в колонках"
-
-msgid "--rows <number>\tInitial height of window in rows"
-msgstr "--rows <число>\tПервоначальная высота окна в строках"
-
-msgid ""
-"\n"
 "Arguments recognised by gvim (GTK+ version):\n"
 msgstr ""
 "\n"
-"Аргументы для gvim (версия GTK+):\n"
+"Параметры для gvim (версия GTK+):\n"
 
 msgid "-display <display>\tRun vim on <display> (also: --display)"
 msgstr ""
-"-display <дисплей>\tЗапустить vim на указанном <дисплее> (также: --display)"
+"-display <дисплей>\tЗапустить VIM на указанном <дисплее> (также: --display)"
 
 msgid "--role <role>\tSet a unique role to identify the main window"
 msgstr ""
@@ -2647,9 +3292,15 @@
 msgid "--socketid <xid>\tOpen Vim inside another GTK widget"
 msgstr "--socketid <xid>\tОткрыть Vim внутри другого компонента GTK"
 
+msgid "--echo-wid\t\tMake gvim echo the Window ID on stdout"
+msgstr "--echo-wid\t\tВывести Window ID для gvim на стандартный поток вывода"
+
 msgid "-P <parent title>\tOpen Vim inside parent application"
 msgstr "-P <заголовок родителя>\tОткрыть Vim в родительском приложении"
 
+msgid "--windowid <HWND>\tOpen Vim inside another win32 widget"
+msgstr "--windowid <HWND>\tОткрыть Vim внутри другого компонента win32"
+
 msgid "No display"
 msgstr "Нет дисплея"
 
@@ -2702,7 +3353,6 @@
 "\n"
 "измен.  стр  кол текст"
 
-#, c-format
 msgid ""
 "\n"
 "# File marks:\n"
@@ -2711,7 +3361,6 @@
 "# Глобальные отметки:\n"
 
 #. Write the jumplist with -'
-#, c-format
 msgid ""
 "\n"
 "# Jumplist (newest first):\n"
@@ -2719,7 +3368,6 @@
 "\n"
 "# Список прыжков (сначала более свежие):\n"
 
-#, c-format
 msgid ""
 "\n"
 "# History of marks within files (newest to oldest):\n"
@@ -2748,24 +3396,14 @@
 "ввода"
 
 msgid "E288: input method doesn't support any style"
-msgstr "E288: метод ввода не поддерживает стили"
+msgstr "E288: Метод ввода не поддерживает стили"
 
 msgid "E289: input method doesn't support my preedit type"
 msgstr ""
-"E289: метод ввода не поддерживает мой тип предварительного редактирования"
-
-msgid "E290: over-the-spot style requires fontset"
-msgstr "E290: стиль \"над местом\" требует указания шрифтового набора"
-
-msgid "E291: Your GTK+ is older than 1.2.3. Status area disabled"
-msgstr ""
-"E291: GTK+ более ранней версии, чем 1.2.3. Область состояния не работает."
-
-msgid "E292: Input Method Server is not running"
-msgstr "E292: Сервер метода ввода не запущен"
+"E289: Метод ввода не поддерживает мой тип предварительного редактирования"
 
 msgid "E293: block was not locked"
-msgstr "E293: блок не заблокирован"
+msgstr "E293: Блок не заблокирован"
 
 msgid "E294: Seek error in swap file read"
 msgstr "E294: Ошибка поиска при чтении своп-файла"
@@ -2792,6 +3430,9 @@
 msgid "E298: Didn't get block nr 2?"
 msgstr "E298: Не получен блок номер 2?"
 
+msgid "E843: Error while updating swap file crypt"
+msgstr "E843: Ошибка при обновлении шифрования своп-файла"
+
 #. could not (re)open the swap file, what can we do????
 msgid "E301: Oops, lost the swap file!!!"
 msgstr "E301: Ой, потерялся своп-файл!!!"
@@ -2804,8 +3445,8 @@
 msgstr ""
 "E303: Не удалось открыть своп-файл для \"%s\", восстановление невозможно"
 
-msgid "E304: ml_timestamp: Didn't get block 0??"
-msgstr "E304: ml_timestamp: Не получен блок 0??"
+msgid "E304: ml_upd_block0(): Didn't get block 0??"
+msgstr "E304: ml_upd_block0(): Не получен блок 0??"
 
 #, c-format
 msgid "E305: No swap file found for %s"
@@ -2853,6 +3494,14 @@
 "либо файл был повреждён."
 
 #, c-format
+msgid ""
+"E833: %s is encrypted and this version of Vim does not support encryption"
+msgstr "E833: %s зашифрован, а эта версия Vim не поддерживает шифрование"
+
+msgid " has been damaged (page size is smaller than minimum value).\n"
+msgstr " был повреждён (размер страницы меньше минимального значения).\n"
+
+#, c-format
 msgid "Using swap file \"%s\""
 msgstr "Используется своп-файл \"%s\""
 
@@ -2864,6 +3513,40 @@
 msgstr "E308: Предупреждение: исходный файл мог быть изменён"
 
 #, c-format
+msgid "Swap file is encrypted: \"%s\""
+msgstr "Своп-файл зашифрован: \"%s\""
+
+msgid ""
+"\n"
+"If you entered a new crypt key but did not write the text file,"
+msgstr ""
+"\n"
+"Если вы ввели новый пароль для шифрования, но не записали текстовый файл,"
+
+msgid ""
+"\n"
+"enter the new crypt key."
+msgstr ""
+"\n"
+"то введите новый пароль для шифрования."
+
+# Перевод сообщения разделён на две части, часть первая
+msgid ""
+"\n"
+"If you wrote the text file after changing the crypt key press enter"
+msgstr ""
+"\n"
+"Если вы записали текстовый файл после изменения пароля шифрования, то нажмите"
+
+# Перевод сообщения разделён на две части, часть вторая
+msgid ""
+"\n"
+"to use the same key for text file and swap file"
+msgstr ""
+"\n"
+"Enter для использования одного ключа для текстового файла и своп-файла"
+
+#, c-format
 msgid "E309: Unable to read block 1 from %s"
 msgstr "E309: Невозможно прочитать блок 1 из %s"
 
@@ -2871,7 +3554,7 @@
 msgstr "???ОТСУТСТВУЕТ МНОГО СТРОК"
 
 msgid "???LINE COUNT WRONG"
-msgstr "???НЕПРАВИЛЬНОЕ ЗНАЧЕНИЕ СЧЕТЧИКА СТРОК"
+msgstr "???НЕПРАВИЛЬНОЕ ЗНАЧЕНИЕ СЧЁТЧИКА СТРОК"
 
 msgid "???EMPTY BLOCK"
 msgstr "???ПУСТОЙ БЛОК"
@@ -2881,7 +3564,7 @@
 
 #, c-format
 msgid "E310: Block 1 ID wrong (%s not a .swp file?)"
-msgstr "E310: неправильный блок 1 ID (%s не является файлом .swp?)"
+msgstr "E310: Неправильный блок 1 ID (%s не является файлом .swp?)"
 
 msgid "???BLOCK MISSING"
 msgstr "???ПРОПУЩЕН БЛОК"
@@ -2905,7 +3588,7 @@
 "с ???"
 
 msgid "See \":help E312\" for more information."
-msgstr "См. дополнительную информацию в справочнике (\":help E312\")"
+msgstr "См. \":help E312\" для дополнительной информации."
 
 msgid "Recovery completed. You should check if everything is OK."
 msgstr "Восстановление завершено. Проверьте, всё ли в порядке."
@@ -2917,15 +3600,23 @@
 "\n"
 "(Можете записать файл под другим именем и сравнить его с исходным\n"
 
-msgid "and run diff with the original file to check for changes)\n"
-msgstr "файлом при помощи программы diff).\n"
+msgid "and run diff with the original file to check for changes)"
+msgstr "файлом при помощи программы diff)"
+
+msgid "Recovery completed. Buffer contents equals file contents."
+msgstr "Восстановление завершено. Содержимое буферов и файлов эквивалентно."
 
 msgid ""
-"Delete the .swp file afterwards.\n"
+"\n"
+"You may want to delete the .swp file now.\n"
 "\n"
 msgstr ""
-"Затем удалите файл .swp.\n"
 "\n"
+"Вероятно, сейчас вы захотите удалить файл .swp.\n"
+"\n"
+
+msgid "Using crypt key from swap file for the text file.\n"
+msgstr "Использование ключа шифрования из своп-файла для текстового файла.\n"
 
 #. use msg() to start the scrolling properly
 msgid "Swap files found:"
@@ -3039,7 +3730,7 @@
 msgstr "E316: ml_get: невозможно найти строку %ld"
 
 msgid "E317: pointer block id wrong 3"
-msgstr "E317: неправильное значение указателя блока 3"
+msgstr "E317: Неправильное значение указателя блока 3"
 
 msgid "stack_idx should be 0"
 msgstr "значение stack_idx должно быть равно 0"
@@ -3048,7 +3739,7 @@
 msgstr "E318: Обновлено слишком много блоков?"
 
 msgid "E317: pointer block id wrong 4"
-msgstr "E317: неправильное значение указателя блока 4"
+msgstr "E317: Неправильное значение указателя блока 4"
 
 msgid "deleted block 1?"
 msgstr "удалён блок 1?"
@@ -3058,24 +3749,28 @@
 msgstr "E320: Строка %ld не обнаружена"
 
 msgid "E317: pointer block id wrong"
-msgstr "E317: неправильное значение указателя блока"
+msgstr "E317: Неправильное значение указателя блока"
 
 msgid "pe_line_count is zero"
 msgstr "значение pe_line_count равно нулю"
 
 #, c-format
 msgid "E322: line number out of range: %ld past the end"
-msgstr "E322: номер строки за пределами диапазона: %ld"
+msgstr "E322: Номер строки за пределами диапазона: %ld"
 
 #, c-format
 msgid "E323: line count wrong in block %ld"
-msgstr "E323: неправильное значение счётчика строк в блоке %ld"
+msgstr "E323: Неправильное значение счётчика строк в блоке %ld"
 
 msgid "Stack size increases"
 msgstr "Размер стека увеличен"
 
 msgid "E317: pointer block id wrong 2"
-msgstr "E317: неправильное значение указателя блока 2"
+msgstr "E317: Неправильное значение указателя блока 2"
+
+#, c-format
+msgid "E773: Symlink loop for \"%s\""
+msgstr "E773: Петля символьных ссылок для \"%s\""
 
 msgid "E325: ATTENTION"
 msgstr "E325: ВНИМАНИЕ"
@@ -3087,8 +3782,9 @@
 "\n"
 "Обнаружен своп-файл с именем \""
 
+# С маленькой буквы, чтобы соответствовало по стилю соседним сообщениям.
 msgid "While opening file \""
-msgstr "При открытии файла: \""
+msgstr "при открытии файла: \""
 
 msgid "      NEWER than swap file!\n"
 msgstr "                    Более СВЕЖИЙ, чем своп-файл!\n"
@@ -3097,24 +3793,23 @@
 #. * other languages.
 msgid ""
 "\n"
-"(1) Another program may be editing the same file.\n"
-"    If this is the case, be careful not to end up with two\n"
-"    different instances of the same file when making changes.\n"
+"(1) Another program may be editing the same file.  If this is the case,\n"
+"    be careful not to end up with two different instances of the same\n"
+"    file when making changes."
 msgstr ""
 "\n"
-"(1) Возможно, редактирование файла выполняется в другой программе.\n"
-"    Если это так, то будьте внимательны при внесении изменений,\n"
-"    чтобы у вас не появилось два разных варианта одного и того же файла.\n"
+"(1) Возможно, редактирование этого же файла выполняется в другой программе.\n"
+"    Если это так, то будьте внимательны при внесении изменений, чтобы\n"
+"    у вас не появилось два разных варианта одного и того же файла."
 
-msgid "    Quit, or continue with caution.\n"
-msgstr "    Завершите работу или продолжайте с осторожностью.\n"
-
-msgid ""
-"\n"
-"(2) An edit session for this file crashed.\n"
+# Сообщение разделено, " \n" добавлено т.к. строка не помещается.
+msgid "  Quit, or continue with caution.\n"
 msgstr ""
-"\n"
-"(2) Предыдущий сеанс редактирования этого файла завершён аварийно.\n"
+" \n"
+"    Завершите работу или продолжайте с осторожностью.\n"
+
+msgid "(2) An edit session for this file crashed.\n"
+msgstr "(2) Сеанс редактирования этого файла завершён аварийно.\n"
 
 msgid "    If this is the case, use \":recover\" or \"vim -r "
 msgstr "    В этом случае, используйте команду \":recover\" или \"vim -r "
@@ -3124,7 +3819,7 @@
 "    to recover the changes (see \":help recovery\").\n"
 msgstr ""
 "\"\n"
-"    для восстановления изменений (см. \":help восстановление\").\n"
+"    для восстановления изменений (см. \":help recovery\").\n"
 
 msgid "    If you did this already, delete the swap file \""
 msgstr "    Если вы уже выполняли эту операцию, удалите своп-файл \""
@@ -3143,7 +3838,7 @@
 msgstr "\" уже существует!"
 
 msgid "VIM - ATTENTION"
-msgstr "VIM - ВНИМАНИЕ"
+msgstr "VIM — ВНИМАНИЕ"
 
 msgid "Swap file already exists!"
 msgstr "Своп-файл уже существует!"
@@ -3165,16 +3860,16 @@
 "&Open Read-Only\n"
 "&Edit anyway\n"
 "&Recover\n"
+"&Delete it\n"
 "&Quit\n"
-"&Abort\n"
-"&Delete it"
+"&Abort"
 msgstr ""
 "&O Открыть для чтения\n"
 "&E Редактировать\n"
 "&R Восстановить\n"
+"&D Удалить\n"
 "&Q Выход\n"
-"&A Прервать\n"
-"&D Удалить"
+"&A Прервать"
 
 msgid "E326: Too many swap files found"
 msgstr "E326: Обнаружено слишком много своп-файлов"
@@ -3185,8 +3880,13 @@
 msgid "E328: Menu only exists in another mode"
 msgstr "E328: Меню в этом режиме не существует"
 
-msgid "E329: No menu of that name"
-msgstr "E329: Нет меню с таким именем"
+#, c-format
+msgid "E329: No menu \"%s\""
+msgstr "E329: Нет меню %s"
+
+#. Only a mnemonic or accelerator is not valid.
+msgid "E792: Empty menu name"
+msgstr "E792: Пустое имя меню"
 
 msgid "E330: Menu path must not lead to a sub-menu"
 msgstr "E330: Путь к меню не должен вести к подменю"
@@ -3224,7 +3924,7 @@
 msgstr "E336: Путь к меню должен вести к подменю"
 
 msgid "E337: Menu not found - check menu names"
-msgstr "E337: Меню не найдено -- проверьте имена меню"
+msgstr "E337: Меню не найдено — проверьте имена меню"
 
 #, c-format
 msgid "Error detected while processing %s:"
@@ -3234,31 +3934,30 @@
 msgid "line %4ld:"
 msgstr "строка %4ld:"
 
-msgid "[string too long]"
-msgstr "[слишком длинная строка]"
+#, c-format
+msgid "E354: Invalid register name: '%s'"
+msgstr "E354: Недопустимое имя регистра: '%s'"
 
 msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
 msgstr ""
 "Перевод сообщений на русский язык: Василий Рагозин <vrr@users.sourceforge."
-"net>"
+"net>, Сергей Алёшин <alyoshin.s@gmail.com>"
 
 msgid "Interrupt: "
 msgstr "Прерывание: "
 
-msgid "Hit ENTER to continue"
-msgstr "Для продолжения нажмите ENTER"
+msgid "Press ENTER or type command to continue"
+msgstr "Нажмите ENTER или введите команду для продолжения"
 
-msgid "Hit ENTER or type command to continue"
-msgstr "Для продолжения нажмите ENTER или введите команду"
+#, c-format
+msgid "%s line %ld"
+msgstr "%s строка %ld"
 
 msgid "-- More --"
 msgstr "-- Продолжение следует --"
 
-msgid " (RET/BS: line, SPACE/b: page, d/u: half page, q: quit)"
-msgstr " (RET/BS: строка, SPACE/b: страница, d/u: полстраницы, q: выход)"
-
-msgid " (RET: line, SPACE: page, d: half page, q: quit)"
-msgstr " (RET: строка, SPACE: страница, d: полстраницы, q: выход)"
+msgid " SPACE/d/j: screen/page/line down, b/u/k: up, q: quit "
+msgstr " SPACE/d/j: экран/страница/строка вниз, b/u/k: вверх, q: выход "
 
 msgid "Question"
 msgstr "Вопрос"
@@ -3267,8 +3966,8 @@
 "&Yes\n"
 "&No"
 msgstr ""
-"&Да\n"
-"&Нет"
+"&Y Да\n"
+"&N Нет"
 
 msgid ""
 "&Yes\n"
@@ -3277,11 +3976,14 @@
 "&Discard All\n"
 "&Cancel"
 msgstr ""
-"&Да\n"
-"&Нет\n"
-"Сохранить &все\n"
-"&Потерять все\n"
-"О&тмена"
+"&Y Да\n"
+"&N Нет\n"
+"&A Сохранить все\n"
+"&D Потерять все\n"
+"&C Отмена"
+
+msgid "Select Directory dialog"
+msgstr "Выбор каталога"
 
 msgid "Save File dialog"
 msgstr "Сохранение файла"
@@ -3294,14 +3996,29 @@
 msgstr ""
 "E338: Извините, но в консольном режиме нет проводника по файловой системе"
 
+msgid "E766: Insufficient arguments for printf()"
+msgstr "E766: Недостаточно параметров для printf()"
+
+msgid "E807: Expected Float argument for printf()"
+msgstr "E807: Ожидался параметр типа с плавающей точкой для printf()"
+
+msgid "E767: Too many arguments to printf()"
+msgstr "E767: Слишком много параметров для printf()"
+
 msgid "W10: Warning: Changing a readonly file"
 msgstr "W10: Предупреждение: Изменение файла с правами только для чтения"
 
+msgid "Type number and <Enter> or click with mouse (empty cancels): "
+msgstr "Введите номер и <Enter> или щёлкните мышью (пусто для отмены): "
+
+msgid "Type number and <Enter> (empty cancels): "
+msgstr "Введите номер и <Enter> (пусто для отмены): "
+
 msgid "1 more line"
 msgstr "Добавлена одна строка"
 
 msgid "1 line less"
-msgstr "Удалена одна строка"
+msgstr "Убрана одна строка"
 
 #, c-format
 msgid "%ld more lines"
@@ -3309,19 +4026,21 @@
 
 #, c-format
 msgid "%ld fewer lines"
-msgstr "Удалено строк: %ld"
+msgstr "Убрано строк: %ld"
 
 msgid " (Interrupted)"
 msgstr " (Прервано)"
 
+msgid "Beep!"
+msgstr "Би-би!"
+
 msgid "Vim: preserving files...\n"
-msgstr "Vim: сохраняются файлы...\n"
+msgstr "Vim: сохранение файлов...\n"
 
 #. close all memfiles, without deleting
 msgid "Vim: Finished.\n"
 msgstr "Vim: Готово.\n"
 
-#, c-format
 msgid "ERROR: "
 msgstr "ОШИБКА: "
 
@@ -3366,7 +4085,7 @@
 msgstr "E547: Недопустимая форма курсора"
 
 msgid "E548: digit expected"
-msgstr "E548: требуется ввести цифру"
+msgstr "E548: Требуется ввести цифру"
 
 msgid "E549: Illegal percentage"
 msgstr "E549: Недопустимое значение процентов"
@@ -3375,11 +4094,14 @@
 msgstr "Введите пароль для шифрования: "
 
 msgid "Enter same key again: "
-msgstr "        Повторите ввод пароля:"
+msgstr "Повторите ввод пароля: "
 
 msgid "Keys don't match!"
 msgstr "Введённые пароли не совпадают!"
 
+msgid "E854: path too long for completion"
+msgstr "E854: слишком большой путь для автодополнения"
+
 #, c-format
 msgid ""
 "E343: Invalid path: '**[number]' must be at the end of the path or be "
@@ -3404,18 +4126,8 @@
 msgid "E347: No more file \"%s\" found in path"
 msgstr "E347: В известных каталогах больше нет файлов \"%s\""
 
-msgid "E550: Missing colon"
-msgstr "E550: Пропущено двоеточие"
-
-msgid "E551: Illegal component"
-msgstr "E551: Недопустимый компонент"
-
-msgid "E552: digit expected"
-msgstr "E552: Требуется указать цифру"
-
-#. Get here when the server can't be found.
 msgid "Cannot connect to Netbeans #2"
-msgstr "Невозможно соединиться с Netbeans #2"
+msgstr "Невозможно соединиться с NetBeans #2"
 
 msgid "Cannot connect to Netbeans"
 msgstr "Невозможно соединиться с NetBeans"
@@ -3432,21 +4144,37 @@
 msgid "E658: NetBeans connection lost for buffer %ld"
 msgstr "E658: Потеряно соединение с NetBeans для буфера %ld"
 
+msgid "E838: netbeans is not supported with this GUI"
+msgstr "E838: NetBeans не поддерживается с этим графическим интерфейсом"
+
+msgid "E511: netbeans already connected"
+msgstr "E511: уже соединён с NetBeans"
+
+#, c-format
+msgid "E505: %s is read-only (add ! to override)"
+msgstr "E505: %s открыт только для чтения (добавьте !, чтобы обойти проверку)"
+
+msgid "E349: No identifier under cursor"
+msgstr "E349: Нет имени в позиции курсора"
+
+msgid "E774: 'operatorfunc' is empty"
+msgstr "E774: Значением опции 'operatorfunc' является пустая строка"
+
+msgid "E775: Eval feature not available"
+msgstr "E775: eval не доступна"
+
 msgid "Warning: terminal cannot highlight"
 msgstr "Предупреждение: терминал не может выполнять подсветку"
 
 msgid "E348: No string under cursor"
 msgstr "E348: Нет строки в позиции курсора"
 
-msgid "E349: No identifier under cursor"
-msgstr "E349: Нет имени в позиции курсора"
-
 msgid "E352: Cannot erase folds with current 'foldmethod'"
 msgstr ""
 "E352: Невозможно стереть складки с текущим значением опции 'foldmethod'"
 
 msgid "E664: changelist is empty"
-msgstr "E664: список изменений пустой"
+msgstr "E664: Список изменений пустой"
 
 msgid "E662: At start of changelist"
 msgstr "E662: В начале списка изменений"
@@ -3484,6 +4212,9 @@
 msgid "%ld lines indented "
 msgstr "Изменены отступы в строках (%ld) "
 
+msgid "E748: No previously used register"
+msgstr "E748: Нет предыдущего использованного регистра"
+
 #. must display the prompt
 msgid "cannot yank; delete anyway"
 msgstr "скопировать не удалось, удаление выполнено"
@@ -3499,10 +4230,17 @@
 msgid "freeing %ld lines"
 msgstr "очищено строк: %ld"
 
+msgid "block of 1 line yanked"
+msgstr "скопирован блок из одной строки"
+
 msgid "1 line yanked"
 msgstr "скопирована одна строка"
 
 #, c-format
+msgid "block of %ld lines yanked"
+msgstr "скопирован блок из строк: %ld"
+
+#, c-format
 msgid "%ld lines yanked"
 msgstr "скопировано строк: %ld"
 
@@ -3521,7 +4259,6 @@
 msgid "Illegal register name"
 msgstr "Недопустимое имя регистра"
 
-#, c-format
 msgid ""
 "\n"
 "# Registers:\n"
@@ -3534,10 +4271,6 @@
 msgstr "E574: Неизвестный тип регистра %d"
 
 #, c-format
-msgid "E354: Invalid register name: '%s'"
-msgstr "E354: Недопустимое имя регистра: '%s'"
-
-#, c-format
 msgid "%ld Cols; "
 msgstr "Колонок: %ld; "
 
@@ -3546,8 +4279,24 @@
 msgstr "Выделено %s%ld из %ld строк; %ld из %ld слов; %ld из %ld байт"
 
 #, c-format
+msgid ""
+"Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Chars; %ld of %ld "
+"Bytes"
+msgstr ""
+"Выделено %s%ld из %ld стр.; %ld из %ld слов; %ld из %ld симв.; %ld из %ld "
+"байт"
+
+#, c-format
 msgid "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Byte %ld of %ld"
-msgstr "Кол. %s из %s;  стр. %ld из %ld; слово %ld из %ld; байт %ld из %ld"
+msgstr "Кол. %s из %s; стр. %ld из %ld; сл. %ld из %ld; байт %ld из %ld"
+
+#, c-format
+msgid ""
+"Col %s of %s; Line %ld of %ld; Word %ld of %ld; Char %ld of %ld; Byte %ld of "
+"%ld"
+msgstr ""
+"Кол. %s из %s; стр. %ld из %ld; сл. %ld из %ld; симв. %ld из %ld; байт %ld "
+"из %ld"
 
 #, c-format
 msgid "(+%ld for BOM)"
@@ -3568,12 +4317,8 @@
 msgid "E520: Not allowed in a modeline"
 msgstr "E520: Не допускается в режимной строке"
 
-msgid ""
-"\n"
-"\tLast set from "
-msgstr ""
-"\n"
-"\tВ последний раз опция изменена в "
+msgid "E846: Key code not set"
+msgstr "E846: Код клавиши не установлен"
 
 msgid "E521: Number required after ="
 msgstr "E521: После = требуется указать число"
@@ -3595,7 +4340,13 @@
 msgstr "E531: Для запуска графического интерфейса используйте \":gui\""
 
 msgid "E589: 'backupext' and 'patchmode' are equal"
-msgstr "E589: значения опций 'backupext' и 'patchmode' равны"
+msgstr "E589: Значения опций 'backupext' и 'patchmode' равны"
+
+msgid "E834: Conflicts with value of 'listchars'"
+msgstr "E834: Конфликтует со значением 'listchars'"
+
+msgid "E835: Conflicts with value of 'fillchars'"
+msgstr "E835: Конфликтует со значением 'fillchars'"
 
 msgid "E617: Cannot be changed in the GTK+ 2 GUI"
 msgstr "E617: Не может быть изменено в графическом интерфейсе GTK+ 2"
@@ -3617,19 +4368,19 @@
 msgstr "E528: Необходимо указать значение для '"
 
 msgid "E595: contains unprintable or wide character"
-msgstr "E595: содержит непечатный символ или символ двойной ширины"
+msgstr "E595: Содержит непечатный символ или символ двойной ширины"
 
 msgid "E596: Invalid font(s)"
 msgstr "E596: Неправильные шрифты"
 
 msgid "E597: can't select fontset"
-msgstr "E597: невозможно выбрать шрифтовой набор"
+msgstr "E597: Невозможно выбрать шрифтовой набор"
 
 msgid "E598: Invalid fontset"
 msgstr "E598: Неправильный шрифтовой набор"
 
 msgid "E533: can't select wide font"
-msgstr "E533: невозможно выбрать шрифт с символами двойной ширины"
+msgstr "E533: Невозможно выбрать шрифт с символами двойной ширины"
 
 msgid "E534: Invalid wide font"
 msgstr "E534: Неправильный шрифт с символами двойной ширины"
@@ -3639,7 +4390,7 @@
 msgstr "E535: Неправильный символ после <%c>"
 
 msgid "E536: comma required"
-msgstr "E536: требуется запятая"
+msgstr "E536: Требуется запятая"
 
 #, c-format
 msgid "E537: 'commentstring' must be empty or contain %s"
@@ -3654,10 +4405,10 @@
 msgstr "E540: Незакрытая последовательность выражения"
 
 msgid "E541: too many items"
-msgstr "E541: слишком много элементов"
+msgstr "E541: Слишком много элементов"
 
 msgid "E542: unbalanced groups"
-msgstr "E542: несбалансированные группы"
+msgstr "E542: Несбалансированные группы"
 
 msgid "E590: A preview window already exists"
 msgstr "E590: Окно предпросмотра уже есть"
@@ -3678,6 +4429,13 @@
 msgid "E355: Unknown option: %s"
 msgstr "E355: Неизвестная опция: %s"
 
+#. There's another character after zeros or the string
+#. * is empty.  In both cases, we are trying to set a
+#. * num option using a string.
+#, c-format
+msgid "E521: Number required: &%s = '%s'"
+msgstr "E521: Требуется указать число: &%s = '%s'"
+
 msgid ""
 "\n"
 "--- Terminal codes ---"
@@ -3748,7 +4506,7 @@
 
 #. if Vim opened a window: Executing a shell may cause crashes
 msgid "E360: Cannot execute shell with -f option"
-msgstr "E360: Невозможно выполнить оболочку с аргументом -f"
+msgstr "E360: Невозможно выполнить оболочку с параметром -f"
 
 msgid "Cannot execute "
 msgstr "Невозможно выполнить "
@@ -3765,8 +4523,8 @@
 msgid "I/O ERROR"
 msgstr "ОШИБКА ВВОДА/ВЫВОДА"
 
-msgid "...(truncated)"
-msgstr "...(обрезано)"
+msgid "Message"
+msgstr "Сообщение"
 
 msgid "'columns' is not 80, cannot execute external commands"
 msgstr "Значение опции 'columns' не равно 80, внешние программы не выполняются"
@@ -3786,9 +4544,6 @@
 msgid "E238: Print error: %s"
 msgstr "E238: Ошибка печати: %s"
 
-msgid "Unknown"
-msgstr "Неизвестно"
-
 #, c-format
 msgid "Printing '%s'"
 msgstr "Печать '%s'"
@@ -3831,6 +4586,20 @@
 
 msgid ""
 "\n"
+"Could not get security context for "
+msgstr ""
+"\n"
+"Невозможно получить контекст безопасности для "
+
+msgid ""
+"\n"
+"Could not set security context for "
+msgstr ""
+"\n"
+"Невозможно установить контекст безопасности для "
+
+msgid ""
+"\n"
 "Cannot execute shell "
 msgstr ""
 "\n"
@@ -3874,6 +4643,10 @@
 msgid "XSMP lost ICE connection"
 msgstr "XSMP утеряно соединение ICE"
 
+#, c-format
+msgid "dlerror = \"%s\""
+msgstr "dlerror = \"%s\""
+
 msgid "Opening the X display failed"
 msgstr "Неудачное открытие дисплея X"
 
@@ -3893,15 +4666,12 @@
 msgid "At line"
 msgstr "В строке"
 
-msgid "Could not allocate memory for command line."
-msgstr "Невозможно выделить память для командной строки."
+msgid "Could not load vim32.dll!"
+msgstr "Невозможно загрузить vim32.dll!"
 
 msgid "VIM Error"
 msgstr "Ошибка VIM"
 
-msgid "Could not load vim32.dll!"
-msgstr "Невозможно загрузить vim32.dll!"
-
 msgid "Could not fix up function pointers to the DLL!"
 msgstr "Невозможно исправить указатели функций для DLL!"
 
@@ -3964,7 +4734,7 @@
 msgstr "E378: В значении опции 'errorformat' отсутствует шаблон"
 
 msgid "E379: Missing or empty directory name"
-msgstr "E379: имя каталога не задано или равно пустой строке"
+msgstr "E379: Имя каталога не задано или равно пустой строке"
 
 msgid "E553: No more items"
 msgstr "E553: Больше нет элементов"
@@ -3990,9 +4760,25 @@
 msgstr ""
 "E382: Запись невозможна, значение опции 'buftype' не является пустой строкой"
 
+msgid "Error file"
+msgstr "Файл ошибок"
+
+msgid "E683: File name missing or invalid pattern"
+msgstr "E683: Нет имени файла или неправильный шаблон"
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr "Невозможно открыть файл \"%s\""
+
+msgid "E681: Buffer is not loaded"
+msgstr "E681: Буфер не выгружен"
+
+msgid "E777: String or List expected"
+msgstr "E777: Требуется строка или список"
+
 #, c-format
 msgid "E369: invalid item in %s%%[]"
-msgstr "E369: недопустимый элемент в %s%%[]"
+msgstr "E369: Недопустимый элемент в %s%%[]"
 
 msgid "E339: Pattern too long"
 msgstr "E339: Слишком длинный шаблон"
@@ -4020,20 +4806,8 @@
 msgstr "E55: Нет пары для %s)"
 
 #, c-format
-msgid "E56: %s* operand could be empty"
-msgstr "E56: возможно пустой операнд %s*"
-
-#, c-format
-msgid "E57: %s+ operand could be empty"
-msgstr "E57: возможно пустой операнд %s+"
-
-#, c-format
 msgid "E59: invalid character after %s@"
-msgstr "E59: недопустимый символ после %s@"
-
-#, c-format
-msgid "E58: %s{ operand could be empty"
-msgstr "E58: возможно пустой операнд %s{"
+msgstr "E59: Недопустимый символ после %s@"
 
 #, c-format
 msgid "E60: Too many complex %s{...}s"
@@ -4048,7 +4822,7 @@
 msgstr "E62: Вложенные %s%c"
 
 msgid "E63: invalid use of \\_"
-msgstr "E63: недопустимое использование \\_"
+msgstr "E63: Недопустимое использование \\_"
 
 #, c-format
 msgid "E64: %s%c follows nothing"
@@ -4075,28 +4849,24 @@
 msgstr "E70: Пустое %s%%[]"
 
 #, c-format
+msgid "E678: Invalid character after %s%%[dxouU]"
+msgstr "E678: Недопустимый символ после %s%%[dxouU]"
+
+#, c-format
 msgid "E71: Invalid character after %s%%"
 msgstr "E71: Недопустимый символ после %s%%"
 
 #, c-format
+msgid "E769: Missing ] after %s["
+msgstr "E769: Пропущена ] после %s["
+
+#, c-format
 msgid "E554: Syntax error in %s{...}"
 msgstr "E554: Синтаксическая ошибка в %s{...}"
 
-msgid "E361: Crash intercepted; regexp too complex?"
-msgstr ""
-"E361: Предотвращено аварийное завершение: слишком сложное регулярное "
-"выражение?"
-
-msgid "E363: pattern caused out-of-stack error"
-msgstr "E363: применение шаблона привело к ошибке выхода за пределы стека"
-
 msgid "External submatches:\n"
 msgstr "Внешние подсоответствия:\n"
 
-#, c-format
-msgid "+--%3ld lines folded "
-msgstr "+--%3ld строк в складке"
-
 msgid " VREPLACE"
 msgstr " ВИРТУАЛЬНАЯ ЗАМЕНА"
 
@@ -4151,23 +4921,17 @@
 msgid "recording"
 msgstr "запись"
 
-msgid "search hit TOP, continuing at BOTTOM"
-msgstr "поиск будет продолжен с КОНЦА документа"
-
-msgid "search hit BOTTOM, continuing at TOP"
-msgstr "поиск будет продолжен с НАЧАЛА документа"
-
 #, c-format
 msgid "E383: Invalid search string: %s"
 msgstr "E383: Неправильная строка поиска: %s"
 
 #, c-format
 msgid "E384: search hit TOP without match for: %s"
-msgstr "E384: поиск закончен в НАЧАЛЕ документа; %s не найдено"
+msgstr "E384: Поиск закончен в НАЧАЛЕ документа; %s не найдено"
 
 #, c-format
 msgid "E385: search hit BOTTOM without match for: %s"
-msgstr "E385: поиск закончен в КОНЦЕ документа; %s не найдено"
+msgstr "E385: Поиск закончен в КОНЦЕ документа; %s не найдено"
 
 msgid "E386: Expected '?' or '/'  after ';'"
 msgstr "E386: После ';' ожидается ввод '?' или '/'"
@@ -4195,6 +4959,10 @@
 msgid "Scanning included file: %s"
 msgstr "Просмотр включённых файлов: %s"
 
+#, c-format
+msgid "Searching included file %s"
+msgstr "Поиск включённого файла %s"
+
 msgid "E387: Match is on current line"
 msgstr "E387: Соответствие в текущей строке"
 
@@ -4210,9 +4978,398 @@
 msgid "E389: Couldn't find pattern"
 msgstr "E389: Шаблон не найден"
 
+msgid "Substitute "
+msgstr "Замена "
+
+#, c-format
+msgid ""
+"\n"
+"# Last %sSearch Pattern:\n"
+"~"
+msgstr ""
+"\n"
+"# Последний %sШаблон поиска:\n"
+"~"
+
+msgid "E759: Format error in spell file"
+msgstr "E759: Ошибка формата в файле правописания"
+
+msgid "E758: Truncated spell file"
+msgstr "E758: Файл правописания обрезан"
+
+#, c-format
+msgid "Trailing text in %s line %d: %s"
+msgstr "Лишний текст на хвосте в %s стр. %d: %s"
+
+#, c-format
+msgid "Affix name too long in %s line %d: %s"
+msgstr "Имя аффикса слишком длинное в %s, строка %d: %s"
+
+msgid "E761: Format error in affix file FOL, LOW or UPP"
+msgstr "E761: Ошибка формата в файле аффиксов FOL, LOW или UPP"
+
+msgid "E762: Character in FOL, LOW or UPP is out of range"
+msgstr "E762: Символы в FOL, LOW или UPP за пределами диапазона"
+
+msgid "Compressing word tree..."
+msgstr "Сжатие дерева слов..."
+
+msgid "E756: Spell checking is not enabled"
+msgstr "E756: Проверка правописания выключена"
+
+#, c-format
+msgid "Warning: Cannot find word list \"%s_%s.spl\" or \"%s_ascii.spl\""
+msgstr ""
+"Предупреждение: Невозможно найти список слов \"%s_%s.spl\" или \"%s_ascii.spl"
+"\""
+
+#, c-format
+msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""
+msgstr ""
+"Предупреждение: Невозможно найти список слов \"%s.%s.spl\" или \"%s.ascii.spl"
+"\""
+
+#, c-format
+msgid "Reading spell file \"%s\""
+msgstr "Чтение файла правописания \"%s\""
+
+msgid "E757: This does not look like a spell file"
+msgstr "E757: Это не похоже на файл правописания"
+
+msgid "E771: Old spell file, needs to be updated"
+msgstr "E771: Старый файл правописания, требуется его обновление"
+
+msgid "E772: Spell file is for newer version of Vim"
+msgstr "E772: Файл правописания предназначен для более новой версии Vim"
+
+msgid "E770: Unsupported section in spell file"
+msgstr "E770: Неподдерживаемый раздел в файле правописания"
+
+#, c-format
+msgid "Warning: region %s not supported"
+msgstr "Предупреждение: регион %s не поддерживается"
+
+#, c-format
+msgid "Reading affix file %s ..."
+msgstr "Чтение файла аффиксов %s ..."
+
+#, c-format
+msgid "Conversion failure for word in %s line %d: %s"
+msgstr "Не удалось преобразовать слово в %s, строка %d: %s"
+
+#, c-format
+msgid "Conversion in %s not supported: from %s to %s"
+msgstr "Преобразование в %s не поддерживается: из %s в %s"
+
+#, c-format
+msgid "Conversion in %s not supported"
+msgstr "Преобразование в %s не поддерживается"
+
+#, c-format
+msgid "Invalid value for FLAG in %s line %d: %s"
+msgstr "Неправильное значение FLAG в %s, строка %d: %s"
+
+#, c-format
+msgid "FLAG after using flags in %s line %d: %s"
+msgstr "FLAG после использования флагов в %s, строка %d: %s"
+
+#, c-format
+msgid ""
+"Defining COMPOUNDFORBIDFLAG after PFX item may give wrong results in %s line "
+"%d"
+msgstr ""
+"Определение COMPOUNDFORBIDFLAG после элемента PFX может дать неправильные "
+"результаты в %s, строка %d"
+
+#, c-format
+msgid ""
+"Defining COMPOUNDPERMITFLAG after PFX item may give wrong results in %s line "
+"%d"
+msgstr ""
+"Определение COMPOUNDPERMITFLAG после элемента PFX может дать неправильные "
+"результаты в %s, строка %d"
+
+#, c-format
+msgid "Wrong COMPOUNDRULES value in %s line %d: %s"
+msgstr "Неправильное значение COMPOUNDRULES в %s, строка %d: %s"
+
+#, c-format
+msgid "Wrong COMPOUNDWORDMAX value in %s line %d: %s"
+msgstr "Неправильное значение COMPOUNDWORDMAX в %s, строка %d: %s"
+
+#, c-format
+msgid "Wrong COMPOUNDMIN value in %s line %d: %s"
+msgstr "Неправильное значение COMPOUNDMIN в %s, строка %d: %s"
+
+#, c-format
+msgid "Wrong COMPOUNDSYLMAX value in %s line %d: %s"
+msgstr "Неправильное значение COMPOUNDSYLMAX в %s, строка %d: %s"
+
+#, c-format
+msgid "Wrong CHECKCOMPOUNDPATTERN value in %s line %d: %s"
+msgstr "Неправильное значение CHECKCOMPOUNDPATTERN в %s, строка %d: %s"
+
+#, c-format
+msgid "Different combining flag in continued affix block in %s line %d: %s"
+msgstr ""
+"Другой объединяющий флаг в продолжающем блоке аффикса в %s, строка %d: %s"
+
+#, c-format
+msgid "Duplicate affix in %s line %d: %s"
+msgstr "Повторяющийся аффикс в %s, строка %d: %s"
+
+#, c-format
+msgid ""
+"Affix also used for BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST in %s "
+"line %d: %s"
+msgstr ""
+"Аффикс также используется для BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/"
+"NOSUGGEST в %s, строка %d: %s"
+
+#, c-format
+msgid "Expected Y or N in %s line %d: %s"
+msgstr "Ожидалось Y или N в %s, строка %d: %s"
+
+#, c-format
+msgid "Broken condition in %s line %d: %s"
+msgstr "Нарушенное условие в %s, строка %d: %s"
+
+#, c-format
+msgid "Expected REP(SAL) count in %s line %d"
+msgstr "Ожидался счётчик REP(SAL) в %s, строка %d"
+
+#, c-format
+msgid "Expected MAP count in %s line %d"
+msgstr "Ожидался счётчик MAP в %s, строка %d"
+
+#, c-format
+msgid "Duplicate character in MAP in %s line %d"
+msgstr "Повторяющийся символ в MAP в %s, строка %d"
+
+#, c-format
+msgid "Unrecognized or duplicate item in %s line %d: %s"
+msgstr "Нераспознанный или повторяющийся элемент в %s, строка %d: %s"
+
+#, c-format
+msgid "Missing FOL/LOW/UPP line in %s"
+msgstr "Пропущена строка FOL/LOW/UPP в %s"
+
+msgid "COMPOUNDSYLMAX used without SYLLABLE"
+msgstr "COMPOUNDSYLMAX используется без SYLLABLE"
+
+msgid "Too many postponed prefixes"
+msgstr "Слишком много отложенных префиксов"
+
+msgid "Too many compound flags"
+msgstr "Слишком много составных флагов"
+
+msgid "Too many postponed prefixes and/or compound flags"
+msgstr "Слишком много отложенных префиксов и/или составных флагов"
+
+#, c-format
+msgid "Missing SOFO%s line in %s"
+msgstr "Пропущена строка SOFO%s в %s"
+
+#, c-format
+msgid "Both SAL and SOFO lines in %s"
+msgstr "Обе строки SAL и SOFO в %s"
+
+#, c-format
+msgid "Flag is not a number in %s line %d: %s"
+msgstr "Флаг не является числом в %s, строка %d: %s"
+
+#, c-format
+msgid "Illegal flag in %s line %d: %s"
+msgstr "Недопустимый флаг в %s на строке %d: %s"
+
+#, c-format
+msgid "%s value differs from what is used in another .aff file"
+msgstr "%s имеет другое значение, чем в файле .aff"
+
+#, c-format
+msgid "Reading dictionary file %s ..."
+msgstr "Чтение файла словаря %s ..."
+
+#, c-format
+msgid "E760: No word count in %s"
+msgstr "E760: Количество слов не указано в %s"
+
+#, c-format
+msgid "line %6d, word %6d - %s"
+msgstr "строка %6d, слово %6d — %s"
+
+#, c-format
+msgid "Duplicate word in %s line %d: %s"
+msgstr "Повтор слова в %s на строке %d: %s "
+
+#, c-format
+msgid "First duplicate word in %s line %d: %s"
+msgstr "Первый повтор слова в %s на строке %d: %s"
+
+#, c-format
+msgid "%d duplicate word(s) in %s"
+msgstr "%d повторяющихся слов в %s"
+
+#, c-format
+msgid "Ignored %d word(s) with non-ASCII characters in %s"
+msgstr "Пропущено %d слов с не ASCII символами в %s"
+
+#, c-format
+msgid "Reading word file %s ..."
+msgstr "Чтение файла слов %s ..."
+
+#, c-format
+msgid "Duplicate /encoding= line ignored in %s line %d: %s"
+msgstr "Проигнорирована повторяющаяся строка /encoding= в %s, строка %d: %s"
+
+#, c-format
+msgid "/encoding= line after word ignored in %s line %d: %s"
+msgstr "Проигнорирована строка /encoding= после слова в %s, строка %d: %s"
+
+#, c-format
+msgid "Duplicate /regions= line ignored in %s line %d: %s"
+msgstr "Пропускается повтор строки /regions= в %s, строка %d: %s"
+
+#, c-format
+msgid "Too many regions in %s line %d: %s"
+msgstr "Слишком много регионов в %s, строка %d: %s"
+
+#, c-format
+msgid "/ line ignored in %s line %d: %s"
+msgstr "/ строка пропускается в %s, строка %d: %s"
+
+#, c-format
+msgid "Invalid region nr in %s line %d: %s"
+msgstr "Недопустимый номер региона в %s, строка %d: %s"
+
+#, c-format
+msgid "Unrecognized flags in %s line %d: %s"
+msgstr "Нераспознанные флаги в %s, строка %d: %s"
+
+#, c-format
+msgid "Ignored %d words with non-ASCII characters"
+msgstr "Пропущено %d слов с не ASCII символами"
+
+msgid "E845: Insufficient memory, word list will be incomplete"
+msgstr "E845: Недостаточно оперативной памяти, список слов будет не полон"
+
+#, c-format
+msgid "Compressed %d of %d nodes; %d (%d%%) remaining"
+msgstr "Сжато %d из %d узлов; осталось %d (%d%%)"
+
+msgid "Reading back spell file..."
+msgstr "Чтение записанного файла правописания..."
+
+#.
+#. * Go through the trie of good words, soundfold each word and add it to
+#. * the soundfold trie.
+#.
+msgid "Performing soundfolding..."
+msgstr "Выполнение звуковой свёртки..."
+
+#, c-format
+msgid "Number of words after soundfolding: %ld"
+msgstr "Количество слов после звуковой свёртки: %ld"
+
+#, c-format
+msgid "Total number of words: %d"
+msgstr "Общее количество слов: %d"
+
+#, c-format
+msgid "Writing suggestion file %s ..."
+msgstr "Запись файла предложения исправлений правописания %s"
+
+#, c-format
+msgid "Estimated runtime memory use: %d bytes"
+msgstr "Оценка использования памяти при выполнении: %d байт"
+
+msgid "E751: Output file name must not have region name"
+msgstr "E751: Имя выходного файла не должно содержать названия региона"
+
+msgid "E754: Only up to 8 regions supported"
+msgstr "E754: Поддерживается не более 8-ми регионов"
+
+#, c-format
+msgid "E755: Invalid region in %s"
+msgstr "E755: Недопустимый регион в %s"
+
+msgid "Warning: both compounding and NOBREAK specified"
+msgstr "Предупреждение: оба составные и указано NOBREAK"
+
+#, c-format
+msgid "Writing spell file %s ..."
+msgstr "Запись файла правописания %s ..."
+
+msgid "Done!"
+msgstr "Завершено!"
+
+#, c-format
+msgid "E765: 'spellfile' does not have %ld entries"
+msgstr "E765: 'spellfile' не содержит %ld элементов"
+
+#, c-format
+msgid "Word removed from %s"
+msgstr "Слово удалено из %s"
+
+#, c-format
+msgid "Word added to %s"
+msgstr "Слово добавлено в %s"
+
+msgid "E763: Word characters differ between spell files"
+msgstr "E763: Символы слов отличаются в файлах правописания"
+
+msgid "Sorry, no suggestions"
+msgstr "Извините, нет предположений"
+
+#, c-format
+msgid "Sorry, only %ld suggestions"
+msgstr "Извините, только %ld предположений"
+
+#. for when 'cmdheight' > 1
+#. avoid more prompt
+#, c-format
+msgid "Change \"%.*s\" to:"
+msgstr "Заменить \"%.*s\" на:"
+
+#, c-format
+msgid " < \"%.*s\""
+msgstr " < \"%.*s\""
+
+msgid "E752: No previous spell replacement"
+msgstr "E752: Нет предыдущей замены правописания"
+
+#, c-format
+msgid "E753: Not found: %s"
+msgstr "E753: Не найдено: %s"
+
+#, c-format
+msgid "E778: This does not look like a .sug file: %s"
+msgstr "E778: Это не похоже на файл .sug: %s"
+
+#, c-format
+msgid "E779: Old .sug file, needs to be updated: %s"
+msgstr "E779: Старый файл .sug, требует обновления: %s"
+
+#, c-format
+msgid "E780: .sug file is for newer version of Vim: %s"
+msgstr "E780: Файл .sug для более новой версии Vim: %s"
+
+#, c-format
+msgid "E781: .sug file doesn't match .spl file: %s"
+msgstr "E781: Файл .sug не соответствует файлу .spl: %s"
+
+#, c-format
+msgid "E782: error while reading .sug file: %s"
+msgstr "E782: Ошибка при чтении файла .sug: %s"
+
+#. This should have been checked when generating the .spl
+#. * file.
+msgid "E783: duplicate char in MAP entry"
+msgstr "E783: Повторяющийся символ в элементе MAP"
+
 #, c-format
 msgid "E390: Illegal argument: %s"
-msgstr "E390: Недопустимый аргумент: %s"
+msgstr "E390: Недопустимый параметр: %s"
 
 #, c-format
 msgid "E391: No such syntax cluster: %s"
@@ -4270,29 +5427,39 @@
 msgid " line breaks"
 msgstr " переносов строк"
 
+msgid "E395: contains argument not accepted here"
+msgstr "E395: Здесь нельзя использовать параметр contains"
+
+msgid "E844: invalid cchar value"
+msgstr "E844: Недопустимое значение cchar"
+
 msgid "E393: group[t]here not accepted here"
-msgstr "E393: здесь нельзя использовать group[t]here"
+msgstr "E393: Здесь нельзя использовать group[t]here"
 
 #, c-format
 msgid "E394: Didn't find region item for %s"
 msgstr "E394: Элемент области для %s не найден"
 
-msgid "E395: contains argument not accepted here"
-msgstr "E395: здесь нельзя использовать аргумент contains"
-
-msgid "E396: containedin argument not accepted here"
-msgstr "E396: здесь нельзя использовать аргумент containedin"
-
 msgid "E397: Filename required"
 msgstr "E397: Требуется указать имя файла"
 
+msgid "E847: Too many syntax includes"
+msgstr "E847: Слишком много синтаксических включений"
+
+#, c-format
+msgid "E789: Missing ']': %s"
+msgstr "E789: Пропущено ']': %s"
+
 #, c-format
 msgid "E398: Missing '=': %s"
 msgstr "E398: Пропущено '=': %s"
 
 #, c-format
 msgid "E399: Not enough arguments: syntax region %s"
-msgstr "E399: Не хватает аргументов: синтаксический регион %s"
+msgstr "E399: Не хватает параметров: синтаксический регион %s"
+
+msgid "E848: Too many syntax clusters"
+msgstr "E848: Слишком много синтаксических кластеров"
 
 msgid "E400: No cluster specified"
 msgstr "E400: Кластер не указан"
@@ -4307,11 +5474,11 @@
 
 msgid "E403: syntax sync: line continuations pattern specified twice"
 msgstr ""
-"E403: синхронизация синтаксиса: шаблон продолжений строки указан дважды"
+"E403: Синхронизация синтаксиса: шаблон продолжений строки указан дважды"
 
 #, c-format
 msgid "E404: Illegal arguments: %s"
-msgstr "E404: Недопустимые аргументы: %s"
+msgstr "E404: Недопустимые параметры: %s"
 
 #, c-format
 msgid "E405: Missing equal sign: %s"
@@ -4319,7 +5486,7 @@
 
 #, c-format
 msgid "E406: Empty argument: %s"
-msgstr "E406: Пустой аргумент: %s"
+msgstr "E406: Пустой параметр: %s"
 
 #, c-format
 msgid "E407: %s not allowed here"
@@ -4337,32 +5504,35 @@
 msgid "E410: Invalid :syntax subcommand: %s"
 msgstr "E410: Неправильная подкоманда :syntax: %s"
 
+msgid "E679: recursive loop loading syncolor.vim"
+msgstr "E679: Рекурсивная петля при загрузке syncolor.vim"
+
 #, c-format
 msgid "E411: highlight group not found: %s"
-msgstr "E411: группа подсветки синтаксиса %s не найдена"
+msgstr "E411: Группа подсветки синтаксиса %s не найдена"
 
 #, c-format
 msgid "E412: Not enough arguments: \":highlight link %s\""
-msgstr "E412: Не хватает аргументов: \":highlight link %s\""
+msgstr "E412: Не хватает параметров: \":highlight link %s\""
 
 #, c-format
 msgid "E413: Too many arguments: \":highlight link %s\""
-msgstr "E413: Слишком много аргументов: \":highlight link %s\""
+msgstr "E413: Слишком много параметров: \":highlight link %s\""
 
 msgid "E414: group has settings, highlight link ignored"
-msgstr "E414: у группы есть собственные настройки, ссылка игнорируется"
+msgstr "E414: У группы есть настройки, пропускается highlight link"
 
 #, c-format
 msgid "E415: unexpected equal sign: %s"
-msgstr "E415: неожиданный знак равенства: %s"
+msgstr "E415: Неожиданный знак равенства: %s"
 
 #, c-format
 msgid "E416: missing equal sign: %s"
-msgstr "E416: пропущен знак равенства: %s"
+msgstr "E416: Пропущен знак равенства: %s"
 
 #, c-format
 msgid "E417: missing argument: %s"
-msgstr "E417: пропущен аргумент: %s"
+msgstr "E417: Пропущен параметр: %s"
 
 #, c-format
 msgid "E418: Illegal value: %s"
@@ -4380,11 +5550,11 @@
 
 #, c-format
 msgid "E422: terminal code too long: %s"
-msgstr "E422: слишком длинный код терминала: %s"
+msgstr "E422: Слишком длинный код терминала: %s"
 
 #, c-format
 msgid "E423: Illegal argument: %s"
-msgstr "E423: Недопустимый аргумент: %s"
+msgstr "E423: Недопустимый параметр: %s"
 
 msgid "E424: Too many different highlighting attributes in use"
 msgstr "E424: Используется слишком много разных атрибутов подсветки синтаксиса"
@@ -4392,16 +5562,17 @@
 msgid "E669: Unprintable character in group name"
 msgstr "E669: Непечатный символ в имени группы"
 
-#. This is an error, but since there previously was no check only
-#. * give a warning.
 msgid "W18: Invalid character in group name"
 msgstr "W18: Недопустимый символ в имени группы"
 
+msgid "E849: Too many highlight and syntax groups"
+msgstr "E849: Слишком много групп подсветки и синтаксиса"
+
 msgid "E555: at bottom of tag stack"
-msgstr "E555: внизу стека меток"
+msgstr "E555: Внизу стека меток"
 
 msgid "E556: at top of tag stack"
-msgstr "E556: наверху стека меток"
+msgstr "E556: Наверху стека меток"
 
 msgid "E425: Cannot go before first matching tag"
 msgstr "E425: Невозможно перейти в позицию до первой совпадающей метки"
@@ -4416,13 +5587,6 @@
 msgid "file\n"
 msgstr "файл\n"
 
-#.
-#. * Ask to select a tag from the list.
-#. * When using ":silent" assume that <CR> was entered.
-#.
-msgid "Enter nr of choice (<CR> to abort): "
-msgstr "Выберите нужный номер (<CR> для отказа):"
-
 msgid "E427: There is only one matching tag"
 msgstr "E427: Есть только одна совпадающая метка"
 
@@ -4464,6 +5628,9 @@
 msgid "E430: Tag file path truncated for %s\n"
 msgstr "E430: Путь к файлу меток %s обрезан\n"
 
+msgid "Ignoring long line in tags file"
+msgstr "Игнорирование длинной строки в файле tags"
+
 #, c-format
 msgid "E431: Format error in tags file \"%s\""
 msgstr "E431: Ошибка формата в файле меток \"%s\""
@@ -4486,6 +5653,10 @@
 msgid "E435: Couldn't find tag, just guessing!"
 msgstr "E435: Метка не найдена, пытаемся угадать!"
 
+#, c-format
+msgid "Duplicate field name: %s"
+msgstr "Повторяющееся имя поля: %s"
+
 msgid "' not known. Available builtin terminals are:"
 msgstr "' не известен. Доступны встроенные терминалы:"
 
@@ -4506,7 +5677,7 @@
 msgstr "E436: В termcap нет записи \"%s\""
 
 msgid "E437: terminal capability \"cm\" required"
-msgstr "E437: требуется способность терминала \"cm\""
+msgstr "E437: Требуется способность терминала \"cm\""
 
 #. Highlight title
 msgid ""
@@ -4522,25 +5693,147 @@
 msgid "Vim: Error reading input, exiting...\n"
 msgstr "Vim: Ошибка чтения ввода, выход...\n"
 
+msgid "Used CUT_BUFFER0 instead of empty selection"
+msgstr "Вместо пустого выделения используется CUT_BUFFER0"
+
+#. This happens when the FileChangedRO autocommand changes the
+#. * file in a way it becomes shorter.
+msgid "E834: Line count changed unexpectedly"
+msgstr "E834: Неожиданно изменился счётчик строк"
+
 #. must display the prompt
 msgid "No undo possible; continue anyway"
 msgstr "Отмена невозможна; продолжать выполнение"
 
+#, c-format
+msgid "E828: Cannot open undo file for writing: %s"
+msgstr "E828: Невозможно открыть файл отмен для записи: %s"
+
+#, c-format
+msgid "E825: Corrupted undo file (%s): %s"
+msgstr "E825: Файл отмен повреждён (%s): %s"
+
+msgid "Cannot write undo file in any directory in 'undodir'"
+msgstr "Невозможно записать файл отмен в каком-либо каталоге из 'undodir'"
+
+#, c-format
+msgid "Will not overwrite with undo file, cannot read: %s"
+msgstr "Файл отмен не перезаписан, невозможно прочитать: %s"
+
+#, c-format
+msgid "Will not overwrite, this is not an undo file: %s"
+msgstr "Перезапись не выполнена, это не файл отмен: %s"
+
+msgid "Skipping undo file write, nothing to undo"
+msgstr "Пропущена запись файла отмен, нечего отменять"
+
+#, c-format
+msgid "Writing undo file: %s"
+msgstr "Запись файла отмен: %s"
+
+#, c-format
+msgid "E829: write error in undo file: %s"
+msgstr "E829: Ошибка при записи файла отмен: %s"
+
+#, c-format
+msgid "Not reading undo file, owner differs: %s"
+msgstr "Файл отмен не прочитан, другой владелец: %s"
+
+#, c-format
+msgid "Reading undo file: %s"
+msgstr "Чтение файла отмен: %s"
+
+#, c-format
+msgid "E822: Cannot open undo file for reading: %s"
+msgstr "E822: Невозможно открыть файл отмен для чтения: %s"
+
+#, c-format
+msgid "E823: Not an undo file: %s"
+msgstr "E823: Это не файл отмен: %s"
+
+#, c-format
+msgid "E832: Non-encrypted file has encrypted undo file: %s"
+msgstr "E832: Не зашифрованный файл имеет зашифрованный файл отмен: %s"
+
+#, c-format
+msgid "E826: Undo file decryption failed: %s"
+msgstr "E826: Не удалось дешифровать файл отмен: %s"
+
+#, c-format
+msgid "E827: Undo file is encrypted: %s"
+msgstr "E827: Файл отмен зашифрован: %s"
+
+#, c-format
+msgid "E824: Incompatible undo file: %s"
+msgstr "E824: Несовместимый файл отмен: %s"
+
+msgid "File contents changed, cannot use undo info"
+msgstr "Изменилось содержимое файла, невозможно использовать информацию отмен"
+
+#, c-format
+msgid "Finished reading undo file %s"
+msgstr "Завершено чтение файла отмен %s"
+
+msgid "Already at oldest change"
+msgstr "Уже на самом первом изменении"
+
+msgid "Already at newest change"
+msgstr "Уже на самом последнем изменении"
+
+#, c-format
+msgid "E830: Undo number %ld not found"
+msgstr "E830: Не найдена отмена номер %ld"
+
 msgid "E438: u_undo: line numbers wrong"
 msgstr "E438: u_undo: неправильные номера строк"
 
-msgid "1 change"
-msgstr "Единственное изменение"
+msgid "more line"
+msgstr "стр. добавлена"
+
+msgid "more lines"
+msgstr "стр. добавлено"
+
+msgid "line less"
+msgstr "стр. удалена"
+
+msgid "fewer lines"
+msgstr "стр. удалено"
+
+msgid "change"
+msgstr "изм."
+
+msgid "changes"
+msgstr "изм."
 
 #, c-format
-msgid "%ld changes"
-msgstr "Изменений: %ld"
+msgid "%ld %s; %s #%ld  %s"
+msgstr "%ld %s; %s #%ld  %s"
+
+msgid "before"
+msgstr "перед"
+
+msgid "after"
+msgstr "после"
+
+msgid "Nothing to undo"
+msgstr "Нечего отменять"
+
+# Заголовок таблицы :undolist
+msgid "number changes  when               saved"
+msgstr " номер  измен.  когда              сохранено"
+
+#, c-format
+msgid "%ld seconds ago"
+msgstr "%ld с назад"
+
+msgid "E790: undojoin is not allowed after undo"
+msgstr "E790: Объединение отмен не допускается после отмены"
 
 msgid "E439: undo list corrupt"
 msgstr "E439: Повреждён список отмены"
 
 msgid "E440: undo line missing"
-msgstr "E440: потеряна строка отмены"
+msgstr "E440: Потеряна строка отмены"
 
 #. Only MS VC 4.1 and earlier can do Win32s
 msgid ""
@@ -4552,19 +5845,33 @@
 
 msgid ""
 "\n"
+"MS-Windows 64-bit GUI version"
+msgstr ""
+"\n"
+"Версия с графическим интерфейсом для MS-Windows 64 бит"
+
+msgid ""
+"\n"
 "MS-Windows 32-bit GUI version"
 msgstr ""
 "\n"
 "Версия с графическим интерфейсом для MS-Windows 32 бит"
 
 msgid " in Win32s mode"
-msgstr " в режиме Win32s"
+msgstr " в режиме Win32"
 
 msgid " with OLE support"
 msgstr " с поддержкой OLE"
 
 msgid ""
 "\n"
+"MS-Windows 64-bit console version"
+msgstr ""
+"\n"
+"Консольная версия для MS-Windows 64 бит"
+
+msgid ""
+"\n"
 "MS-Windows 32-bit console version"
 msgstr ""
 "\n"
@@ -4614,10 +5921,10 @@
 
 msgid ""
 "\n"
-"RISC OS version"
+"OpenVMS version"
 msgstr ""
 "\n"
-"Версия для RISC OS"
+"Версия для OpenVMS"
 
 msgid ""
 "\n"
@@ -4626,6 +5933,13 @@
 "\n"
 "Заплатки: "
 
+msgid ""
+"\n"
+"Extra patches: "
+msgstr ""
+"\n"
+"Дополнительные заплатки: "
+
 msgid "Modified by "
 msgstr "С изменениями, внесёнными "
 
@@ -4680,15 +5994,9 @@
 msgid "with GTK2-GNOME GUI."
 msgstr "с графическим интерфейсом GTK2-GNOME."
 
-msgid "with GTK-GNOME GUI."
-msgstr "с графическим интерфейсом GTK-GNOME."
-
 msgid "with GTK2 GUI."
 msgstr "с графическим интерфейсом GTK2."
 
-msgid "with GTK GUI."
-msgstr "с графическим интерфейсом GTK."
-
 msgid "with X11-Motif GUI."
 msgstr "с графическим интерфейсом X11-Motif."
 
@@ -4698,9 +6006,6 @@
 msgid "with X11-Athena GUI."
 msgstr "с графическим интерфейсом X11-Athena."
 
-msgid "with BeOS GUI."
-msgstr "с графическим интерфейсом BeOS."
-
 msgid "with Photon GUI."
 msgstr "с графическим интерфейсом Photon."
 
@@ -4771,7 +6076,7 @@
 msgstr "  ОТЛАДОЧНАЯ СБОРКА"
 
 msgid "VIM - Vi IMproved"
-msgstr "VIM ::: Vi IMproved (Улучшенный Vi) ::: Русская версия"
+msgstr "VIM — Vi IMproved (улучшенный Vi)"
 
 msgid "version "
 msgstr "версия "
@@ -4810,16 +6115,16 @@
 msgstr "меню Справка->Сироты             для получения информации     "
 
 msgid "Running modeless, typed text is inserted"
-msgstr "Безрежимная работы, вставка введённого текста"
+msgstr "Безрежимная работа, вставка введённого текста"
 
 msgid "menu  Edit->Global Settings->Toggle Insert Mode  "
-msgstr "меню Правка->Общие Настройки->Режим Вставки                     "
+msgstr "меню Правка->Глобальные настройки->Режим Вставки                     "
 
 msgid "                              for two modes      "
 msgstr "                                 для двух режимов               "
 
 msgid "menu  Edit->Global Settings->Toggle Vi Compatible"
-msgstr "меню Правка->Общие Настройки->Совместимость с Vi                "
+msgstr "меню Правка->Глобальные настройки->Совместимость с Vi                "
 
 msgid "                              for Vim defaults   "
 msgstr "                                 для перехода в режим Vim       "
@@ -4845,6 +6150,9 @@
 msgid "type  :help windows95<Enter>  for info on this"
 msgstr "наберите :help windows95<Enter>  для получения информации     "
 
+msgid "Already only one window"
+msgstr "На экране всего одно окно"
+
 msgid "E441: There is no preview window"
 msgstr "E441: Окно предпросмотра отсутствует"
 
@@ -4857,8 +6165,11 @@
 msgid "E444: Cannot close last window"
 msgstr "E444: Нельзя закрыть последнее окно"
 
-msgid "Already only one window"
-msgstr "На экране всего одно окно"
+msgid "E813: Cannot close autocmd window"
+msgstr "E813: Нельзя закрыть окно автокоманд"
+
+msgid "E814: Cannot close window, only autocmd window would remain"
+msgstr "E814: Нельзя закрыть окно, останется только окно автокоманд"
 
 msgid "E445: Other window contains changes"
 msgstr "E445: В другом окне есть несохранённые изменения"
@@ -4896,7 +6207,7 @@
 
 #. Now concatenate
 msgid "Edit with existing Vim - "
-msgstr "Редактировать в запущенном Vim - "
+msgstr "Редактировать в запущенном Vim — "
 
 msgid "Edits the selected file(s) with Vim"
 msgstr "Редактировать выделенные файлы с помощью Vim"
@@ -4943,11 +6254,17 @@
 msgid "E170: Missing :endwhile"
 msgstr "E170: Отсутствует команда :endwhile"
 
+msgid "E170: Missing :endfor"
+msgstr "E170: Отсутствует команда :endfor"
+
 msgid "E588: :endwhile without :while"
 msgstr "E588: Команда :endwhile без парной команды :while"
 
+msgid "E588: :endfor without :for"
+msgstr "E588: :endfor без :for"
+
 msgid "E13: File exists (add ! to override)"
-msgstr "E13: Файл существует (для перезаписи добавьте !)"
+msgstr "E13: Файл существует (добавьте !, чтобы перезаписать)"
 
 msgid "E472: Command failed"
 msgstr "E472: Не удалось выполнить команду"
@@ -4962,7 +6279,7 @@
 
 #, c-format
 msgid "E236: Font \"%s\" is not fixed-width"
-msgstr "E236: Шрифт \"%s\" не является моноширинным шрифтом"
+msgstr "E236: Шрифт \"%s\" не является моноширинным"
 
 msgid "E473: Internal error"
 msgstr "E473: Внутренняя ошибка"
@@ -4974,11 +6291,11 @@
 msgstr "E14: Недопустимый адрес"
 
 msgid "E474: Invalid argument"
-msgstr "E474: Недопустимый аргумент"
+msgstr "E474: Недопустимый параметр"
 
 #, c-format
 msgid "E475: Invalid argument: %s"
-msgstr "E475: Недопустимый аргумент: %s"
+msgstr "E475: Недопустимый параметр: %s"
 
 #, c-format
 msgid "E15: Invalid expression: %s"
@@ -4994,9 +6311,6 @@
 msgid "E17: \"%s\" is a directory"
 msgstr "E17: \"%s\" является каталогом"
 
-msgid "E18: Unexpected characters before '='"
-msgstr "E18: Перед '=' обнаружены неожиданные символы"
-
 #, c-format
 msgid "E364: Library call failed for \"%s()\""
 msgstr "E364: Неудачный вызов функции \"%s()\" из библиотеки"
@@ -5080,7 +6394,7 @@
 
 #, c-format
 msgid "E247: no registered server named \"%s\""
-msgstr "E247: сервер \"%s\" не зарегистрирован"
+msgstr "E247: Сервер \"%s\" не зарегистрирован"
 
 #, c-format
 msgid "E482: Can't create file %s"
@@ -5101,7 +6415,7 @@
 msgstr "E37: Изменения не сохранены (добавьте !, чтобы обойти проверку)"
 
 msgid "E38: Null argument"
-msgstr "E38: Нулевой аргумент"
+msgstr "E38: Нулевой параметр"
 
 msgid "E39: Number expected"
 msgstr "E39: Требуется число"
@@ -5111,7 +6425,7 @@
 msgstr "E40: Не удалось открыть файл ошибок %s"
 
 msgid "E233: cannot open display"
-msgstr "E233: невозможно открыть дисплей"
+msgstr "E233: Невозможно открыть дисплей"
 
 msgid "E41: Out of memory!"
 msgstr "E41: Не хватает памяти!"
@@ -5130,7 +6444,10 @@
 msgstr "E459: Возврат в предыдущий каталог невозможен"
 
 msgid "E42: No Errors"
-msgstr "E42: Ошибок нет"
+msgstr "E42: Нет ошибок"
+
+msgid "E776: No location list"
+msgstr "E776: Нет списка расположений"
 
 msgid "E43: Damaged match string"
 msgstr "E43: Повреждена строка соответствия"
@@ -5139,12 +6456,15 @@
 msgstr "E44: Программа обработки регулярных выражений повреждена"
 
 msgid "E45: 'readonly' option is set (add ! to override)"
-msgstr ""
-"E45: Включена опция 'readonly' (добавьте !, чтобы не обращать внимания)"
+msgstr "E45: Включена опция 'readonly' (добавьте !, чтобы обойти проверку)"
 
 #, c-format
-msgid "E46: Cannot set read-only variable \"%s\""
-msgstr "E46: Невозможно изменить доступную только для чтения переменную \"%s\""
+msgid "E46: Cannot change read-only variable \"%s\""
+msgstr "E46: Невозможно изменить переменную только для чтения \"%s\""
+
+#, c-format
+msgid "E794: Cannot set variable in the sandbox: \"%s\""
+msgstr "E794: Невозможно изменить переменную в песочнице: \"%s\""
 
 msgid "E47: Error while reading errorfile"
 msgstr "E47: Ошибка при чтении файла ошибок"
@@ -5217,3 +6537,146 @@
 msgid "E463: Region is guarded, cannot modify"
 msgstr "E463: Невозможно изменить охраняемую область"
 
+msgid "E744: NetBeans does not allow changes in read-only files"
+msgstr "E744: NetBeans не допускает изменений в файлах только для чтения"
+
+#, c-format
+msgid "E685: Internal error: %s"
+msgstr "E685: Внутренняя ошибка: %s"
+
+msgid "E363: pattern uses more memory than 'maxmempattern'"
+msgstr "E363: Шаблон использует больше памяти чем 'maxmempattern'"
+
+msgid "E749: empty buffer"
+msgstr "E749: Пустой буфер"
+
+msgid "E682: Invalid search pattern or delimiter"
+msgstr "E682: Неправильная строка поиска или разделитель"
+
+msgid "E139: File is loaded in another buffer"
+msgstr "E139: Файл загружен в другом буфере"
+
+#, c-format
+msgid "E764: Option '%s' is not set"
+msgstr "E764: Опция '%s' не установлена"
+
+msgid "E850: Invalid register name"
+msgstr "E850: Недопустимое имя регистра"
+
+msgid "search hit TOP, continuing at BOTTOM"
+msgstr "Поиск будет продолжен с КОНЦА документа"
+
+msgid "search hit BOTTOM, continuing at TOP"
+msgstr "Поиск будет продолжен с НАЧАЛА документа"
+
+#, c-format
+msgid "Need encryption key for \"%s\""
+msgstr "Требуется ключ шифрования для \"%s\""
+
+msgid "can't delete OutputObject attributes"
+msgstr "невозможно удалить атрибуты OutputObject"
+
+msgid "softspace must be an integer"
+msgstr "значение softspace должно быть целым числом"
+
+msgid "invalid attribute"
+msgstr "неправильный атрибут"
+
+msgid "writelines() requires list of strings"
+msgstr "writelines() требует указания списка строк"
+
+msgid "E264: Python: Error initialising I/O objects"
+msgstr "E264: Python: Ошибка инициализации объектов I/O"
+
+msgid "no such buffer"
+msgstr "нет такого буфера"
+
+msgid "empty keys are not allowed"
+msgstr "пустые ключи не допустимы"
+
+msgid "failed to add key to dictionary"
+msgstr "невозможно добавить ключ к словарю"
+
+msgid "Cannot delete DictionaryObject attributes"
+msgstr "Невозможно удалить атрибуты DictionaryObject"
+
+msgid "Cannot modify fixed dictionary"
+msgstr "Невозможно изменить фиксированный словарь"
+
+msgid "Only boolean objects are allowed"
+msgstr "Разрешено использовать только логические объекты"
+
+msgid "Cannot set this attribute"
+msgstr "Невозможно установить этот атрибут"
+
+msgid "no such key in dictionary"
+msgstr "нет такого ключа в словаре"
+
+msgid "dict is locked"
+msgstr "словарь заблокирован"
+
+msgid "internal error: failed to get vim list item"
+msgstr "внутренняя ошибка: не удалось получить элемент списка VIM"
+
+msgid "list is locked"
+msgstr "список заблокирован"
+
+msgid "Failed to add item to list"
+msgstr "Невозможно добавить элемент в список"
+
+msgid "internal error: no vim list item"
+msgstr "внутренняя ошибка: нет элемента списка VIM"
+
+msgid "can only assign lists to slice"
+msgstr "назначение выборки возможно только для списков"
+
+msgid "internal error: failed to add item to list"
+msgstr "внутренняя ошибка: не удалось добавить элемент в список"
+
+msgid "can only concatenate with lists"
+msgstr "можно объединить только списки"
+
+msgid "Cannot modify fixed list"
+msgstr "Невозможно изменить фиксированный список"
+
+msgid "'self' argument must be a dictionary"
+msgstr "параметр 'self' должен быть словарём"
+
+msgid "failed to run function"
+msgstr "невозможно выполнить функцию"
+
+msgid "attempt to refer to deleted window"
+msgstr "попытка сослаться на закрытое окно"
+
+msgid "readonly attribute"
+msgstr "атрибут доступен только для чтения"
+
+msgid "cursor position outside buffer"
+msgstr "позиция курсора находится вне буфера"
+
+#, c-format
+msgid "<window object (deleted) at %p>"
+msgstr "<объект окна (удален) в %p>"
+
+#, c-format
+msgid "<window object (unknown) at %p>"
+msgstr "<объект окна (неизвестен) в %p>"
+
+#, c-format
+msgid "<window %d>"
+msgstr "<окно %d>"
+
+msgid "no such window"
+msgstr "нет такого окна"
+
+msgid "attempt to refer to deleted buffer"
+msgstr "попытка сослаться на уничтоженный буфер"
+
+msgid "unable to convert to vim structure"
+msgstr "невозможно преобразовать в структуру VIM"
+
+msgid "NULL reference passed"
+msgstr "передана ссылка на NULL"
+
+msgid "internal error: invalid value type"
+msgstr "внутренняя ошибка: неправильный тип значения"