Update runtime files.  Add Rust support.
diff --git a/runtime/doc/Makefile b/runtime/doc/Makefile
index 33a09be..1a0e841 100644
--- a/runtime/doc/Makefile
+++ b/runtime/doc/Makefile
@@ -30,6 +30,7 @@
 	filetype.txt \
 	fold.txt \
 	ft_ada.txt \
+	ft_rust.txt \
 	ft_sql.txt \
 	gui.txt \
 	gui_w32.txt \
@@ -165,6 +166,7 @@
 	filetype.html \
 	fold.html \
 	ft_ada.html \
+	ft_rust.html \
 	ft_sql.html \
 	gui.html \
 	gui_w32.html \
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index ff1b71f..db0a756 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -1,4 +1,4 @@
-*eval.txt*	For Vim version 8.0.  Last change: 2017 Mar 18
+*eval.txt*	For Vim version 8.0.  Last change: 2017 Mar 21
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -2261,12 +2261,13 @@
 reltime([{start} [, {end}]])	List	get time value
 reltimefloat({time})		Float	turn the time value into a Float
 reltimestr({time})		String	turn time value into a String
-remote_expr({server}, {string} [, {idvar}])
+remote_expr({server}, {string} [, {idvar} [, {timeout}]])
 				String	send expression
 remote_foreground({server})	Number	bring Vim server to the foreground
 remote_peek({serverid} [, {retvar}])
 				Number	check for reply string
-remote_read({serverid})		String	read reply string
+remote_read({serverid} [, {timeout}])
+				String	read reply string
 remote_send({server}, {string} [, {idvar}])
 				String	send key sequence
 remote_startserver({name})	none	become server {name}
diff --git a/runtime/doc/filetype.txt b/runtime/doc/filetype.txt
index 4b0a185..8f58d76 100644
--- a/runtime/doc/filetype.txt
+++ b/runtime/doc/filetype.txt
@@ -1,4 +1,4 @@
-*filetype.txt*  For Vim version 8.0.  Last change: 2017 Jan 04
+*filetype.txt*  For Vim version 8.0.  Last change: 2017 Mar 21
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -663,6 +663,12 @@
 file: |pi_spec.txt|.
 
 
+RUST							*ft-rust*
+
+Since the text for this plugin is rather long it has been put in a separate
+file: |ft_rust.txt|.
+
+
 SQL							*ft-sql*
 
 Since the text for this plugin is rather long it has been put in a separate
diff --git a/runtime/doc/fold.txt b/runtime/doc/fold.txt
index c3f4132..bdf4a48 100644
--- a/runtime/doc/fold.txt
+++ b/runtime/doc/fold.txt
@@ -1,4 +1,4 @@
-*fold.txt*      For Vim version 8.0.  Last change: 2016 Jan 02
+*fold.txt*      For Vim version 8.0.  Last change: 2017 Mar 18
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -79,7 +79,7 @@
 	:set foldexpr=MyFoldLevel(v:lnum)
 This will make a fold out of paragraphs separated by blank lines: >
 	:set foldexpr=getline(v:lnum)=~'^\\s*$'&&getline(v:lnum+1)=~'\\S'?'<1':1
-this does the same: >
+This does the same: >
 	:set foldexpr=getline(v:lnum-1)=~'^\\s*$'&&getline(v:lnum)=~'\\S'?'>1':1
 
 Note that backslashes must be used to escape characters that ":set" handles
@@ -203,7 +203,7 @@
 1. If a marker with the same fold level is encountered, the previous fold
    ends and another fold with the same level starts.
 2. If a marker with a higher fold level is found, a nested fold is started.
