changeset 10261:bdd7fc1a38c0

commit https://github.com/vim/vim/commit/dc08328821a2c11e33dfb1980332e4923ec64fca Author: Bram Moolenaar <Bram@vim.org> Date: Tue Oct 11 08:57:33 2016 +0200 Updated runtime files.
author Christian Brabandt <cb@256bit.org>
date Wed, 12 Oct 2016 12:15:04 +0200
parents 2fff06882079
children d69ee8806ec9
files runtime/autoload/phpcomplete.vim runtime/colors/evening.vim runtime/doc/options.txt runtime/doc/syntax.txt runtime/doc/tags runtime/doc/todo.txt runtime/ftplugin/mf.vim runtime/ftplugin/mp.vim runtime/ftplugin/python.vim runtime/indent/mp.vim runtime/syntax/avra.vim
diffstat 11 files changed, 163 insertions(+), 90 deletions(-) [+]
line wrap: on
line diff
--- a/runtime/autoload/phpcomplete.vim
+++ b/runtime/autoload/phpcomplete.vim
@@ -3,7 +3,7 @@
 " Maintainer:	Dávid Szabó ( complex857 AT gmail DOT com )
 " Previous Maintainer:	Mikolaj Machowski ( mikmach AT wp DOT pl )
 " URL: https://github.com/shawncplus/phpcomplete.vim
-" Last Change:  2015 Jul 13
+" Last Change:  2016 Oct 10
 "
 "	OPTIONS:
 "
@@ -195,6 +195,8 @@ function! phpcomplete#CompletePHP(findst
 			" }}}
 		elseif context =~? 'implements'
 			return phpcomplete#CompleteClassName(a:base, ['i'], current_namespace, imports)
+		elseif context =~? 'instanceof'
+			return phpcomplete#CompleteClassName(a:base, ['c', 'n'], current_namespace, imports)
 		elseif context =~? 'extends\s\+.\+$' && a:base == ''
 			return ['implements']
 		elseif context =~? 'extends'
@@ -787,6 +789,8 @@ function! phpcomplete#CompleteClassName(
 
 	if kinds == ['c', 'i']
 		let filterstr = 'v:val =~? "\\(class\\|interface\\)\\s\\+[a-zA-Z_\\x7f-\\xff][a-zA-Z_0-9\\x7f-\\xff]*\\s*"'
+	elseif kinds == ['c', 'n']
+		let filterstr = 'v:val =~? "\\(class\\|namespace\\)\\s\\+[a-zA-Z_\\x7f-\\xff][a-zA-Z_0-9\\x7f-\\xff]*\\s*"'
 	elseif kinds == ['c']
 		let filterstr = 'v:val =~? "class\\s\\+[a-zA-Z_\\x7f-\\xff][a-zA-Z_0-9\\x7f-\\xff]*\\s*"'
 	elseif kinds == ['i']
@@ -996,7 +1000,7 @@ function! phpcomplete#CompleteUserClass(
 		let required_modifiers += ['static']
 	endif
 	let all_variable = filter(deepcopy(a:sccontent),
-					\ 'v:val =~ "^\\s*\\(var\\s\\+\\|public\\s\\+\\|protected\\s\\+\\|private\\s\\+\\|final\\s\\+\\|abstract\\s\\+\\|static\\s\\+\\)\\+\\$"')
+					\ 'v:val =~ "\\(^\\s*\\(var\\s\\+\\|public\\s\\+\\|protected\\s\\+\\|private\\s\\+\\|final\\s\\+\\|abstract\\s\\+\\|static\\s\\+\\)\\+\\$\\|^\\s*\\(\\/\\|\\*\\)*\\s*@property\\s\\+\\S\\+\\s\\S\\{-}\\s*$\\)"')
 
 	let variables = []
 	for i in all_variable
@@ -1160,6 +1164,14 @@ function! phpcomplete#GetTaglist(pattern
 	endif
 
 	let tags = taglist(a:pattern)
+	for tag in tags
+		for prop in keys(tag)
+			if prop == 'cmd' || prop == 'static' || prop == 'kind' || prop == 'builtin'
+				continue
+			endif
+			let tag[prop] = substitute(tag[prop], '\\\\', '\\', 'g')
+		endfor
+	endfor
 	let s:cache_tags[a:pattern] = tags
 	let has_key = has_key(s:cache_tags, a:pattern)
 	let s:cache_tags_checksum = cache_checksum
@@ -1379,7 +1391,7 @@ function! phpcomplete#GetCallChainReturn
 			" Get Structured information of all classes and subclasses including namespace and includes
 			" try to find the method's return type in docblock comment
 			for classstructure in classcontents
-				let docblock_target_pattern = 'function\s\+&\?'.method.'\|\(public\|private\|protected\|var\).\+\$'.method
+				let docblock_target_pattern = 'function\s\+&\?'.method.'\>\|\(public\|private\|protected\|var\).\+\$'.method.'\>\|@property.\+\$'.method.'\>'
 				let doc_str = phpcomplete#GetDocBlock(split(classstructure.content, '\n'), docblock_target_pattern)
 				if doc_str != ''
 					break
@@ -1387,8 +1399,17 @@ function! phpcomplete#GetCallChainReturn
 			endfor
 			if doc_str != ''
 				let docblock = phpcomplete#ParseDocBlock(doc_str)
-				if has_key(docblock.return, 'type') || has_key(docblock.var, 'type')
-					let type = has_key(docblock.return, 'type') ? docblock.return.type : docblock.var.type
+				if has_key(docblock.return, 'type') || has_key(docblock.var, 'type') || len(docblock.properties) > 0
+					let type = has_key(docblock.return, 'type') ? docblock.return.type : has_key(docblock.var, 'type') ? docblock.var.type : ''
+
+					if type == ''
+						for property in docblock.properties
+							if property.description =~? method
+								let type = property.type
+								break
+							endif
+						endfor
+					endif
 
 					" there's a namespace in the type, threat the type as FQCN
 					if type =~ '\\'
@@ -1554,6 +1575,9 @@ function! phpcomplete#GetClassName(start
 	elseif get(methodstack, 0) =~# function_invocation_pattern
 		let function_name = matchstr(methodstack[0], '^\s*\zs'.function_name_pattern)
 		let function_file = phpcomplete#GetFunctionLocation(function_name, a:current_namespace)
+		if function_file == ''
+			let function_file = phpcomplete#GetFunctionLocation(function_name, '\')
+		endif
 
 		if function_file == 'VIMPHP_BUILTINFUNCTION'
 			" built in function, grab the return type from the info string
@@ -1569,7 +1593,7 @@ function! phpcomplete#GetClassName(start
 				let [class_candidate_namespace, function_imports] = phpcomplete#GetCurrentNameSpace(file_lines)
 				" try to expand the classname of the returned type with the context got from the function's source file
 
-				let [classname_candidate, unused] = phpcomplete#ExpandClassName(classname_candidate, class_candidate_namespace, function_imports)
+				let [classname_candidate, class_candidate_namespace] = phpcomplete#ExpandClassName(classname_candidate, class_candidate_namespace, function_imports)
 			endif
 		endif
 		if classname_candidate != ''
@@ -1650,9 +1674,10 @@ function! phpcomplete#GetClassName(start
 					let sub_methodstack = phpcomplete#GetMethodStack(matchstr(line, '^\s*'.object.'\s*=&\?\s*\s\+\zs.*'))
 					let [classname_candidate, class_candidate_namespace] = phpcomplete#GetCallChainReturnType(
 						\ classname,
-						\ a:current_namespace,
+						\ namespace_for_class,
 						\ a:imports,
 						\ sub_methodstack)