-3. if a marker with a lower fold level is found, all folds up to and including
+3. If a marker with a lower fold level is found, all folds up to and including
    this level end and a fold with the specified level starts.
 
 The number indicates the fold level.  A zero cannot be used (a marker with
diff --git a/runtime/doc/ft_rust.txt b/runtime/doc/ft_rust.txt
new file mode 100644
index 0000000..b6e974e
--- /dev/null
+++ b/runtime/doc/ft_rust.txt
@@ -0,0 +1,237 @@
+*ft_rust.txt*      Filetype plugin for Rust
+
+==============================================================================
+CONTENTS                                                      *rust* *ft-rust*
+
+1. Introduction                                                   |rust-intro|
+2. Settings                                                    |rust-settings|
+3. Commands                                                    |rust-commands|
+4. Mappings                                                    |rust-mappings|
+
+==============================================================================
+INTRODUCTION                                                      *rust-intro*
+
+This plugin provides syntax and supporting functionality for the Rust
+filetype.
+
+==============================================================================
+SETTINGS                                                       *rust-settings*
+
+This plugin has a few variables you can define in your vimrc that change the
+behavior of the plugin.
+
+                                                                *g:rustc_path*
+g:rustc_path~
+	Set this option to the path to rustc for use in the |:RustRun| and
+	|:RustExpand| commands. If unset, "rustc" will be located in $PATH: >
+	    let g:rustc_path = $HOME."/bin/rustc"
+<
+
+                                                  *g:rustc_makeprg_no_percent*
+g:rustc_makeprg_no_percent~
+	Set this option to 1 to have 'makeprg' default to "rustc" instead of
+	"rustc %": >
+	    let g:rustc_makeprg_no_percent = 1
+<
+
+                                                              *g:rust_conceal*
+g:rust_conceal~
+	Set this option to turn on the basic |conceal| support: >
+	    let g:rust_conceal = 1
+<
+
+                                                     *g:rust_conceal_mod_path*
+g:rust_conceal_mod_path~
+	Set this option to turn on |conceal| for the path connecting token
+	"::": >
+	    let g:rust_conceal_mod_path = 1
+<
+
+                                                          *g:rust_conceal_pub*
+g:rust_conceal_pub~
+	Set this option to turn on |conceal| for the "pub" token: >
+	    let g:rust_conceal_pub = 1
+<
+
+                                                     *g:rust_recommended_style*
+g:rust_recommended_style~
+        Set this option to enable vim indentation and textwidth settings to
+        conform to style conventions of the rust standard library (i.e. use 4
+        spaces for indents and sets 'textwidth' to 99). This option is enabled
+	by default. To disable it: >
+	    let g:rust_recommended_style = 0
+<
+
+                                                                 *g:rust_fold*
+g:rust_fold~
+	Set this option to turn on |folding|: >
+	    let g:rust_fold = 1
+<
+	Value		Effect ~
+	0		No folding
+	1		Braced blocks are folded. All folds are open by
+			default.
+	2		Braced blocks are folded. 'foldlevel' is left at the
+			global value (all folds are closed by default).
+
+                                                  *g:rust_bang_comment_leader*
+g:rust_bang_comment_leader~
+	Set this option to 1 to preserve the leader on multi-line doc comments
+	using the /*! syntax: >
+	    let g:rust_bang_comment_leader = 1
+<
+
+                                                 *g:ftplugin_rust_source_path*
+g:ftplugin_rust_source_path~
+	Set this option to a path that should be prepended to 'path' for Rust
+	source files: >
+	    let g:ftplugin_rust_source_path = $HOME.'/dev/rust'
+<
+
+                                                       *g:rustfmt_command*
+g:rustfmt_command~
+	Set this option to the name of the 'rustfmt' executable in your $PATH. If
+	not specified it defaults to 'rustfmt' : >
+	    let g:rustfmt_command = 'rustfmt'
+<
+                                                       *g:rustfmt_autosave*
+g:rustfmt_autosave~
+	Set this option to 1 to run |:RustFmt| automatically when saving a
+	buffer. If not specified it defaults to 0 : >
+	    let g:rustfmt_autosave = 0
+<
+                                                       *g:rustfmt_fail_silently*
+g:rustfmt_fail_silently~
+	Set this option to 1 to prevent 'rustfmt' from populating the
+	|location-list| with errors. If not specified it defaults to 0: >
+	    let g:rustfmt_fail_silently = 0
+<
+                                                       *g:rustfmt_options*
+g:rustfmt_options~
+	Set this option to a string of options to pass to 'rustfmt'. The
+	write-mode is already set to 'overwrite'. If not specified it
+	defaults to '' : >
+	    let g:rustfmt_options = ''
+<
+
+                                                          *g:rust_playpen_url*
+g:rust_playpen_url~
+	Set this option to override the url for the playpen to use: >
+	    let g:rust_playpen_url = 'https://play.rust-lang.org/'
+<
+
+                                                        *g:rust_shortener_url*
+g:rust_shortener_url~
+	Set this option to override the url for the url shortener: >
+	    let g:rust_shortener_url = 'https://is.gd/'
+<
+
+
+==============================================================================
+COMMANDS                                                       *rust-commands*
+
+:RustRun  [args]                                                    *:RustRun*
+:RustRun! [rustc-args] [--] [args]
+		Compiles and runs the current file. If it has unsaved changes,
+		it will be saved first using |:update|. If the current file is
+		an unnamed buffer, it will be written to a temporary file
+		first. The compiled binary is always placed in a temporary
+		directory, but is run from the current directory.
+
+		The arguments given to |:RustRun| will be passed to the
+		compiled binary.
+
+		If ! is specified, the arguments are passed to rustc instead.
+		A "--" argument will separate the rustc arguments from the
+		arguments passed to the binary.
+
+		If |g:rustc_path| is defined, it is used as the path to rustc.
+		Otherwise it is assumed rustc can be found in $PATH.
+
+:RustExpand  [args]                                              *:RustExpand*
+:RustExpand! [TYPE] [args]
+		Expands the current file using --pretty and displays the
+		results in a new split. If the current file has unsaved
+		changes, it will be saved first using |:update|. If the
+		current file is an unnamed buffer, it will be written to a
+		temporary file first.
+
+		The arguments given to |:RustExpand| will be passed to rustc.
+		This is largely intended for specifying various --cfg
+		configurations.
+
+		If ! is specified, the first argument is the expansion type to
+		pass to rustc --pretty. Otherwise it will default to
+		"expanded".
+
+		If |g:rustc_path| is defined, it is used as the path to rustc.
+		Otherwise it is assumed rustc can be found in $PATH.
+
+:RustEmitIr [args]                                               *:RustEmitIr*
+		Compiles the current file to LLVM IR and displays the results
+		in a new split. If the current file has unsaved changes, it
+		will be saved first using |:update|. If the current file is an
+		unnamed buffer, it will be written to a temporary file first.
+
+		The arguments given to |:RustEmitIr| will be passed to rustc.
+
+		If |g:rustc_path| is defined, it is used as the path to rustc.
+		Otherwise it is assumed rustc can be found in $PATH.
+
+:RustEmitAsm [args]                                             *:RustEmitAsm*
+		Compiles the current file to assembly and displays the results
+		in a new split. If the current file has unsaved changes, it
+		will be saved first using |:update|. If the current file is an
+		unnamed buffer, it will be written to a temporary file first.
+
+		The arguments given to |:RustEmitAsm| will be passed to rustc.
+
+		If |g:rustc_path| is defined, it is used as the path to rustc.
+		Otherwise it is assumed rustc can be found in $PATH.
+
+:RustPlay                                                          *:RustPlay*
+		This command will only work if you have web-api.vim installed
+		(available at https://github.com/mattn/webapi-vim).  It sends the
+		current selection, or if nothing is selected, the entirety of the
+		current buffer to the Rust playpen, and emits a message with the
+		shortened URL to the playpen.
+
+		|g:rust_playpen_url| is the base URL to the playpen, by default
+		"https://play.rust-lang.org/".
+
+		|g:rust_shortener_url| is the base url for the shorterner, by
+		default "https://is.gd/"
+
+:RustFmt                                                       *:RustFmt*
+		Runs |g:rustfmt_command| on the current buffer. If
+		|g:rustfmt_options| is set then those will be passed to the
+		executable.
+
+		If |g:rustfmt_fail_silently| is 0 (the default) then it
+		will populate the |location-list| with the errors from
+		|g:rustfmt_command|. If |g:rustfmt_fail_silently| is set to 1
+		then it will not populate the |location-list|.
+
+:RustFmtRange                                                  *:RustFmtRange*
+		Runs |g:rustfmt_command| with selected range. See
+		|:RustFmt| for any other information.
+
+==============================================================================
+MAPPINGS                                                       *rust-mappings*
+
+This plugin defines mappings for |[[| and |]]| to support hanging indents.
+
+It also has a few other mappings:
+
+							*rust_<D-r>*
+<D-r>			Executes |:RustRun| with no arguments.
+			Note: This binding is only available in MacVim.
+
+							*rust_<D-R>*
+<D-R>			Populates the command line with |:RustRun|! using the
+			arguments given to the last invocation, but does not
+			execute it.
+			Note: This binding is only available in MacVim.
+
+==============================================================================
+ vim:tw=78:sw=4:noet:ts=8:ft=help:norl:
diff --git a/runtime/doc/helphelp.txt b/runtime/doc/helphelp.txt
index 20f1ed8..80fc70c 100644
--- a/runtime/doc/helphelp.txt
+++ b/runtime/doc/helphelp.txt
@@ -1,4 +1,4 @@
-*helphelp.txt*	For Vim version 8.0.  Last change: 2017 Feb 09
+*helphelp.txt*	For Vim version 8.0.  Last change: 2017 Mar 19
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -142,7 +142,8 @@
 			already opened, then the location list for that window
 			is used.  Otherwise, a new help window is opened and
 			the location list for that window is set.  The
-			location list for the current window is not changed.
+			location list for the current window is not changed
+			then.
 
 							*:exu* *:exusage*
 :exu[sage]		Show help on Ex commands.  Added to simulate the Nvi
diff --git a/runtime/doc/remote.txt b/runtime/doc/remote.txt
index 86fdd49..cecdd6a 100644
--- a/runtime/doc/remote.txt
+++ b/runtime/doc/remote.txt
@@ -1,4 +1,4 @@
-*remote.txt*    For Vim version 8.0.  Last change: 2015 Mar 01
+*remote.txt*    For Vim version 8.0.  Last change: 2017 Mar 18
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -149,6 +149,7 @@
 the full explanation.
 
     synopsis				     explanation ~
+    remote_startserver( name)		     run a server
     remote_expr( server, string, idvar)      send expression
     remote_send( server, string, idvar)      send key sequence
     serverlist()			     get a list of available servers
diff --git a/runtime/doc/tags b/runtime/doc/tags
index 68c611b..6e74c66 100644
--- a/runtime/doc/tags
+++ b/runtime/doc/tags
@@ -1927,6 +1927,13 @@
 :Print	various.txt	/*:Print*
 :Rexplore	pi_netrw.txt	/*:Rexplore*
 :RmVimball	pi_vimball.txt	/*:RmVimball*
+:RustEmitAsm	ft_rust.txt	/*:RustEmitAsm*
+:RustEmitIr	ft_rust.txt	/*:RustEmitIr*
+:RustExpand	ft_rust.txt	/*:RustExpand*
+:RustFmt	ft_rust.txt	/*:RustFmt*
+:RustFmtRange	ft_rust.txt	/*:RustFmtRange*
+:RustPlay	ft_rust.txt	/*:RustPlay*
+:RustRun	ft_rust.txt	/*:RustRun*
 :Sexplore	pi_netrw.txt	/*:Sexplore*
 :TOhtml	syntax.txt	/*:TOhtml*
 :TarDiff	pi_tar.txt	/*:TarDiff*
@@ -4505,6 +4512,8 @@
 E939	change.txt	/*E939*
 E94	windows.txt	/*E94*
 E940	eval.txt	/*E940*
+E941	eval.txt	/*E941*
+E942	eval.txt	/*E942*
 E95	message.txt	/*E95*
 E96	diff.txt	/*E96*
 E97	diff.txt	/*E97*
@@ -5013,6 +5022,7 @@
 assert_match()	eval.txt	/*assert_match()*
 assert_notequal()	eval.txt	/*assert_notequal()*
 assert_notmatch()	eval.txt	/*assert_notmatch()*
+assert_report()	eval.txt	/*assert_report()*
 assert_true()	eval.txt	/*assert_true()*
 at	motion.txt	/*at*
 atan()	eval.txt	/*atan()*
@@ -6128,6 +6138,8 @@
 ft-rst-syntax	syntax.txt	/*ft-rst-syntax*
 ft-ruby-omni	insert.txt	/*ft-ruby-omni*
 ft-ruby-syntax	syntax.txt	/*ft-ruby-syntax*
+ft-rust	filetype.txt	/*ft-rust*
+ft-rust	ft_rust.txt	/*ft-rust*
 ft-scheme-syntax	syntax.txt	/*ft-scheme-syntax*
 ft-sdl-syntax	syntax.txt	/*ft-sdl-syntax*
 ft-sed-syntax	syntax.txt	/*ft-sed-syntax*
@@ -6160,6 +6172,7 @@
 ft-yaml-syntax	syntax.txt	/*ft-yaml-syntax*
 ft-zsh-syntax	syntax.txt	/*ft-zsh-syntax*
 ft_ada.txt	ft_ada.txt	/*ft_ada.txt*
+ft_rust.txt	ft_rust.txt	/*ft_rust.txt*
 ft_sql.txt	ft_sql.txt	/*ft_sql.txt*
 ftdetect	filetype.txt	/*ftdetect*
 ftp	pi_netrw.txt	/*ftp*
@@ -6237,6 +6250,7 @@
 g:decada.Unit_Name()	ft_ada.txt	/*g:decada.Unit_Name()*
 g:filetype_csh	syntax.txt	/*g:filetype_csh*
 g:filetype_r	syntax.txt	/*g:filetype_r*
+g:ftplugin_rust_source_path	ft_rust.txt	/*g:ftplugin_rust_source_path*
 g:gnat	ft_ada.txt	/*g:gnat*
 g:gnat.Error_Format	ft_ada.txt	/*g:gnat.Error_Format*
 g:gnat.Find()	ft_ada.txt	/*g:gnat.Find()*
@@ -6366,6 +6380,20 @@
 g:netrw_winsize	pi_netrw.txt	/*g:netrw_winsize*
 g:netrw_wiw	pi_netrw.txt	/*g:netrw_wiw*
 g:netrw_xstrlen	pi_netrw.txt	/*g:netrw_xstrlen*
+g:rust_bang_comment_leader	ft_rust.txt	/*g:rust_bang_comment_leader*
+g:rust_conceal	ft_rust.txt	/*g:rust_conceal*
+g:rust_conceal_mod_path	ft_rust.txt	/*g:rust_conceal_mod_path*
+g:rust_conceal_pub	ft_rust.txt	/*g:rust_conceal_pub*
+g:rust_fold	ft_rust.txt	/*g:rust_fold*
+g:rust_playpen_url	ft_rust.txt	/*g:rust_playpen_url*
+g:rust_recommended_style	ft_rust.txt	/*g:rust_recommended_style*
+g:rust_shortener_url	ft_rust.txt	/*g:rust_shortener_url*
+g:rustc_makeprg_no_percent	ft_rust.txt	/*g:rustc_makeprg_no_percent*
+g:rustc_path	ft_rust.txt	/*g:rustc_path*
+g:rustfmt_autosave	ft_rust.txt	/*g:rustfmt_autosave*
+g:rustfmt_command	ft_rust.txt	/*g:rustfmt_command*
+g:rustfmt_fail_silently	ft_rust.txt	/*g:rustfmt_fail_silently*
+g:rustfmt_options	ft_rust.txt	/*g:rustfmt_options*
 g:syntax_on	syntax.txt	/*g:syntax_on*
 g:tar_browseoptions	pi_tar.txt	/*g:tar_browseoptions*
 g:tar_cmd	pi_tar.txt	/*g:tar_cmd*
@@ -8019,6 +8047,7 @@
 remote_peek()	eval.txt	/*remote_peek()*
 remote_read()	eval.txt	/*remote_read()*
 remote_send()	eval.txt	/*remote_send()*
+remote_startserver()	eval.txt	/*remote_startserver()*
 remove()	eval.txt	/*remove()*
 remove-filetype	filetype.txt	/*remove-filetype*
 remove-option-flags	options.txt	/*remove-option-flags*
@@ -8074,6 +8103,13 @@
 russian-keymap	russian.txt	/*russian-keymap*
 russian-l18n	russian.txt	/*russian-l18n*
 russian.txt	russian.txt	/*russian.txt*
+rust	ft_rust.txt	/*rust*
+rust-commands	ft_rust.txt	/*rust-commands*
+rust-intro	ft_rust.txt	/*rust-intro*
+rust-mappings	ft_rust.txt	/*rust-mappings*
+rust-settings	ft_rust.txt	/*rust-settings*
+rust_<D-R>	ft_rust.txt	/*rust_<D-R>*
+rust_<D-r>	ft_rust.txt	/*rust_<D-r>*
 rview	starting.txt	/*rview*
 rvim	starting.txt	/*rvim*
 rxvt	syntax.txt	/*rxvt*
diff --git a/runtime/doc/todo.txt b/runtime/doc/todo.txt
index 67a00be..281cbc0 100644
--- a/runtime/doc/todo.txt
+++ b/runtime/doc/todo.txt
@@ -1,4 +1,4 @@
-*todo.txt*      For Vim version 8.0.  Last change: 2017 Mar 16
+*todo.txt*      For Vim version 8.0.  Last change: 2017 Mar 21
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -35,12 +35,6 @@
 							*known-bugs*
 -------------------- Known bugs and current work -----------------------
 
-Using "g<" after ":for x in [1,2,3]|echom x|endfor" looks wrong. (Marcin
-Szamotulski, 2017 Mar 12)
-Also, using Ctrl-C clears the last part.
-
-Test 45 fails on MS-Windows only before resetting 'sw'. Why?
-
 +channel:
 - Try out background make plugin: 
   https://github.com/AndrewVos/vim-make-background
@@ -116,13 +110,8 @@
 
 Memory leak in test97?  The string is actually freed.  Weird.
 
-Include rust files.  Got all permissions?
-
-dict_add_list and dict_add_dict may free item when failing. (2017 Mar 12,
-Nikolai Pavlov, #1555)
-
-Patch to add buffer name argument to taglist().
-Ordering of tags in result of taglist call. (Duncan McDougall, #1194)
+Patch to make "start" work better: Use ShellExecute in !start (Katsuya Hino,
+#1570)
 
 Add a toolbar in the terminal.  Can be global, above all windows, or specific
 for one window.
diff --git a/runtime/doc/usr_41.txt b/runtime/doc/usr_41.txt
index 4bffb47..5bf855c 100644
--- a/runtime/doc/usr_41.txt
+++ b/runtime/doc/usr_41.txt
@@ -1,4 +1,4 @@
-*usr_41.txt*	For Vim version 8.0.  Last change: 2017 Mar 09
+*usr_41.txt*	For Vim version 8.0.  Last change: 2017 Mar 18
 
 		     VIM USER MANUAL - by Bram Moolenaar
 
@@ -889,6 +889,7 @@
 
 Vim server:					*server-functions*
 	serverlist()		return the list of server names
+	remote_startserve()	run a server
 	remote_send()		send command characters to a Vim server
 	remote_expr()		evaluate an expression in a Vim server
 	server2client()		send a reply to a client of a Vim server
@@ -920,6 +921,7 @@
 	assert_true()		assert that an expression is true
 	assert_exception()	assert that a command throws an exception
 	assert_fails()		assert that a function call fails
+	assert_report()		report a test failure
 	test_alloc_fail()	make memory allocation fail
 	test_autochdir()	enable 'autochdir' during startup
 	test_override()		test with Vim internal overrides