+
 					return (class_candidate_namespace == '\' || class_candidate_namespace == '') ? classname_candidate : class_candidate_namespace.'\'.classname_candidate
 				endif
 			endif
@@ -1783,6 +1808,9 @@ function! phpcomplete#GetClassName(start
 				let [function_name, function_namespace] = phpcomplete#ExpandClassName(function_name, a:current_namespace, a:imports)
 
 				let function_file = phpcomplete#GetFunctionLocation(function_name, function_namespace)
+				if function_file == ''
+					let function_file = phpcomplete#GetFunctionLocation(function_name, '\')
+				endif
 
 				if function_file == 'VIMPHP_BUILTINFUNCTION'
 					" built in function, grab the return type from the info string
@@ -1798,7 +1826,7 @@ function! phpcomplete#GetClassName(start
 						let classname_candidate = docblock.return.type
 						let [class_candidate_namespace, function_imports] = phpcomplete#GetCurrentNameSpace(file_lines)
 						" try to expand the classname of the returned type with the context got from the function's source file
-						let [classname_candidate, unused] = phpcomplete#ExpandClassName(classname_candidate, class_candidate_namespace, function_imports)
+						let [classname_candidate, class_candidate_namespace] = phpcomplete#ExpandClassName(classname_candidate, class_candidate_namespace, function_imports)
 						break
 					endif
 				endif
@@ -1861,6 +1889,8 @@ function! phpcomplete#GetClassName(start
 				for tag in tags
 					if tag.kind ==? 'v' && tag.cmd =~? '=\s*new\s\+\zs'.class_name_pattern.'\ze'
 						let classname = matchstr(tag.cmd, '=\s*new\s\+\zs'.class_name_pattern.'\ze')
+						" unescape the classname, it would have "\" doubled since it is an ex command
+						let classname = substitute(classname, '\\\(\_.\)', '\1', 'g')
 						return classname
 					endif
 				endfor
@@ -2077,6 +2107,19 @@ function! phpcomplete#GetClassContentsSt
 	endif
 	call searchpair('{', '', '}', 'W')
 	let class_closing_bracket_line = line('.')
+
+	" Include class docblock
+	let doc_line = cfline - 1
+	if getline(doc_line) =~? '^\s*\*/'
+		while doc_line != 0
+			if getline(doc_line) =~? '^\s*/\*\*'
+				let cfline = doc_line
+				break
+			endif
+			let doc_line -= 1
+		endwhile
+	endif
+
 	let classcontent = join(getline(cfline, class_closing_bracket_line), "\n")
 
 	let used_traits = []
@@ -2241,8 +2284,19 @@ function! phpcomplete#GetDocBlock(sccont
 		let line = a:sccontent[i]
 		" search for a function declaration
 		if line =~? a:search
-			let l = i - 1
-			" start backward serch for the comment block
+			if line =~? '@property'
+				let doc_line = i
+				while doc_line != sccontent_len - 1
+					if a:sccontent[doc_line] =~? '^\s*\*/'
+						let l = doc_line
+						break
+					endif
+					let doc_line += 1
+				endwhile
+			else
+				let l = i - 1
+			endif
+			" start backward search for the comment block
 			while l != 0
 				let line = a:sccontent[l]
 				" if it's a one line docblock like comment and we can just return it right away
@@ -2263,7 +2317,7 @@ function! phpcomplete#GetDocBlock(sccont
 				return ''
 			end
 
-			while l != 0
+			while l >= 0
 				let line = a:sccontent[l]
 				if line =~? '^\s*/\*\*'
 					let comment_start = l
@@ -2297,9 +2351,10 @@ function! phpcomplete#ParseDocBlock(docb
 		\ 'return': {},
 		\ 'throws': [],
 		\ 'var': {},
+		\ 'properties': [],
 		\ }
 
-	let res.description = substitute(matchstr(a:docblock, '\zs\_.\{-}\ze\(@var\|@param\|@return\|$\)'), '\(^\_s*\|\_s*$\)', '', 'g')
+	let res.description = substitute(matchstr(a:docblock, '\zs\_.\{-}\ze\(@type\|@var\|@param\|@return\|$\)'), '\(^\_s*\|\_s*$\)', '', 'g')
 	let docblock_lines = split(a:docblock, "\n")
 
 	let param_lines = filter(copy(docblock_lines), 'v:val =~? "^@param"')
@@ -2334,15 +2389,26 @@ function! phpcomplete#ParseDocBlock(docb
 		endif
 	endfor
 
-	let var_line = filter(copy(docblock_lines), 'v:val =~? "^@var"')
+	let var_line = filter(copy(docblock_lines), 'v:val =~? "^\\(@var\\|@type\\)"')
 	if len(var_line) > 0
-		let var_parts = matchlist(var_line[0], '@var\s\+\(\S\+\)\s*\(.*\)')
+		let var_parts = matchlist(var_line[0], '\(@var\|@type\)\s\+\(\S\+\)\s*\(.*\)')
 		let res['var'] = {
 					\ 'line': var_parts[0],
-					\ 'type': phpcomplete#GetTypeFromDocBlockParam(get(var_parts, 1, '')),
-					\ 'description': get(var_parts, 2, '')}
+					\ 'type': phpcomplete#GetTypeFromDocBlockParam(get(var_parts, 2, '')),
+					\ 'description': get(var_parts, 3, '')}
 	endif
 
+	let property_lines = filter(copy(docblock_lines), 'v:val =~? "^@property"')
+	for property_line in property_lines
+		let parts = matchlist(property_line, '\(@property\)\s\+\(\S\+\)\s*\(.*\)')
+		if len(parts) > 0
+			call add(res.properties, {
+						\ 'line': parts[0],
+						\ 'type': phpcomplete#GetTypeFromDocBlockParam(get(parts, 2, '')),
+						\ 'description': get(parts, 3, '')})
+		endif
+	endfor
+
 	return res
 endfunction
 " }}}
@@ -2498,6 +2564,7 @@ function! phpcomplete#GetCurrentNameSpac
 						let	name = matchstr(name, '\\\zs[^\\]\+\ze$')
 					endif
 				endif
+
 				" leading slash is not required use imports are always absolute
 				let imports[name] = {'name': object, 'kind': ''}
 			endfor
@@ -2533,6 +2600,7 @@ function! phpcomplete#GetCurrentNameSpac
 								elseif !exists('no_namespace_candidate')
 									" save the first namespacless match to be used if no better
 									" candidate found later on
+									let tag.namespace = namespace_for_classes
 									let no_namespace_candidate = tag
 								endif
 							endif
--- a/runtime/colors/evening.vim
+++ b/runtime/colors/evening.vim
@@ -1,6 +1,6 @@
 " Vim color file
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last Change:	2006 Apr 14
+" Last Change:	2016 Oct 10
 
 " This color scheme uses a dark grey background.
 
@@ -46,8 +46,8 @@ hi CursorColumn term=reverse ctermbg=Bla
 hi CursorLine term=underline cterm=underline guibg=grey40
 
 " Groups for syntax highlighting
-hi Constant term=underline ctermfg=Magenta guifg=#ffa0a0 guibg=grey5
-hi Special term=bold ctermfg=LightRed guifg=Orange guibg=grey5
+hi Constant term=underline ctermfg=Magenta guifg=#ffa0a0
+hi Special term=bold ctermfg=LightRed guifg=Orange
 if &t_Co > 8
   hi Statement term=bold cterm=bold ctermfg=Yellow guifg=#ffff60 gui=bold
 endif
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -4327,8 +4327,8 @@ A jump table for the options with a shor
 	original position when no match is found and when pressing <Esc>.  You
 	still need to finish the search command with <Enter> to move the
 	cursor to the match.
-	You can use the CTRL-N and CTRL-P keys to move to the next and
-	previous match. |c_CTRL-N| |c_CTRL-P|
+	You can use the CTRL-G and CTRL-T keys to move to the next and
+	previous match. |c_CTRL-G| |c_CTRL-T|
 	When compiled with the |+reltime| feature Vim only searches for about
 	half a second.  With a complicated pattern and/or a lot of text the
 	match may not be found.  This is to avoid that Vim hangs while you
--- a/runtime/doc/syntax.txt
+++ b/runtime/doc/syntax.txt
@@ -2863,9 +2863,11 @@ vimrc file: >
 (Adapted from the html.vim help text by Claudio Fleiner <claudio@fleiner.com>)
 
 
-SH		*sh.vim* *ft-sh-syntax* *ft-bash-syntax* *ft-ksh-syntax*
-
-This covers the "normal" Unix (Bourne) sh, bash and the Korn shell.
+		*ft-posix-synax* *ft-dash-syntax*
+SH		*sh.vim*  *ft-sh-syntax*  *ft-bash-syntax*  *ft-ksh-syntax*
+
+This covers syntax highlighting for the older Unix (Bourne) sh, and newer
+shells such as bash, dash, posix, and the Korn shells.
 
 Vim attempts to determine which shell type is in use by specifying that
 various filenames are of specific types: >
@@ -2874,28 +2876,31 @@ various filenames are of specific types:
     bash: .bashrc* bashrc bash.bashrc .bash_profile* *.bash
 <
 If none of these cases pertain, then the first line of the file is examined
-(ex. /bin/sh  /bin/ksh	/bin/bash).  If the first line specifies a shelltype,
-then that shelltype is used.  However some files (ex. .profile) are known to
-be shell files but the type is not apparent.  Furthermore, on many systems
-sh is symbolically linked to "bash" (Linux, Windows+cygwin) or "ksh" (Posix).
-
-One may specify a global default by instantiating one of the following three
+(ex. looking for /bin/sh  /bin/ksh  /bin/bash).  If the first line specifies a
+shelltype, then that shelltype is used.  However some files (ex. .profile) are
+known to be shell files but the type is not apparent.  Furthermore, on many
+systems sh is symbolically linked to "bash" (Linux, Windows+cygwin) or "ksh"
+(Posix).
+
+One may specify a global default by instantiating one of the following
 variables in your <.vimrc>:
 
-    ksh: >
+   ksh: >
 	let g:is_kornshell = 1
-<   posix: (using this is the same as setting is_kornshell to 1) >
+<   posix:  (using this is the nearly the same as setting g:is_kornshell to 1) >
 	let g:is_posix     = 1
 <   bash: >
 	let g:is_bash	   = 1
 <   sh: (default) Bourne shell >
 	let g:is_sh	   = 1
 
+<   (dash users should use posix)
+
 If there's no "#! ..." line, and the user hasn't availed himself/herself of a
 default sh.vim syntax setting as just shown, then syntax/sh.vim will assume
 the Bourne shell syntax.  No need to quote RFCs or market penetration
 statistics in error reports, please -- just select the default version of the
-sh your system uses in your <.vimrc>.
+sh your system uses and install the associated "let..." in your <.vimrc>.
 
 The syntax/sh.vim file provides several levels of syntax-based folding: >
 
@@ -2904,7 +2909,7 @@ The syntax/sh.vim file provides several 
 	let g:sh_fold_enabled= 2     (enable heredoc folding)
 	let g:sh_fold_enabled= 4     (enable if/do/for folding)
 >
-then various syntax items (HereDocuments and function bodies) become
+then various syntax items (ie. HereDocuments and function bodies) become
 syntax-foldable (see |:syn-fold|).  You also may add these together
 to get multiple types of folding: >
 
@@ -2928,14 +2933,7 @@ reduce this, the "sh_maxlines" internal 
 The default is to use the twice sh_minlines.  Set it to a smaller number to
 speed up displaying.  The disadvantage is that highlight errors may appear.
 
-						*g:sh_isk* *g:sh_noisk*
-The shell languages appear to let "." be part of words, commands, etc;
-consequently it should be in the isk for sh.vim.  As of v116 of syntax/sh.vim,
-syntax/sh.vim will append the "." to |'iskeyword'| by default; you may control
-this behavior with: >
-	let g:sh_isk  = '..whatever characters you want as part of iskeyword'
-	let g:sh_noisk= 1  " otherwise, if this exists, the isk will NOT chg
-<
+
 						*sh-embed*  *sh-awk*
  Sh: EMBEDDING LANGUAGES~
 
--- a/runtime/doc/tags
+++ b/runtime/doc/tags
@@ -6027,6 +6027,7 @@ ft-csh-syntax	syntax.txt	/*ft-csh-syntax
 ft-css-omni	insert.txt	/*ft-css-omni*
 ft-cweb-syntax	syntax.txt	/*ft-cweb-syntax*
 ft-cynlib-syntax	syntax.txt	/*ft-cynlib-syntax*
+ft-dash-syntax	syntax.txt	/*ft-dash-syntax*
 ft-desktop-syntax	syntax.txt	/*ft-desktop-syntax*
 ft-dircolors-syntax	syntax.txt	/*ft-dircolors-syntax*
 ft-docbk-syntax	syntax.txt	/*ft-docbk-syntax*
@@ -6087,6 +6088,7 @@ ft-php-syntax	syntax.txt	/*ft-php-syntax
 ft-php3-syntax	syntax.txt	/*ft-php3-syntax*
 ft-phtml-syntax	syntax.txt	/*ft-phtml-syntax*
 ft-plaintex-syntax	syntax.txt	/*ft-plaintex-syntax*
+ft-posix-synax	syntax.txt	/*ft-posix-synax*
 ft-postscr-syntax	syntax.txt	/*ft-postscr-syntax*
 ft-ppwiz-syntax	syntax.txt	/*ft-ppwiz-syntax*
 ft-printcap-syntax	syntax.txt	/*ft-printcap-syntax*
@@ -6340,8 +6342,6 @@ g:netrw_win95ftp	pi_netrw.txt	/*g:netrw_
 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:sh_isk	syntax.txt	/*g:sh_isk*
-g:sh_noisk	syntax.txt	/*g:sh_noisk*
 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*
--- a/runtime/doc/todo.txt
+++ b/runtime/doc/todo.txt
@@ -1,4 +1,4 @@
-*todo.txt*      For Vim version 8.0.  Last change: 2016 Oct 01
+*todo.txt*      For Vim version 8.0.  Last change: 2016 Oct 09
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -62,9 +62,6 @@ Regexp problems:
   (Manuel Ortega, 2016 Apr 24)
   Test fails on Mac.  Avoid using isalpha(), isalnum(), etc?  Depends on
   LC_CTYPE
-- The regexp engines are not reentrant, causing havoc when interrupted by a
-  remote expression or something else.  Move global variables onto the stack
-  or into an allocated struct.
 - The old engine does not find a match for "/\%#=1\(\)\{80}", the new engine
   matches everywhere.
 - Using win_linetabsize() can still be slow. Cache the result, store col and
@@ -80,6 +77,7 @@ Regexp problems:
 - NFA regexp doesn't handle \%<v correctly. (Ingo Karkat, 2014 May 12)
 - Does not work with NFA regexp engine:
   \%u, \%x, \%o, \%d followed by a composing character
+- Search for \%d0\+ may fail with E363. (Christian Brabandt, 2016 Oct 4)
 - \%'[ does not work.  '%'] does work.  (Masaaki Nakamura, 2016 Apr 4)
 - Bug relating to back references. (Ingo Karkat, 2014 Jul 24)
 - New RE does not give an error for empty group: "\(\)\{2}" (Dominique Pelle,
@@ -112,6 +110,8 @@ Error in test_startup_utf8 on Solaris. (
 
 Patch to recognize tmux. (Michael Henry, 2016 Sep 29)
 
+Patch to fix escaping of job arguments. (Yasuhiro Matsumoto, 2016 Oct 5)
+
 Once .exe with updated installer is available: Add remark to download page
 about /S and /D options (Ken Takata, 2016 Apr 13)
 Or point to nightly builds: https://github.com/vim/vim-win32-installer/releases
@@ -140,17 +140,24 @@ Patch to make it possible to extend a li
 min() and max() spawn lots of error messages if sorted list/dictionary
 contains invalid data (Nikolay Pavlov, 2016 Sep 4, #1039)
 
+Should :vmap in matchit.vim be :xmap?  (Tony Mechelynck)
+
 Problem with whitespace in errorformat. (Gerd Wachsmuth, 2016 May 15, #807)
 
 Undo problem: "g-" doesn't go back, gets stuck. (Björn Linse, 2016 Jul 18)
 
+Add "unicode true" to NSIS installer.  Doesn't work with Windows 95, which we
+no longer support.
+
 sort() is not stable when using numeric/float sort (Nikolay Pavlov, 2016 Sep
 4#1038)
 
 Patch to add "cmdline" completion to getcompletion(). (Shougo, Oct 1, #1140)
 
 Patch for systemlist(), add empty item. (thinca, Sep 30, #1135)
-Adjust the documentation instead?  Do include the test.
+Add an argument to choose binary or non-binary (like readfile()), when omitted
+use the current behavior.
+Include the test.
 
 Idea from Sven: record sequence of keys.  Useful to show others what they are
 doing (look over the shoulder), and also to see what happened.
@@ -158,6 +165,9 @@ Probably list of keystrokes, with some a
 Could store in logfile to be able to analyise it with an external command.
 E.g. to see when's the last time a plugin command was used.
 
+execute() cannot be used with command completeion. (Daniel Hahler, 2016 Oct 1,
+#1141)
+
 cmap using execute() has side effects. (Killthemule, 2016 Aug 17, #983)
 
 Patch to change order of compiler flags. (Yousong Zhou, 2016 Sep 19, #1100)
@@ -182,6 +192,9 @@ Cannot delete a file with square bracket
 Completion for input() does not expand environment variables. (chdiza, 2016
 Jul 25, #948)
 
+Patch to fix wrong encoding of error message on Cygwin/MSYS terminal.
+(Ken Takata, 2016 Oct 4)
+
 'hlsearch' interferes with a Conceal match. (Rom Grk, 2016 Aug 9)
 
 Patch to add context information to quickfix/location list. (Yegappan
@@ -228,9 +241,6 @@ the last change in any buffer?  Can we u
 
 Ramel Eshed: system() is much slower than job_start(), why? (Aug 26)
 
-Patch to make gd and gD work better for non-K&R code and with comments.
-(Anton Lindqvist, 2016 Aug 29)
-
 When generating the Unicode tables with runtime/tools/unicode.vim the
 emoji_width table has only one entry.
 
--- a/runtime/ftplugin/mf.vim
+++ b/runtime/ftplugin/mf.vim
@@ -2,7 +2,7 @@
 " Language:           METAFONT
 " Maintainer:         Nicola Vitacolonna <nvitacolonna@gmail.com>
 " Former Maintainers: Nikolai Weibull <now@bitwi.se>
-" Latest Revision:    2016 Oct 1
+" Latest Revision:    2016 Oct 2
 
 if exists("b:did_ftplugin")
   finish
@@ -25,7 +25,7 @@ let g:omni_syntax_group_exclude_mf = 'mf
 
 let s:mp_regex = {
       \ 'beginsection' : '^\s*\%(\%(\|var\|primary\|secondary\|tertiary\)def\|beginchar\|beginlogochar\)\>',
-      \ 'endsection'   : '^\s*\%(enddef\|endchar\|endlogochar\)\>',
+      \ 'endsection'   : '^\s*\%(enddef\|endchar\)\>',
       \ 'beginblock'   : '^\s*\%(begingroup\|if\|for\%(\|suffixes\|ever\)\)\>',
       \ 'endblock'     : '^\s*\%(endgroup\|fi\|endfor\)\>'
       \ }
@@ -35,9 +35,7 @@ function! s:move_around(count, what, fla
     exe "normal! gv"
   endif
   call search(s:mp_regex[a:what], a:flags.'s') " 's' sets previous context mark
-  for i in range(2, a:count)
-    call search(s:mp_regex[a:what], a:flags)
-  endfor
+  call map(range(2, a:count), 'search(s:mp_regex[a:what], a:flags)')
 endfunction
 
 
@@ -62,8 +60,7 @@ if exists("loaded_matchit")
         \ '\<for\%(\|suffixes\|ever\)\>:\<exit\%(if\|unless\)\>:\<endfor\>,' .
         \ '\<\%(\|var\|primary\|secondary\|tertiary\)def\>:\<enddef\>,' .
         \ '\<begingroup\>:\<endgroup\>,' .
-        \ '\<beginchar\>:\<endchar\>' .
-        \ '\<beginlogochar\>:\<endlogochar\>'
+        \ '\<begin\%(logo\)\?char\>:\<endchar\>'
   " Ignore comments and strings
   let b:match_skip = 'synIDattr(synID(line("."), col("."), 1), "name")
         \ =~# "mf\\(Comment\\|String\\)$"'
--- a/runtime/ftplugin/mp.vim
+++ b/runtime/ftplugin/mp.vim
@@ -2,7 +2,7 @@
 " Language:           MetaPost
 " Maintainer:         Nicola Vitacolonna <nvitacolonna@gmail.com>
 " Former Maintainers: Nikolai Weibull <now@bitwi.se>
-" Latest Revision:    2016 Oct 1
+" Latest Revision:    2016 Oct 2
 
 if exists("b:did_ftplugin")
   finish
@@ -34,7 +34,7 @@ endif
 
 let s:mp_regex = {
       \ 'beginsection' : '^\s*\%(\%(\|var\|primary\|secondary\|tertiary\)def\|begin\%(fig\|char\|logochar\|glyph\|graph\)\)\>',
-      \ 'endsection'   : '^\s*\%(enddef\|end\%(fig\|char\|logochar\|glyph\|graph\)\)\>',
+      \ 'endsection'   : '^\s*\%(enddef\|end\%(fig\|char\|glyph\|graph\)\)\>',
       \ 'beginblock'   : '^\s*\%(begingroup\|if\|for\%(\|suffixes\|ever\)\)\>',
       \ 'endblock'     : '^\s*\%(endgroup\|fi\|endfor\)\>'
       \ }
@@ -44,9 +44,7 @@ function! s:move_around(count, what, fla
     exe "normal! gv"
   endif
   call search(s:mp_regex[a:what], a:flags.'s') " 's' sets previous context mark
-  for i in range(2, a:count)
-    call search(s:mp_regex[a:what], a:flags)
-  endfor
+  call map(range(2, a:count), 'search(s:mp_regex[a:what], a:flags)')
 endfunction
 
 
@@ -72,9 +70,8 @@ if exists("loaded_matchit")
         \ '\<\%(\|var\|primary\|secondary\|tertiary\)def\>:\<enddef\>,' .
         \ '\<beginfig\>:\<endfig\>,' .
         \ '\<begingroup\>:\<endgroup\>,' .
-        \ '\<beginchar\>:\<endchar\>' .
-        \ '\<beginlogochar\>:\<endlogochar\>' .
-        \ '\<beginglyph\>:\<endglyph\>' .
+        \ '\<begin\%(logo\)\?char\>:\<endchar\>,' .
+        \ '\<beginglyph\>:\<endglyph\>,' .
         \ '\<begingraph\>:\<endgraph\>'
   " Ignore comments and strings
   let b:match_skip = 'synIDattr(synID(line("."), col("."), 1), "name")
--- a/runtime/ftplugin/python.vim
+++ b/runtime/ftplugin/python.vim
@@ -2,7 +2,7 @@
 " Language:	python
 " Maintainer:	James Sully <sullyj3@gmail.com>
 " Previous Maintainer: Johannes Zellner <johannes@zellner.org>
-" Last Change:	Tue, 06 September 2016
+" Last Change:	Tue, 09 October 2016
 " https://github.com/sullyj3/vim-ftplugin-python
 
 if exists("b:did_ftplugin") | finish | endif
@@ -22,10 +22,10 @@ setlocal omnifunc=pythoncomplete#Complet
 
 set wildignore+=*.pyc
 
-let b:next_toplevel='\v%$\|^(class\|def)>'
-let b:prev_toplevel='\v^(class\|def)>'
-let b:next='\v%$\|^\s*(class\|def)>'
-let b:prev='\v^\s*(class\|def)>'
+let b:next_toplevel='\v%$\|^(class\|def\|async def)>'
+let b:prev_toplevel='\v^(class\|def\|async def)>'
+let b:next='\v%$\|^\s*(class\|def\|async def)>'
+let b:prev='\v^\s*(class\|def\|async def)>'
 
 execute "nnoremap <silent> <buffer> ]] :call <SID>Python_jump('n', '". b:next_toplevel."', 'W')<cr>"
 execute "nnoremap <silent> <buffer> [[ :call <SID>Python_jump('n', '". b:prev_toplevel."', 'Wb')<cr>"
--- a/runtime/indent/mp.vim
+++ b/runtime/indent/mp.vim
@@ -2,7 +2,7 @@
 " Language:           MetaPost
 " Maintainer:         Nicola Vitacolonna <nvitacolonna@gmail.com>
 " Former Maintainers: Eugene Minkovskii <emin@mccme.ru>
-" Last Change:        2016 Oct 01
+" Last Change:        2016 Oct 2, 4:13pm
 " Version: 0.2
 
 if exists("b:did_indent")
@@ -57,7 +57,7 @@ let g:mp_open_tag = ''
 let g:mp_close_tag = ''
       \ . '\<fi\>'
       \ . '\|\<else\%[if]\>'
-      \ . '\|\<end\%(\|for\|group\|def\|fig\|char\|logochar\|glyph\|graph\)\>'
+      \ . '\|\<end\%(\|for\|group\|def\|fig\|char\|glyph\|graph\)\>'
       \ . '\|[)\]}]'
 
 " Statements that may span multiple lines and are ended by a semicolon. To
@@ -118,12 +118,10 @@ function! s:CommentOrString(line, pos)
   return in_string || (c >= 0 && c <= a:pos)
 endfunction
 
-" Find the first non-comment non-blank line before the current line. Skip also
-" verbatimtex/btex... etex blocks.
+" Find the first non-comment non-blank line before the current line.
 function! s:PrevNonBlankNonComment(lnum)
   let l:lnum = prevnonblank(a:lnum - 1)
-  while getline(l:lnum) =~# '^\s*%' ||
-        \ synIDattr(synID(a:lnum, 1, 1), "name") =~# '^mpTeXinsert$\|^tex\|^Delimiter'
+  while getline(l:lnum) =~# '^\s*%'
     let l:lnum = prevnonblank(l:lnum - 1)
   endwhile
   return l:lnum
@@ -220,25 +218,32 @@ endfunction
 "
 " Example:
 "
-"    shiftwidth=4
 "    def foo =
-"        makepen(subpath(T-n,t) of r %>
-"            shifted .5down %>
-"                --subpath(t,T) of r shifted .5up -- cycle) %<<
+"        makepen(
+"            subpath(T-n,t) of r  %>
+"                shifted .5down   %>
+"                    --subpath(t,T) of r shifted .5up -- cycle   %<<<
+"        )
 "        withcolor black
 "    enddef
 "
 " The default indentation of the previous example would be:
 "
 "    def foo =
-"        makepen(subpath(T-n,t) of r
-"        shifted .5down
-"        --subpath(t,T) of r shifted .5up -- cycle)
+"        makepen(
+"            subpath(T-n,t) of r
+"            shifted .5down
+"            --subpath(t,T) of r shifted .5up -- cycle
+"        )
 "        withcolor black
 "    enddef
 "
 " Personally, I prefer the latter, but anyway...
 function! GetMetaPostIndentIntern()
+  " Do not touch indentation inside verbatimtex/btex.. etex blocks.
+  if synIDattr(synID(v:lnum, 1, 1), "name") =~# '^mpTeXinsert$\|^tex\|^Delimiter'
+    return -1
+  endif
 
   " This is the reference line relative to which the current line is indented
   " (but see below).
@@ -327,8 +332,8 @@ function! GetMetaPostIndentIntern()
   "
   "    for i = 1 upto 3:  % <-- Current line: this gets the same indent as `draw ...`
   "
-  " NOTE: we get here if and only if L does not contain a statement (among
-  " those listed in g:mp_statement).
+  " NOTE: we get here only if L does not contain a statement (among those
+  " listed in g:mp_statement).
   if s:ValidMatchEnd(prev_text, ';'.s:eol, 0) >= 0 " L ends with a semicolon
     let stm_lnum = s:PrevNonBlankNonComment(lnum)
     while stm_lnum > 0
--- a/runtime/syntax/avra.vim
+++ b/runtime/syntax/avra.vim
@@ -2,14 +2,12 @@
 " Language:     AVR Assembler (AVRA)
 " AVRA Home:    http://avra.sourceforge.net/index.html
 " AVRA Version: 1.3.0
+" Last Update:	2016 Oct 7
 " Maintainer:	  Marius Ghita <mhitza@gmail.com>
 
 let s:cpo_save = &cpo
 set cpo&vim
 
-setlocal iskeyword=a-z,A-Z,48-57,.,_
-" 'isident' is a global option, better not set it
-" setlocal isident=a-z,A-Z,48-57,.,_
 syn case ignore
 
 syn keyword avraRegister r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14