changeset 7707:41768bcebc9b

commit https://github.com/vim/vim/commit/13d5aeef56e3140a8eb8f40c7062aa1c5700f76e Author: Bram Moolenaar <Bram@vim.org> Date: Thu Jan 21 23:36:05 2016 +0100 Update runtime files
author Christian Brabandt <cb@256bit.org>
date Thu, 21 Jan 2016 23:45:07 +0100
parents dd457970efc8
children 1a595b2a4d5e
files runtime/autoload/csscomplete.vim runtime/doc/develop.txt runtime/doc/eval.txt runtime/doc/index.txt runtime/doc/quickfix.txt runtime/doc/tags runtime/doc/todo.txt runtime/syntax/dcl.vim runtime/syntax/lisp.vim runtime/syntax/maple.vim runtime/syntax/messages.vim runtime/syntax/tex.vim runtime/syntax/vim.vim
diffstat 13 files changed, 876 insertions(+), 478 deletions(-) [+]
line wrap: on
line diff
--- a/runtime/autoload/csscomplete.vim
+++ b/runtime/autoload/csscomplete.vim
@@ -1,429 +1,740 @@
 " Vim completion script
-" Language:	CSS 2.1
-" Maintainer:	Mikolaj Machowski ( mikmach AT wp DOT pl )
-" Last Change:	2007 May 5
+" Language: CSS
+"           Based on MDN CSS Reference at 2016 Jan <https://developer.mozilla.org/en-US/docs/Web/CSS/Reference>
+"           plus CSS Speech Module <http://www.w3.org/TR/css3-speech/>
+" Maintainer: Kao, Wei-Ko(othree) ( othree AT gmail DOT com )
+" Original Author: Mikolaj Machowski ( mikmach AT wp DOT pl )
+" Last Change: 2016 Jan 11
 
-	let s:values = split("azimuth background background-attachment background-color background-image background-position background-repeat border bottom border-collapse border-color border-spacing border-style border-top border-right border-bottom border-left border-top-color border-right-color border-bottom-color border-left-color  border-top-style border-right-style border-bottom-style border-left-style border-top-width border-right-width border-bottom-width border-left-width border-width caption-side clear clip color content counter-increment counter-reset cue cue-after cue-before cursor display direction elevation empty-cells float font font-family font-size font-style font-variant font-weight height left letter-spacing line-height list-style list-style-image list-style-position list-style-type margin margin-right margin-left margin-top margin-bottom max-height max-width min-height min-width orphans outline outline-color outline-style outline-width overflow padding padding-top padding-right padding-bottom padding-left page-break-after page-break-before page-break-inside pause pause-after pause-before pitch pitch-range play-during position quotes right richness speak speak-header speak-numeral speak-punctuation speech-rate stress table-layout text-align text-decoration text-indent text-transform top unicode-bidi vertical-align visibility voice-family volume white-space width widows word-spacing z-index")
+let s:values = split("all additive-symbols align-content align-items align-self animation animation-delay animation-direction animation-duration animation-fill-mode animation-iteration-count animation-name animation-play-state animation-timing-function backface-visibility background background-attachment background-blend-mode background-clip background-color background-image background-origin background-position background-repeat background-size block-size border border-block-end border-block-end-color border-block-end-style border-block-end-width border-block-start border-block-start-color border-block-start-style border-block-start-width border-bottom border-bottom-color border-bottom-left-radius border-bottom-right-radius border-bottom-style border-bottom-width border-collapse border-color border-image border-image-outset border-image-repeat border-image-slice border-image-source border-image-width border-inline-end border-inline-end-color border-inline-end-style border-inline-end-width border-inline-start border-inline-start-color border-inline-start-style border-inline-start-width border-left border-left-color border-left-style border-left-width border-radius border-right border-right-color border-right-style border-right-width border-spacing border-style border-top border-top-color border-top-left-radius border-top-right-radius border-top-style border-top-width border-width bottom box-decoration-break box-shadow box-sizing break-after break-before break-inside caption-side clear clip clip-path color columns column-count column-fill column-gap column-rule column-rule-color column-rule-style column-rule-width column-span column-width content counter-increment counter-reset cue cue-before cue-after cursor direction display empty-cells fallback filter flex flex-basis flex-direction flex-flow flex-grow flex-shrink flex-wrap float font font-family font-feature-settings font-kerning font-language-override font-size font-size-adjust font-stretch font-style font-synthesis font-variant font-variant-alternates font-variant-caps font-variant-east-asian font-variant-ligatures font-variant-numeric font-variant-position font-weight grid grid-area grid-auto-columns grid-auto-flow grid-auto-position grid-auto-rows grid-column grid-column-start grid-column-end grid-row grid-row-start grid-row-end grid-template grid-template-areas grid-template-rows grid-template-columns height hyphens image-rendering image-resolution image-orientation ime-mode inline-size isolation justify-content left letter-spacing line-break line-height list-style list-style-image list-style-position list-style-type margin margin-block-end margin-block-start margin-bottom margin-inline-end margin-inline-start margin-left margin-right margin-top marks mask mask-type max-block-size max-height max-inline-size max-width max-zoom min-block-size min-height min-inline-size min-width min-zoom mix-blend-mode negative object-fit object-position offset-block-end offset-block-start offset-inline-end offset-inline-start opacity order orientation orphans outline outline-color outline-offset outline-style outline-width overflow overflow-wrap overflow-x overflow-y pad padding padding-block-end padding-block-start padding-bottom padding-inline-end padding-inline-start padding-left padding-right padding-top page-break-after page-break-before page-break-inside pause-before pause-after pause perspective perspective-origin pointer-events position prefix quotes range resize rest rest-before rest-after right ruby-align ruby-merge ruby-position scroll-behavior scroll-snap-coordinate scroll-snap-destination scroll-snap-points-x scroll-snap-points-y scroll-snap-type scroll-snap-type-x scroll-snap-type-y shape-image-threshold shape-margin shape-outside speak speak-as suffix symbols system table-layout tab-size text-align text-align-last text-combine-upright text-decoration text-decoration-color text-decoration-line text-emphasis text-emphasis-color text-emphasis-position text-emphasis-style text-indent text-orientation text-overflow text-rendering text-shadow text-transform text-underline-position top touch-action transform transform-box transform-origin transform-style transition transition-delay transition-duration transition-property transition-timing-function unicode-bidi unicode-range user-zoom vertical-align visibility voice-balance voice-duration voice-family voice-pitch voice-rate voice-range voice-stress voice-volume white-space widows width will-change word-break word-spacing word-wrap writing-mode z-index zoom")
+
 
 function! csscomplete#CompleteCSS(findstart, base)
 
-if a:findstart
-	" We need whole line to proper checking
-	let line = getline('.')
-	let start = col('.') - 1
-	let compl_begin = col('.') - 2
-	while start >= 0 && line[start - 1] =~ '\%(\k\|-\)'
-		let start -= 1
-	endwhile
-	let b:compl_context = line[0:compl_begin]
-	return start
-endif
+  if a:findstart
+    " We need whole line to proper checking
+    let line = getline('.')
+    let start = col('.') - 1
+    let compl_begin = col('.') - 2
+    while start >= 0 && line[start - 1] =~ '\%(\k\|-\)'
+      let start -= 1
+    endwhile
+    let b:after = line[compl_begin :]
+    let b:compl_context = line[0:compl_begin]
+    return start
+  endif
 
-" There are few chars important for context:
-" ^ ; : { } /* */
-" Where ^ is start of line and /* */ are comment borders
-" Depending on their relative position to cursor we will know what should
-" be completed. 
-" 1. if nearest are ^ or { or ; current word is property
-" 2. if : it is value (with exception of pseudo things)
-" 3. if } we are outside of css definitions
-" 4. for comments ignoring is be the easiest but assume they are the same
-"    as 1. 
-" 5. if @ complete at-rule
-" 6. if ! complete important
-if exists("b:compl_context")
-	let line = b:compl_context
-	unlet! b:compl_context
-else
-	let line = a:base
-endif
+  " There are few chars important for context:
+  " ^ ; : { } /* */
+  " Where ^ is start of line and /* */ are comment borders
+  " Depending on their relative position to cursor we will know what should
+  " be completed. 
+  " 1. if nearest are ^ or { or ; current word is property
+  " 2. if : it is value (with exception of pseudo things)
+  " 3. if } we are outside of css definitions
+  " 4. for comments ignoring is be the easiest but assume they are the same
+  "    as 1. 
+  " 5. if @ complete at-rule
+  " 6. if ! complete important
+  if exists("b:compl_context")
+    let line = b:compl_context
+    let after = b:after
+    unlet! b:compl_context
+  else
+    let line = a:base
+  endif
 
-let res = []
-let res2 = []
-let borders = {}
-
-" Check last occurrence of sequence
+  let res = []
+  let res2 = []
+  let borders = {}
 
-let openbrace  = strridx(line, '{')
-let closebrace = strridx(line, '}')
-let colon      = strridx(line, ':')
-let semicolon  = strridx(line, ';')
-let opencomm   = strridx(line, '/*')
-let closecomm  = strridx(line, '*/')
-let style      = strridx(line, 'style\s*=')
-let atrule     = strridx(line, '@')
-let exclam     = strridx(line, '!')
+  " Check last occurrence of sequence
+
+  let openbrace  = strridx(line, '{')
+  let closebrace = strridx(line, '}')
+  let colon      = strridx(line, ':')
+  let semicolon  = strridx(line, ';')
+  let opencomm   = strridx(line, '/*')
+  let closecomm  = strridx(line, '*/')
+  let style      = strridx(line, 'style\s*=')
+  let atrule     = strridx(line, '@')
+  let exclam     = strridx(line, '!')
 
-if openbrace > -1
-	let borders[openbrace] = "openbrace"
-endif
-if closebrace > -1
-	let borders[closebrace] = "closebrace"
-endif
-if colon > -1
-	let borders[colon] = "colon"
-endif
-if semicolon > -1
-	let borders[semicolon] = "semicolon"
-endif
-if opencomm > -1
-	let borders[opencomm] = "opencomm"
-endif
-if closecomm > -1
-	let borders[closecomm] = "closecomm"
-endif
-if style > -1
-	let borders[style] = "style"
-endif
-if atrule > -1
-	let borders[atrule] = "atrule"
-endif
-if exclam > -1
-	let borders[exclam] = "exclam"
-endif
+  if openbrace > -1
+    let borders[openbrace] = "openbrace"
+  endif
+  if closebrace > -1
+    let borders[closebrace] = "closebrace"
+  endif
+  if colon > -1
+    let borders[colon] = "colon"
+  endif
+  if semicolon > -1
+    let borders[semicolon] = "semicolon"
+  endif
+  if opencomm > -1
+    let borders[opencomm] = "opencomm"
+  endif
+  if closecomm > -1
+    let borders[closecomm] = "closecomm"
+  endif
+  if style > -1
+    let borders[style] = "style"
+  endif
+  if atrule > -1
+    let borders[atrule] = "atrule"
+  endif
+  if exclam > -1
+    let borders[exclam] = "exclam"
+  endif
 
 
-if len(borders) == 0 || borders[max(keys(borders))] =~ '^\%(openbrace\|semicolon\|opencomm\|closecomm\|style\)$'
-	" Complete properties
+  if len(borders) == 0 || borders[max(keys(borders))] =~ '^\%(openbrace\|semicolon\|opencomm\|closecomm\|style\)$'
+    " Complete properties
 
 
-	let entered_property = matchstr(line, '.\{-}\zs[a-zA-Z-]*$')
+    let entered_property = matchstr(line, '.\{-}\zs[a-zA-Z-]*$')
+
+    for m in s:values
+      if m =~? '^'.entered_property
+        call add(res, m . ':')
+      elseif m =~? entered_property
+        call add(res2, m . ':')
+      endif
+    endfor
 
-	for m in s:values
-		if m =~? '^'.entered_property
-			call add(res, m . ':')
-		elseif m =~? entered_property
-			call add(res2, m . ':')
-		endif
-	endfor
+    return res + res2
+
+  elseif borders[max(keys(borders))] == 'colon'
+    " Get name of property
+    let prop = tolower(matchstr(line, '\zs[a-zA-Z-]*\ze\s*:[^:]\{-}$'))
 
-	return res + res2
-
-elseif borders[max(keys(borders))] == 'colon'
-	" Get name of property
-	let prop = tolower(matchstr(line, '\zs[a-zA-Z-]*\ze\s*:[^:]\{-}$'))
+    let wide_keywords = ["initial", "inherit", "unset"]
+    let color_values = ["transparent", "rgb(", "rgba(", "hsl(", "hsla(", "#"]
+    let border_style_values = ["none", "hidden", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset"]
+    let border_width_values = ["thin", "thick", "medium"]
+    let list_style_type_values = ["decimal", "decimal-leading-zero", "arabic-indic", "armenian", "upper-armenian", "lower-armenian", "bengali", "cambodian", "khmer", "cjk-decimal", "devanagari", "georgian", "gujarati", "gurmukhi", "hebrew", "kannada", "lao", "malayalam", "mongolian", "myanmar", "oriya", "persian", "lower-roman", "upper-roman", "tamil", "telugu", "thai", "tibetan", "lower-alpha", "lower-latin", "upper-alpha", "upper-latin", "cjk-earthly-branch", "cjk-heavenly-stem", "lower-greek", "hiragana", "hiragana-iroha", "katakana", "katakana-iroha", "disc", "circle", "square", "disclosure-open", "disclosure-closed"]
+    let timing_functions = ["cubic-bezier(", "steps(", "linear", "ease", "ease-in", "ease-in-out", "ease-out", "step-start", "step-end"]
 
-	if prop == 'azimuth'
-		let values = ["left-side", "far-left", "left", "center-left", "center", "center-right", "right", "far-right", "right-side", "behind", "leftwards", "rightwards"]
-	elseif prop == 'background-attachment'
-		let values = ["scroll", "fixed"]
-	elseif prop == 'background-color'
-		let values = ["transparent", "rgb(", "#"]
-	elseif prop == 'background-image'
-		let values = ["url(", "none"]
-	elseif prop == 'background-position'
-		let vals = matchstr(line, '.*:\s*\zs.*')
-		if vals =~ '^\%([a-zA-Z]\+\)\?$'
-			let values = ["top", "center", "bottom"]
-		elseif vals =~ '^[a-zA-Z]\+\s\+\%([a-zA-Z]\+\)\?$'
-			let values = ["left", "center", "right"]
-		else
-			return []
-		endif
-	elseif prop == 'background-repeat'
-		let values = ["repeat", "repeat-x", "repeat-y", "no-repeat"]
-	elseif prop == 'background'
-		let values = ["url(", "scroll", "fixed", "transparent", "rgb(", "#", "none", "top", "center", "bottom" , "left", "right", "repeat", "repeat-x", "repeat-y", "no-repeat"]
-	elseif prop == 'border-collapse'
-		let values = ["collapse", "separate"]
-	elseif prop == 'border-color'
-		let values = ["rgb(", "#", "transparent"]
-	elseif prop == 'border-spacing'
-		return []
-	elseif prop == 'border-style'
-		let values = ["none", "hidden", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset"]
-	elseif prop =~ 'border-\%(top\|right\|bottom\|left\)$'
-		let vals = matchstr(line, '.*:\s*\zs.*')
-		if vals =~ '^\%([a-zA-Z0-9.]\+\)\?$'
-			let values = ["thin", "thick", "medium"]
-		elseif vals =~ '^[a-zA-Z0-9.]\+\s\+\%([a-zA-Z]\+\)\?$'
-			let values = ["none", "hidden", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset"]
-		elseif vals =~ '^[a-zA-Z0-9.]\+\s\+[a-zA-Z]\+\s\+\%([a-zA-Z(]\+\)\?$'
-			let values = ["rgb(", "#", "transparent"]
-		else
-			return []
-		endif
-	elseif prop =~ 'border-\%(top\|right\|bottom\|left\)-color'
-		let values = ["rgb(", "#", "transparent"]
-	elseif prop =~ 'border-\%(top\|right\|bottom\|left\)-style'
-		let values = ["none", "hidden", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset"]
-	elseif prop =~ 'border-\%(top\|right\|bottom\|left\)-width'
-		let values = ["thin", "thick", "medium"]
-	elseif prop == 'border-width'
-		let values = ["thin", "thick", "medium"]
-	elseif prop == 'border'
-		let vals = matchstr(line, '.*:\s*\zs.*')
-		if vals =~ '^\%([a-zA-Z0-9.]\+\)\?$'
-			let values = ["thin", "thick", "medium"]
-		elseif vals =~ '^[a-zA-Z0-9.]\+\s\+\%([a-zA-Z]\+\)\?$'
-			let values = ["none", "hidden", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset"]
-		elseif vals =~ '^[a-zA-Z0-9.]\+\s\+[a-zA-Z]\+\s\+\%([a-zA-Z(]\+\)\?$'
-			let values = ["rgb(", "#", "transparent"]
-		else
-			return []
-		endif
-	elseif prop == 'bottom'
-		let values = ["auto"]
-	elseif prop == 'caption-side'
-		let values = ["top", "bottom"]
-	elseif prop == 'clear'
-		let values = ["none", "left", "right", "both"]
-	elseif prop == 'clip'
-		let values = ["auto", "rect("]
-	elseif prop == 'color'
-		let values = ["rgb(", "#"]
-	elseif prop == 'content'
-		let values = ["normal", "attr(", "open-quote", "close-quote", "no-open-quote", "no-close-quote"]
-	elseif prop =~ 'counter-\%(increment\|reset\)$'
-		let values = ["none"]
-	elseif prop =~ '^\%(cue-after\|cue-before\|cue\)$'
-		let values = ["url(", "none"]
-	elseif prop == 'cursor'
-		let values = ["url(", "auto", "crosshair", "default", "pointer", "move", "e-resize", "ne-resize", "nw-resize", "n-resize", "se-resize", "sw-resize", "s-resize", "w-resize", "text", "wait", "help", "progress"]
-	elseif prop == 'direction'
-		let values = ["ltr", "rtl"]
-	elseif prop == 'display'
-		let values = ["inline", "block", "list-item", "run-in", "inline-block", "table", "inline-table", "table-row-group", "table-header-group", "table-footer-group", "table-row", "table-column-group", "table-column", "table-cell", "table-caption", "none"]
-	elseif prop == 'elevation'
-		let values = ["below", "level", "above", "higher", "lower"]
-	elseif prop == 'empty-cells'
-		let values = ["show", "hide"]
-	elseif prop == 'float'
-		let values = ["left", "right", "none"]
-	elseif prop == 'font-family'
-		let values = ["sans-serif", "serif", "monospace", "cursive", "fantasy"]
-	elseif prop == 'font-size'
-		 let values = ["xx-small", "x-small", "small", "medium", "large", "x-large", "xx-large", "larger", "smaller"]
-	elseif prop == 'font-style'
-		let values = ["normal", "italic", "oblique"]
-	elseif prop == 'font-variant'
-		let values = ["normal", "small-caps"]
-	elseif prop == 'font-weight'
-		let values = ["normal", "bold", "bolder", "lighter", "100", "200", "300", "400", "500", "600", "700", "800", "900"]
-	elseif prop == 'font'
-		let values = ["normal", "italic", "oblique", "small-caps", "bold", "bolder", "lighter", "100", "200", "300", "400", "500", "600", "700", "800", "900", "xx-small", "x-small", "small", "medium", "large", "x-large", "xx-large", "larger", "smaller", "sans-serif", "serif", "monospace", "cursive", "fantasy", "caption", "icon", "menu", "message-box", "small-caption", "status-bar"]
-	elseif prop =~ '^\%(height\|width\)$'
-		let values = ["auto"]
-	elseif prop =~ '^\%(left\|rigth\)$'
-		let values = ["auto"]
-	elseif prop == 'letter-spacing'
-		let values = ["normal"]
-	elseif prop == 'line-height'
-		let values = ["normal"]
-	elseif prop == 'list-style-image'
-		let values = ["url(", "none"]
-	elseif prop == 'list-style-position'
-		let values = ["inside", "outside"]
-	elseif prop == 'list-style-type'
-		let values = ["disc", "circle", "square", "decimal", "decimal-leading-zero", "lower-roman", "upper-roman", "lower-latin", "upper-latin", "none"]
-	elseif prop == 'list-style'
-		return []
-	elseif prop == 'margin'
-		let values = ["auto"]
-	elseif prop =~ 'margin-\%(right\|left\|top\|bottom\)$'
-		let values = ["auto"]
-	elseif prop == 'max-height'
-		let values = ["auto"]
-	elseif prop == 'max-width'
-		let values = ["none"]
-	elseif prop == 'min-height'
-		let values = ["none"]
-	elseif prop == 'min-width'
-		let values = ["none"]
-	elseif prop == 'orphans'
-		return []
-	elseif prop == 'outline-color'
-		let values = ["rgb(", "#"]
-	elseif prop == 'outline-style'
-		let values = ["none", "hidden", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset"]
-	elseif prop == 'outline-width'
-		let values = ["thin", "thick", "medium"]
-	elseif prop == 'outline'
-		let vals = matchstr(line, '.*:\s*\zs.*')
-		if vals =~ '^\%([a-zA-Z0-9,()#]\+\)\?$'
-			let values = ["rgb(", "#"]
-		elseif vals =~ '^[a-zA-Z0-9,()#]\+\s\+\%([a-zA-Z]\+\)\?$'
-			let values = ["none", "hidden", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset"]
-		elseif vals =~ '^[a-zA-Z0-9,()#]\+\s\+[a-zA-Z]\+\s\+\%([a-zA-Z(]\+\)\?$'
-			let values = ["thin", "thick", "medium"]
-		else
-			return []
-		endif
-	elseif prop == 'overflow'
-		let values = ["visible", "hidden", "scroll", "auto"]
-	elseif prop == 'padding'
-		return []
-	elseif prop =~ 'padding-\%(top\|right\|bottom\|left\)$'
-		return []
-	elseif prop =~ 'page-break-\%(after\|before\)$'
-		let values = ["auto", "always", "avoid", "left", "right"]
-	elseif prop == 'page-break-inside'
-		let values = ["auto", "avoid"]
-	elseif prop =~ 'pause-\%(after\|before\)$'
-		return []
-	elseif prop == 'pause'
-		return []
-	elseif prop == 'pitch-range'
-		return []
-	elseif prop == 'pitch'
-		let values = ["x-low", "low", "medium", "high", "x-high"]
-	elseif prop == 'play-during'
-		let values = ["url(", "mix", "repeat", "auto", "none"]
-	elseif prop == 'position'
-		let values = ["static", "relative", "absolute", "fixed"]
-	elseif prop == 'quotes'
-		let values = ["none"]
-	elseif prop == 'richness'
-		return []
-	elseif prop == 'speak-header'
-		let values = ["once", "always"]
-	elseif prop == 'speak-numeral'
-		let values = ["digits", "continuous"]
-	elseif prop == 'speak-punctuation'
-		let values = ["code", "none"]
-	elseif prop == 'speak'
-		let values = ["normal", "none", "spell-out"]
-	elseif prop == 'speech-rate'
-		let values = ["x-slow", "slow", "medium", "fast", "x-fast", "faster", "slower"]
-	elseif prop == 'stress'
-		return []
-	elseif prop == 'table-layout'
-		let values = ["auto", "fixed"]
-	elseif prop == 'text-align'
-		let values = ["left", "right", "center", "justify"]
-	elseif prop == 'text-decoration'
-		let values = ["none", "underline", "overline", "line-through", "blink"]
-	elseif prop == 'text-indent'
-		return []
-	elseif prop == 'text-transform'
-		let values = ["capitalize", "uppercase", "lowercase", "none"]
-	elseif prop == 'top'
-		let values = ["auto"]
-	elseif prop == 'unicode-bidi'
-		let values = ["normal", "embed", "bidi-override"]
-	elseif prop == 'vertical-align'
-		let values = ["baseline", "sub", "super", "top", "text-top", "middle", "bottom", "text-bottom"]
-	elseif prop == 'visibility'
-		let values = ["visible", "hidden", "collapse"]
-	elseif prop == 'voice-family'
-		return []
-	elseif prop == 'volume'
-		let values = ["silent", "x-soft", "soft", "medium", "loud", "x-loud"]
-	elseif prop == 'white-space'
-		let values = ["normal", "pre", "nowrap", "pre-wrap", "pre-line"]
-	elseif prop == 'widows'
-		return []
-	elseif prop == 'word-spacing'
-		let values = ["normal"]
-	elseif prop == 'z-index'
-		let values = ["auto"]
-	else
-		" If no property match it is possible we are outside of {} and
-		" trying to complete pseudo-(class|element)
-		let element = tolower(matchstr(line, '\zs[a-zA-Z1-6]*\ze:[^:[:space:]]\{-}$'))
-		if stridx(',a,abbr,acronym,address,area,b,base,bdo,big,blockquote,body,br,button,caption,cite,code,col,colgroup,dd,del,dfn,div,dl,dt,em,fieldset,form,head,h1,h2,h3,h4,h5,h6,hr,html,i,img,input,ins,kbd,label,legend,li,link,map,meta,noscript,object,ol,optgroup,option,p,param,pre,q,samp,script,select,small,span,strong,style,sub,sup,table,tbody,td,textarea,tfoot,th,thead,title,tr,tt,ul,var,', ','.element.',') > -1
-			let values = ["first-child", "link", "visited", "hover", "active", "focus", "lang", "first-line", "first-letter", "before", "after"]
-		else
-			return []
-		endif
-	endif
+    if prop == 'all'
+      let values = []
+    elseif prop == 'additive-symbols'
+      let values = []
+    elseif prop == 'align-content'
+      let values = ["flex-start", "flex-end", "center", "space-between", "space-around", "stretch"]
+    elseif prop == 'align-items'
+      let values = ["flex-start", "flex-end", "center", "baseline", "stretch"]
+    elseif prop == 'align-self'
+      let values = ["auto", "flex-start", "flex-end", "center", "baseline", "stretch"]
+    elseif prop == 'animation'
+      let values = timing_functions + ["normal", "reverse", "alternate", "alternate-reverse"] + ["none", "forwards", "backwards", "both"] + ["running", "paused"]
+    elseif prop == 'animation-delay'
+      let values = []
+    elseif prop == 'animation-direction'
+      let values = ["normal", "reverse", "alternate", "alternate-reverse"]
+    elseif prop == 'animation-duration'
+      let values = []
+    elseif prop == 'animation-fill-mode'
+      let values = ["none", "forwards", "backwards", "both"]
+    elseif prop == 'animation-iteration-count'
+      let values = []
+    elseif prop == 'animation-name'
+      let values = []
+    elseif prop == 'animation-play-state'
+      let values = ["running", "paused"]
+    elseif prop == 'animation-timing-function'
+      let values = timing_functions
+    elseif prop == 'background-attachment'
+      let values = ["scroll", "fixed"]
+    elseif prop == 'background-color'
+      let values = color_values
+    elseif prop == 'background-image'
+      let values = ["url(", "none"]
+    elseif prop == 'background-position'
+      let vals = matchstr(line, '.*:\s*\zs.*')
+      if vals =~ '^\%([a-zA-Z]\+\)\?$'
+        let values = ["top", "center", "bottom"]
+      elseif vals =~ '^[a-zA-Z]\+\s\+\%([a-zA-Z]\+\)\?$'
+        let values = ["left", "center", "right"]
+      else
+        return []
+      endif
+    elseif prop == 'background-repeat'
+      let values = ["repeat", "repeat-x", "repeat-y", "no-repeat"]
+    elseif prop == 'background-size'
+      let values = ["auto", "contain", "cover"]
+    elseif prop == 'background'
+      let values = ["scroll", "fixed"] + color_values + ["url(", "none"] + ["top", "center", "bottom", "left", "right"] + ["repeat", "repeat-x", "repeat-y", "no-repeat"] + ["auto", "contain", "cover"]
+    elseif prop =~ 'border\%(-top\|-right\|-bottom\|-left\|-block-start\|-block-end\)\?$'
+      let vals = matchstr(line, '.*:\s*\zs.*')
+      if vals =~ '^\%([a-zA-Z0-9.]\+\)\?$'
+        let values = border_width_values
+      elseif vals =~ '^[a-zA-Z0-9.]\+\s\+\%([a-zA-Z]\+\)\?$'
+        let values = border_style_values
+      elseif vals =~ '^[a-zA-Z0-9.]\+\s\+[a-zA-Z]\+\s\+\%([a-zA-Z(]\+\)\?$'
+        let values = color_values
+      else
+        return []
+      endif
+    elseif prop =~ 'border-\%(top\|right\|bottom\|left\|block-start\|block-end\)-color'
+      let values = color_values
+    elseif prop =~ 'border-\%(top\|right\|bottom\|left\|block-start\|block-end\)-style'
+      let values = border_style_values
+    elseif prop =~ 'border-\%(top\|right\|bottom\|left\|block-start\|block-end\)-width'
+      let values = border_width_values
+    elseif prop == 'border-color'
+      let values = color_values
+    elseif prop == 'border-style'
+      let values = border_style_values
+    elseif prop == 'border-width'
+      let values = border_width_values
+    elseif prop == 'bottom'
+      let values = ["auto"]
+    elseif prop == 'box-decoration-break'
+      let values = ["slice", "clone"]
+    elseif prop == 'box-shadow'
+      let values = ["inset"]
+    elseif prop == 'box-sizing'
+      let values = ["border-box", "content-box"]
+    elseif prop =~ 'break-\%(before\|after\)'
+      let values = ["auto", "always", "avoid", "left", "right", "page", "column", "region", "recto", "verso", "avoid-page", "avoid-column", "avoid-region"]
+    elseif prop == 'break-inside'
+      let values = ["auto", "avoid", "avoid-page", "avoid-column", "avoid-region"]
+    elseif prop == 'caption-side'
+      let values = ["top", "bottom"]
+    elseif prop == 'clear'
+      let values = ["none", "left", "right", "both"]
+    elseif prop == 'clip'
+      let values = ["auto", "rect("]
+    elseif prop == 'clip-path'
+      let values = ["fill-box", "stroke-box", "view-box", "none"]
+    elseif prop == 'color'
+      let values = color_values
+    elseif prop == 'columns'
+      let values = []
+    elseif prop == 'column-count'
+      let values = ['auto']
+    elseif prop == 'column-fill'
+      let values = ['auto', 'balance']
+    elseif prop == 'column-rule-color'
+      let values = color_values
+    elseif prop == 'column-rule-style'
+      let values = border_style_values
+    elseif prop == 'column-rule-width'
+      let values = border_width_values
+    elseif prop == 'column-rule'
+      let vals = matchstr(line, '.*:\s*\zs.*')
+      if vals =~ '^\%([a-zA-Z0-9.]\+\)\?$'
+        let values = border_width_values
+      elseif vals =~ '^[a-zA-Z0-9.]\+\s\+\%([a-zA-Z]\+\)\?$'
+        let values = border_style_values
+      elseif vals =~ '^[a-zA-Z0-9.]\+\s\+[a-zA-Z]\+\s\+\%([a-zA-Z(]\+\)\?$'
+        let values = color_values
+      else
+        return []
+      endif
+    elseif prop == 'column-span'
+      let values = ["none", "all"]
+    elseif prop == 'column-width'
+      let values = ["auto"]
+    elseif prop == 'content'
+      let values = ["normal", "attr(", "open-quote", "close-quote", "no-open-quote", "no-close-quote"]
+    elseif prop =~ 'counter-\%(increment\|reset\)$'
+      let values = ["none"]
+    elseif prop =~ 'cue\%(-after\|-before\)\=$'
+      let values = ["url("]
+    elseif prop == 'cursor'
+      let values = ["url(", "auto", "crosshair", "default", "pointer", "move", "e-resize", "ne-resize", "nw-resize", "n-resize", "se-resize", "sw-resize", "s-resize", "w-resize", "text", "wait", "help", "progress"]
+    elseif prop == 'direction'
+      let values = ["ltr", "rtl"]
+    elseif prop == 'display'
+      let values = ["inline", "block", "list-item", "inline-list-item", "run-in", "inline-block", "table", "inline-table", "table-row-group", "table-header-group", "table-footer-group", "table-row", "table-column-group", "table-column", "table-cell", "table-caption", "none", "flex", "inline-flex", "grid", "inline-grid", "ruby", "ruby-base", "ruby-text", "ruby-base-container", "ruby-text-container", "contents"]
+    elseif prop == 'elevation'
+      let values = ["below", "level", "above", "higher", "lower"]
+    elseif prop == 'empty-cells'
+      let values = ["show", "hide"]
+    elseif prop == 'fallback'
+      let values = list_style_type_values
+    elseif prop == 'filter'
+      let values = ["blur(", "brightness(", "contrast(", "drop-shadow(", "grayscale(", "hue-rotate(", "invert(", "opacity(", "sepia(", "saturate("]
+    elseif prop == 'flex-basis'
+      let values = ["auto", "content"]
+    elseif prop == 'flex-flow'
+      let values = ["row", "row-reverse", "column", "column-reverse", "nowrap", "wrap", "wrap-reverse"]
+    elseif prop == 'flex-grow'
+      let values = []
+    elseif prop == 'flex-shrink'
+      let values = []
+    elseif prop == 'flex-wrap'
+      let values = ["nowrap", "wrap", "wrap-reverse"]
+    elseif prop == 'flex'
+      let values = ["nowrap", "wrap", "wrap-reverse"] + ["row", "row-reverse", "column", "column-reverse", "nowrap", "wrap", "wrap-reverse"] + ["auto", "content"]
+    elseif prop == 'float'
+      let values = ["left", "right", "none"]
+    elseif prop == 'font-family'
+      let values = ["sans-serif", "serif", "monospace", "cursive", "fantasy"]
+    elseif prop == 'font-feature-settings'
+      let values = ["normal", '"aalt"', '"abvf"', '"abvm"', '"abvs"', '"afrc"', '"akhn"', '"blwf"', '"blwm"', '"blws"', '"calt"', '"case"', '"ccmp"', '"cfar"', '"cjct"', '"clig"', '"cpct"', '"cpsp"', '"cswh"', '"curs"', '"cv', '"c2pc"', '"c2sc"', '"dist"', '"dlig"', '"dnom"', '"dtls"', '"expt"', '"falt"', '"fin2"', '"fin3"', '"fina"', '"flac"', '"frac"', '"fwid"', '"half"', '"haln"', '"halt"', '"hist"', '"hkna"', '"hlig"', '"hngl"', '"hojo"', '"hwid"', '"init"', '"isol"', '"ital"', '"jalt"', '"jp78"', '"jp83"', '"jp90"', '"jp04"', '"kern"', '"lfbd"', '"liga"', '"ljmo"', '"lnum"', '"locl"', '"ltra"', '"ltrm"', '"mark"', '"med2"', '"medi"', '"mgrk"', '"mkmk"', '"mset"', '"nalt"', '"nlck"', '"nukt"', '"numr"', '"onum"', '"opbd"', '"ordn"', '"ornm"', '"palt"', '"pcap"', '"pkna"', '"pnum"', '"pref"', '"pres"', '"pstf"', '"psts"', '"pwid"', '"qwid"', '"rand"', '"rclt"', '"rkrf"', '"rlig"', '"rphf"', '"rtbd"', '"rtla"', '"rtlm"', '"ruby"', '"salt"', '"sinf"', '"size"', '"smcp"', '"smpl"', '"ss01"', '"ss02"', '"ss03"', '"ss04"', '"ss05"', '"ss06"', '"ss07"', '"ss08"', '"ss09"', '"ss10"', '"ss11"', '"ss12"', '"ss13"', '"ss14"', '"ss15"', '"ss16"', '"ss17"', '"ss18"', '"ss19"', '"ss20"', '"ssty"', '"stch"', '"subs"', '"sups"', '"swsh"', '"titl"', '"tjmo"', '"tnam"', '"tnum"', '"trad"', '"twid"', '"unic"', '"valt"', '"vatu"', '"vert"', '"vhal"', '"vjmo"', '"vkna"', '"vkrn"', '"vpal"', '"vrt2"', '"zero"']
+    elseif prop == 'font-kerning'
+      let values = ["auto", "normal", "none"]
+    elseif prop == 'font-language-override'
+      let values = ["normal"]
+    elseif prop == 'font-size'
+      let values = ["xx-small", "x-small", "small", "medium", "large", "x-large", "xx-large", "larger", "smaller"]
+    elseif prop == 'font-size-adjust'
+      let values = []
+    elseif prop == 'font-stretch'
+      let values = ["normal", "ultra-condensed", "extra-condensed", "condensed", "semi-condensed", "semi-expanded", "expanded", "extra-expanded", "ultra-expanded"]
+    elseif prop == 'font-style'
+      let values = ["normal", "italic", "oblique"]
+    elseif prop == 'font-synthesis'
+      let values = ["none", "weight", "style"]
+    elseif prop == 'font-variant-alternates'
+      let values = ["normal", "historical-forms", "stylistic(", "styleset(", "character-variant(", "swash(", "ornaments(", "annotation("]
+    elseif prop == 'font-variant-caps'
+      let values = ["normal", "small-caps", "all-small-caps", "petite-caps", "all-petite-caps", "unicase", "titling-caps"]
+    elseif prop == 'font-variant-asian'
+      let values = ["normal", "ruby", "jis78", "jis83", "jis90", "jis04", "simplified", "traditional"]
+    elseif prop == 'font-variant-ligatures'
+      let values = ["normal", "none", "common-ligatures", "no-common-ligatures", "discretionary-ligatures", "no-discretionary-ligatures", "historical-ligatures", "no-historical-ligatures", "contextual", "no-contextual"]
+    elseif prop == 'font-variant-numeric'
+      let values = ["normal", "ordinal", "slashed-zero", "lining-nums", "oldstyle-nums", "proportional-nums", "tabular-nums", "diagonal-fractions", "stacked-fractions"]
+    elseif prop == 'font-variant-position'
+      let values = ["normal", "sub", "super"]
+    elseif prop == 'font-variant'
+      let values = ["normal", "historical-forms", "stylistic(", "styleset(", "character-variant(", "swash(", "ornaments(", "annotation("] + ["small-caps", "all-small-caps", "petite-caps", "all-petite-caps", "unicase", "titling-caps"] + ["ruby", "jis78", "jis83", "jis90", "jis04", "simplified", "traditional"] + ["none", "common-ligatures", "no-common-ligatures", "discretionary-ligatures", "no-discretionary-ligatures", "historical-ligatures", "no-historical-ligatures", "contextual", "no-contextual"] + ["ordinal", "slashed-zero", "lining-nums", "oldstyle-nums", "proportional-nums", "tabular-nums", "diagonal-fractions", "stacked-fractions"] + ["sub", "super"]
+    elseif prop == 'font-weight'
+      let values = ["normal", "bold", "bolder", "lighter", "100", "200", "300", "400", "500", "600", "700", "800", "900"]
+    elseif prop == 'font'
+      let values = ["normal", "italic", "oblique", "small-caps", "bold", "bolder", "lighter", "100", "200", "300", "400", "500", "600", "700", "800", "900", "xx-small", "x-small", "small", "medium", "large", "x-large", "xx-large", "larger", "smaller", "sans-serif", "serif", "monospace", "cursive", "fantasy", "caption", "icon", "menu", "message-box", "small-caption", "status-bar"]
+    elseif prop =~ '^\%(height\|width\)$'
+      let values = ["auto", "border-box", "content-box", "max-content", "min-content", "available", "fit-content"]
+    elseif prop =~ '^\%(left\|rigth\)$'
+      let values = ["auto"]
+    elseif prop == 'image-rendering'
+      let values = ["auto", "crisp-edges", "pixelated"]
+    elseif prop == 'image-orientation'
+      let values = ["from-image", "flip"]
+    elseif prop == 'ime-mode'
+      let values = ["auto", "normal", "active", "inactive", "disabled"]
+    elseif prop == 'inline-size'
+      let values = ["auto", "border-box", "content-box", "max-content", "min-content", "available", "fit-content"]
+    elseif prop == 'isolation'
+      let values = ["auto", "isolate"]
+    elseif prop == 'justify-content'
+      let values = ["flex-start", "flex-end", "center", "space-between", "space-around"]
+    elseif prop == 'letter-spacing'
+      let values = ["normal"]
+    elseif prop == 'line-break'
+      let values = ["auto", "loose", "normal", "strict"]
+    elseif prop == 'line-height'
+      let values = ["normal"]
+    elseif prop == 'list-style-image'
+      let values = ["url(", "none"]
+    elseif prop == 'list-style-position'
+      let values = ["inside", "outside"]
+    elseif prop == 'list-style-type'
+      let values = list_style_type_values
+    elseif prop == 'list-style'
+      let values = list_style_type_values + ["inside", "outside"] + ["url(", "none"]
+    elseif prop == 'margin'
+      let values = ["auto"]
+    elseif prop =~ 'margin-\%(right\|left\|top\|bottom\|block-start\|block-end\|inline-start\|inline-end\)$'
+      let values = ["auto"]
+    elseif prop == 'marks'
+      let values = ["crop", "cross", "none"]
+    elseif prop == 'mask'
+      let values = ["url("]
+    elseif prop == 'mask-type'
+      let values = ["luminance", "alpha"]
+    elseif prop == '\%(max\|min\)-\%(block\|inline\)-size'
+      let values = ["auto", "border-box", "content-box", "max-content", "min-content", "available", "fit-content"]
+    elseif prop == '\%(max\|min\)-\%(height\|width\)'
+      let values = ["auto", "border-box", "content-box", "max-content", "min-content", "available", "fit-content"]
+    elseif prop == '\%(max\|min\)-zoom'
+      let values = ["auto"]
+    elseif prop == 'mix-blend-mode'
+      let values = ["normal", "multiply", "screen", "overlay", "darken", "lighten", "color-dodge", "color-burn", "hard-light", "soft-light", "difference", "exclusion", "hue", "saturation", "color", "luminosity"]
+    elseif prop == 'opacity'
+      let values = []
+    elseif prop == 'orientation'
+      let values = ["auto", "portrait", "landscape"]
+    elseif prop == 'orphans'
+      let values = []
+    elseif prop == 'outline-offset'
+      let values = []
+    elseif prop == 'outline-color'
+      let values = color_values
+    elseif prop == 'outline-style'
+      let values = ["none", "hidden", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset"]
+    elseif prop == 'outline-width'
+      let values = ["thin", "thick", "medium"]
+    elseif prop == 'outline'
+      let vals = matchstr(line, '.*:\s*\zs.*')
+      if vals =~ '^\%([a-zA-Z0-9,()#]\+\)\?$'
+        let values = color_values
+      elseif vals =~ '^[a-zA-Z0-9,()#]\+\s\+\%([a-zA-Z]\+\)\?$'
+        let values = ["none", "hidden", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset"]
+      elseif vals =~ '^[a-zA-Z0-9,()#]\+\s\+[a-zA-Z]\+\s\+\%([a-zA-Z(]\+\)\?$'
+        let values = ["thin", "thick", "medium"]
+      else
+        return []
+      endif
+    elseif prop == 'overflow-wrap'
+      let values = ["normal", "break-word"]
+    elseif prop =~ 'overflow\%(-x\|-y\)\='
+      let values = ["visible", "hidden", "scroll", "auto"]
+    elseif prop == 'pad'
+      let values = []
+    elseif prop == 'padding'
+      let values = []
+    elseif prop =~ 'padding-\%(top\|right\|bottom\|left\|inline-start\|inline-end\|block-start\|block-end\)$'
+      let values = []
+    elseif prop =~ 'page-break-\%(after\|before\)$'
+      let values = ["auto", "always", "avoid", "left", "right", "recto", "verso"]
+    elseif prop == 'page-break-inside'
+      let values = ["auto", "avoid"]
+    elseif prop =~ 'pause\%(-after\|-before\)\=$'
+      let values = ["none", "x-weak", "weak", "medium", "strong", "x-strong"]
+    elseif prop == 'perspective'
+      let values = ["none"]
+    elseif prop == 'perspective-origin'
+      let values = ["top", "bottom", "left", "center", " right"]
+    elseif prop == 'pointer-events'
+      let values = ["auto", "none", "visiblePainted", "visibleFill", "visibleStroke", "visible", "painted", "fill", "stroke", "all"]
+    elseif prop == 'position'
+      let values = ["static", "relative", "absolute", "fixed", "sticky"]
+    elseif prop == 'prefix'
+      let values = []
+    elseif prop == 'quotes'
+      let values = ["none"]
+    elseif prop == 'range'
+      let values = ["auto", "infinite"]
+    elseif prop == 'resize'
+      let values = ["none", "both", "horizontal", "vertical"]
+    elseif prop =~ 'rest\%(-after\|-before\)\=$'
+      let values = ["none", "x-weak", "weak", "medium", "strong", "x-strong"]
+    elseif prop == 'ruby-align'
+      let values = ["start", "center", "space-between", "space-around"]
+    elseif prop == 'ruby-merge'
+      let values = ["separate", "collapse", "auto"]
+    elseif prop == 'ruby-position'
+      let values = ["over", "under", "inter-character"]
+    elseif prop == 'scroll-behavior'
+      let values = ["auto", "smooth"]
+    elseif prop == 'scroll-snap-coordinate'
+      let values = ["none"]
+    elseif prop == 'scroll-snap-destination'
+      return []
+    elseif prop == 'scroll-snap-points-\%(x\|y\)$'
+      let values = ["none", "repeat("]
+    elseif prop == 'scroll-snap-type\%(-x\|-y\)\=$'
+      let values = ["none", "mandatory", "proximity"]
+    elseif prop == 'shape-image-threshold'
+      let values = []
+    elseif prop == 'shape-margin'
+      let values = []
+    elseif prop == 'shape-outside'
+      let values = ["margin-box", "border-box", "padding-box", "content-box", 'inset(', 'circle(', 'ellipse(', 'polygon(', 'url(']
+    elseif prop == 'speak'
+      let values = ["auto", "none", "normal"]
+    elseif prop == 'speak-as'
+      let values = ["auto", "normal", "spell-out", "digits"]
+    elseif prop == 'src'
+      let values = ["url("]
+    elseif prop == 'suffix'
+      let values = []
+    elseif prop == 'symbols'
+      let values = []
+    elseif prop == 'system'
+      let vals = matchstr(line, '.*:\s*\zs.*')
+      if vals =~ '^extends'
+        let values = list_style_type_values
+      else
+        let values = ["cyclic", "numeric", "alphabetic", "symbolic", "additive", "fixed", "extends"]
+      endif
+    elseif prop == 'table-layout'
+      let values = ["auto", "fixed"]
+    elseif prop == 'tab-size'
+      let values = []
+    elseif prop == 'text-align'
+      let values = ["start", "end", "left", "right", "center", "justify", "match-parent"]
+    elseif prop == 'text-align-last'
+      let values = ["auto", "start", "end", "left", "right", "center", "justify"]
+    elseif prop == 'text-combine-upright'
+      let values = ["none", "all", "digits"]
+    elseif prop == 'text-decoration-line'
+      let values = ["none", "underline", "overline", "line-through", "blink"]
+    elseif prop == 'text-decoration-color'
+      let values = color_values
+    elseif prop == 'text-decoration-style'
+      let values = ["solid", "double", "dotted", "dashed", "wavy"]
+    elseif prop == 'text-decoration'
+      let values = ["none", "underline", "overline", "line-through", "blink"] + ["solid", "double", "dotted", "dashed", "wavy"] + color_values
+    elseif prop == 'text-emphasis-color'
+      let values = color_values
+    elseif prop == 'text-emphasis-position'
+      let values = ["over", "under", "left", "right"]
+    elseif prop == 'text-emphasis-style'
+      let values = ["none", "filled", "open", "dot", "circle", "double-circle", "triangle", "sesame"]
+    elseif prop == 'text-emphasis'
+      let values = color_values + ["over", "under", "left", "right"] + ["none", "filled", "open", "dot", "circle", "double-circle", "triangle", "sesame"]
+    elseif prop == 'text-indent'
+      let values = ["hanging", "each-line"]
+    elseif prop == 'text-orientation'
+      let values = ["mixed", "upright", "sideways", "sideways-right", "use-glyph-orientation"]
+    elseif prop == 'text-overflow'
+      let values = ["clip", "ellipsis"]
+    elseif prop == 'text-rendering'
+      let values = ["auto", "optimizeSpeed", "optimizeLegibility", "geometricPrecision"]
+    elseif prop == 'text-shadow'
+      let values = color_values
+    elseif prop == 'text-transform'
+      let values = ["capitalize", "uppercase", "lowercase", "full-width", "none"]
+    elseif prop == 'text-underline-position'
+      let values = ["auto", "under", "left", "right"]
+    elseif prop == 'touch-action'
+      let values = ["auto", "none", "pan-x", "pan-y", "manipulation", "pan-left", "pan-right", "pan-top", "pan-down"]
+    elseif prop == 'transform'
+      let values = ["matrix(", "translate(", "translateX(", "translateY(", "scale(", "scaleX(", "scaleY(", "rotate(", "skew(", "skewX(", "skewY(", "matrix3d(", "translate3d(", "translateZ(", "scale3d(", "scaleZ(", "rotate3d(", "rotateX(", "rotateY(", "rotateZ(", "perspective("]
+    elseif prop == 'transform-box'
+      let values = ["border-box", "fill-box", "view-box"]
+    elseif prop == 'transform-origin'
+      let values = ["left", "center", "right", "top", "bottom"]
+    elseif prop == 'transform-style'
+      let values = ["flat", "preserve-3d"]
+    elseif prop == 'top'
+      let values = ["auto"]
+    elseif prop == 'transition-property'
+      let values = ["all", "none"] + s:values
+    elseif prop == 'transition-duration'
+      let values = []
+    elseif prop == 'transition-delay'
+      let values = []
+    elseif prop == 'transition-timing-function'
+      let values = timing_functions
+    elseif prop == 'transition'
+      let values = ["all", "none"] + s:values + timing_functions
+    elseif prop == 'unicode-bidi'
+      let values = ["normal", "embed", "isolate", "bidi-override", "isolate-override", "plaintext"]
+    elseif prop == 'unicode-range'
+      let values = ["U+"]
+    elseif prop == 'user-zoom'
+      let values = ["zoom", "fixed"]
+    elseif prop == 'vertical-align'
+      let values = ["baseline", "sub", "super", "top", "text-top", "middle", "bottom", "text-bottom"]
+    elseif prop == 'visibility'
+      let values = ["visible", "hidden", "collapse"]
+    elseif prop == 'voice-volume'
+      let values = ["silent", "x-soft", "soft", "medium", "loud", "x-loud"]
+    elseif prop == 'voice-balance'
+      let values = ["left", "center", "right", "leftwards", "rightwards"]
+    elseif prop == 'voice-family'
+      let values = []
+    elseif prop == 'voice-rate'
+      let values = ["normal", "x-slow", "slow", "medium", "fast", "x-fast"]
+    elseif prop == 'voice-pitch'
+      let values = ["absolute", "x-low", "low", "medium", "high", "x-high"]
+    elseif prop == 'voice-range'
+      let values = ["absolute", "x-low", "low", "medium", "high", "x-high"]
+    elseif prop == 'voice-stress'
+      let values = ["normal", "strong", "moderate", "none", "reduced "]
+    elseif prop == 'voice-duration'
+      let values = ["auto"]
+    elseif prop == 'white-space'
+      let values = ["normal", "pre", "nowrap", "pre-wrap", "pre-line"]
+    elseif prop == 'widows'
+      let values = []
+    elseif prop == 'will-change'
+      let values = ["auto", "scroll-position", "contents"] + s:values
+    elseif prop == 'word-break'
+      let values = ["normal", "break-all", "keep-all"]
+    elseif prop == 'word-spacing'
+      let values = ["normal"]
+    elseif prop == 'word-wrap'
+      let values = ["normal", "break-word"]
+    elseif prop == 'writing-mode'
+      let values = ["horizontal-tb", "vertical-rl", "vertical-lr", "sideways-rl", "sideways-lr"]
+    elseif prop == 'z-index'
+      let values = ["auto"]
+    elseif prop == 'zoom'
+      let values = ["auto"]
+    else
+      " If no property match it is possible we are outside of {} and
+      " trying to complete pseudo-(class|element)
+      let element = tolower(matchstr(line, '\zs[a-zA-Z1-6]*\ze:[^:[:space:]]\{-}$'))
+      if stridx('a,abbr,address,area,article,aside,audio,b,base,bdi,bdo,bgsound,blockquote,body,br,button,canvas,caption,center,cite,code,col,colgroup,command,content,data,datalist,dd,del,details,dfn,dialog,div,dl,dt,element,em,embed,fieldset,figcaption,figure,font,footer,form,frame,frameset,head,header,hgroup,hr,html,i,iframe,image,img,input,ins,isindex,kbd,keygen,label,legend,li,link,main,map,mark,menu,menuitem,meta,meter,nav,nobr,noframes,noscript,object,ol,optgroup,option,output,p,param,picture,pre,progress,q,rp,rt,rtc,ruby,s,samp,script,section,select,shadow,small,source,span,strong,style,sub,summary,sup,table,tbody,td,template,textarea,tfoot,th,thead,time,title,tr,track,u,ul,var,video,wbr', ','.element.',') > -1
+        let values = ["active", "any", "checked", "default", "dir(", "disabled", "empty", "enabled", "first", "first-child", "first-of-type", "fullscreen", "focus", "hover", "indeterminate", "in-range", "invalid", "lang(", "last-child", "last-of-type", "left", "link", "not(", "nth-child(", "nth-last-child(", "nth-last-of-type(", "nth-of-type(", "only-child", "only-of-type", "optional", "out-of-range", "read-only", "read-write", "required", "right", "root", "scope", "target", "valid", "visited", "first-line", "first-letter", "before", "after", "selection", "backdrop"]
+      else
+        return []
+      endif
+    endif
 
-	" Complete values
-	let entered_value = matchstr(line, '.\{-}\zs[a-zA-Z0-9#,.(_-]*$')
+    let values = wide_keywords + values
+    " Complete values
+    let entered_value = matchstr(line, '.\{-}\zs[a-zA-Z0-9#,.(_-]*$')
 
-	for m in values
-		if m =~? '^'.entered_value
-			call add(res, m)
-		elseif m =~? entered_value
-			call add(res2, m)
-		endif
-	endfor
+    for m in values
+      if m =~? '^'.entered_value
+        call add(res, m)
+      elseif m =~? entered_value
+        call add(res2, m)
+      endif
+    endfor
 
-	return res + res2
+    return res + res2
 
-elseif borders[max(keys(borders))] == 'closebrace'
+  elseif borders[max(keys(borders))] == 'closebrace'
 
-	return []
+    return []
 
-elseif borders[max(keys(borders))] == 'exclam'
+  elseif borders[max(keys(borders))] == 'exclam'
 
-	" Complete values
-	let entered_imp = matchstr(line, '.\{-}!\s*\zs[a-zA-Z ]*$')
+    " Complete values
+    let entered_imp = matchstr(line, '.\{-}!\s*\zs[a-zA-Z ]*$')
 
-	let values = ["important"]
+    let values = ["important"]
 
-	for m in values
-		if m =~? '^'.entered_imp
-			call add(res, m)
-		endif
-	endfor
+    for m in values
+      if m =~? '^'.entered_imp
+        call add(res, m)
+      endif
+    endfor
+
+    return res
 
-	return res
+  elseif borders[max(keys(borders))] == 'atrule'
+
+    let afterat = matchstr(line, '.*@\zs.*')
 
-elseif borders[max(keys(borders))] == 'atrule'
+    if afterat =~ '\s'
 
-	let afterat = matchstr(line, '.*@\zs.*')
+      let atrulename = matchstr(line, '.*@\zs[a-zA-Z-]\+\ze')
 
-	if afterat =~ '\s'
+      if atrulename == 'media'
+        let entered_atruleafter = matchstr(line, '.*@media\s\+\zs.*$')
 
-		let atrulename = matchstr(line, '.*@\zs[a-zA-Z-]\+\ze')
+        if entered_atruleafter =~ "([^)]*$"
+          let entered_atruleafter = matchstr(entered_atruleafter, '(\s*\zs[^)]*$')
+          let values = ["max-width", "min-width", "width", "max-height", "min-height", "height", "max-aspect-ration", "min-aspect-ration", "aspect-ratio", "orientation", "max-resolution", "min-resolution", "resolution", "scan", "grid", "update-frequency", "overflow-block", "overflow-inline", "max-color", "min-color", "color", "max-color-index", "min-color-index", "color-index", "monochrome", "inverted-colors", "pointer", "hover", "any-pointer", "any-hover", "light-level", "scripting"]
+        else
+          let values = ["screen", "print", "speech", "all", "not", "and", "("]
+        endif
 
-		if atrulename == 'media'
-			let values = ["screen", "tty", "tv", "projection", "handheld", "print", "braille", "aural", "all"]
+      elseif atrulename == 'supports'
+        let entered_atruleafter = matchstr(line, '.*@supports\s\+\zs.*$')
 
-			let entered_atruleafter = matchstr(line, '.*@media\s\+\zs.*$')
-
-		elseif atrulename == 'import'
-			let entered_atruleafter = matchstr(line, '.*@import\s\+\zs.*$')
+        if entered_atruleafter =~ "([^)]*$"
+          let entered_atruleafter = matchstr(entered_atruleafter, '(\s*\zs.*$')
+          let values = s:values
+        else
+          let values = ["("]
+        endif
 
-			if entered_atruleafter =~ "^[\"']"
-				let filestart = matchstr(entered_atruleafter, '^.\zs.*')
-				let files = split(glob(filestart.'*'), '\n')
-				let values = map(copy(files), '"\"".v:val')
+      elseif atrulename == 'charset'
+        let entered_atruleafter = matchstr(line, '.*@charset\s\+\zs.*$')
+        let values = [
+          \ '"UTF-8";', '"ANSI_X3.4-1968";', '"ISO_8859-1:1987";', '"ISO_8859-2:1987";', '"ISO_8859-3:1988";', '"ISO_8859-4:1988";', '"ISO_8859-5:1988";', 
+          \ '"ISO_8859-6:1987";', '"ISO_8859-7:1987";', '"ISO_8859-8:1988";', '"ISO_8859-9:1989";', '"ISO-8859-10";', '"ISO_6937-2-add";', '"JIS_X0201";', 
+          \ '"JIS_Encoding";', '"Shift_JIS";', '"Extended_UNIX_Code_Packed_Format_for_Japanese";', '"Extended_UNIX_Code_Fixed_Width_for_Japanese";',
+          \ '"BS_4730";', '"SEN_850200_C";', '"IT";', '"ES";', '"DIN_66003";', '"NS_4551-1";', '"NF_Z_62-010";', '"ISO-10646-UTF-1";', '"ISO_646.basic:1983";',
+          \ '"INVARIANT";', '"ISO_646.irv:1983";', '"NATS-SEFI";', '"NATS-SEFI-ADD";', '"NATS-DANO";', '"NATS-DANO-ADD";', '"SEN_850200_B";', '"KS_C_5601-1987";',
+          \ '"ISO-2022-KR";', '"EUC-KR";', '"ISO-2022-JP";', '"ISO-2022-JP-2";', '"JIS_C6220-1969-jp";', '"JIS_C6220-1969-ro";', '"PT";', '"greek7-old";', 
+          \ '"latin-greek";', '"NF_Z_62-010_(1973)";', '"Latin-greek-1";', '"ISO_5427";', '"JIS_C6226-1978";', '"BS_viewdata";', '"INIS";', '"INIS-8";', 
+          \ '"INIS-cyrillic";', '"ISO_5427:1981";', '"ISO_5428:1980";', '"GB_1988-80";', '"GB_2312-80";', '"NS_4551-2";', '"videotex-suppl";', '"PT2";', 
+          \ '"ES2";', '"MSZ_7795.3";', '"JIS_C6226-1983";', '"greek7";', '"ASMO_449";', '"iso-ir-90";', '"JIS_C6229-1984-a";', '"JIS_C6229-1984-b";', 
+          \ '"JIS_C6229-1984-b-add";', '"JIS_C6229-1984-hand";', '"JIS_C6229-1984-hand-add";', '"JIS_C6229-1984-kana";', '"ISO_2033-1983";', 
+          \ '"ANSI_X3.110-1983";', '"T.61-7bit";', '"T.61-8bit";', '"ECMA-cyrillic";', '"CSA_Z243.4-1985-1";', '"CSA_Z243.4-1985-2";', '"CSA_Z243.4-1985-gr";', 
+          \ '"ISO_8859-6-E";', '"ISO_8859-6-I";', '"T.101-G2";', '"ISO_8859-8-E";', '"ISO_8859-8-I";', '"CSN_369103";', '"JUS_I.B1.002";', '"IEC_P27-1";', 
+          \ '"JUS_I.B1.003-serb";', '"JUS_I.B1.003-mac";', '"greek-ccitt";', '"NC_NC00-10:81";', '"ISO_6937-2-25";', '"GOST_19768-74";', '"ISO_8859-supp";', 
+          \ '"ISO_10367-box";', '"latin-lap";', '"JIS_X0212-1990";', '"DS_2089";', '"us-dk";', '"dk-us";', '"KSC5636";', '"UNICODE-1-1-UTF-7";', '"ISO-2022-CN";', 
+          \ '"ISO-2022-CN-EXT";', '"ISO-8859-13";', '"ISO-8859-14";', '"ISO-8859-15";', '"ISO-8859-16";', '"GBK";', '"GB18030";', '"OSD_EBCDIC_DF04_15";', 
+          \ '"OSD_EBCDIC_DF03_IRV";', '"OSD_EBCDIC_DF04_1";', '"ISO-11548-1";', '"KZ-1048";', '"ISO-10646-UCS-2";', '"ISO-10646-UCS-4";', '"ISO-10646-UCS-Basic";',
+          \ '"ISO-10646-Unicode-Latin1";', '"ISO-10646-J-1";', '"ISO-Unicode-IBM-1261";', '"ISO-Unicode-IBM-1268";', '"ISO-Unicode-IBM-1276";', 
+          \ '"ISO-Unicode-IBM-1264";', '"ISO-Unicode-IBM-1265";', '"UNICODE-1-1";', '"SCSU";', '"UTF-7";', '"UTF-16BE";', '"UTF-16LE";', '"UTF-16";', '"CESU-8";', 
+          \ '"UTF-32";', '"UTF-32BE";', '"UTF-32LE";', '"BOCU-1";', '"ISO-8859-1-Windows-3.0-Latin-1";', '"ISO-8859-1-Windows-3.1-Latin-1";', 
+          \ '"ISO-8859-2-Windows-Latin-2";', '"ISO-8859-9-Windows-Latin-5";', '"hp-roman8";', '"Adobe-Standard-Encoding";', '"Ventura-US";', 
+          \ '"Ventura-International";', '"DEC-MCS";', '"IBM850";', '"PC8-Danish-Norwegian";', '"IBM862";', '"PC8-Turkish";', '"IBM-Symbols";', '"IBM-Thai";', 
+          \ '"HP-Legal";', '"HP-Pi-font";', '"HP-Math8";', '"Adobe-Symbol-Encoding";', '"HP-DeskTop";', '"Ventura-Math";', '"Microsoft-Publishing";', 
+          \ '"Windows-31J";', '"GB2312";', '"Big5";', '"macintosh";', '"IBM037";', '"IBM038";', '"IBM273";', '"IBM274";', '"IBM275";', '"IBM277";', '"IBM278";', 
+          \ '"IBM280";', '"IBM281";', '"IBM284";', '"IBM285";', '"IBM290";', '"IBM297";', '"IBM420";', '"IBM423";', '"IBM424";', '"IBM437";', '"IBM500";', '"IBM851";', 
+          \ '"IBM852";', '"IBM855";', '"IBM857";', '"IBM860";', '"IBM861";', '"IBM863";', '"IBM864";', '"IBM865";', '"IBM868";', '"IBM869";', '"IBM870";', '"IBM871";', 
+          \ '"IBM880";', '"IBM891";', '"IBM903";', '"IBM904";', '"IBM905";', '"IBM918";', '"IBM1026";', '"EBCDIC-AT-DE";', '"EBCDIC-AT-DE-A";', '"EBCDIC-CA-FR";', 
+          \ '"EBCDIC-DK-NO";', '"EBCDIC-DK-NO-A";', '"EBCDIC-FI-SE";', '"EBCDIC-FI-SE-A";', '"EBCDIC-FR";', '"EBCDIC-IT";', '"EBCDIC-PT";', '"EBCDIC-ES";', 
+          \ '"EBCDIC-ES-A";', '"EBCDIC-ES-S";', '"EBCDIC-UK";', '"EBCDIC-US";', '"UNKNOWN-8BIT";', '"MNEMONIC";', '"MNEM";', '"VISCII";', '"VIQR";', '"KOI8-R";', 
+          \ '"HZ-GB-2312";', '"IBM866";', '"IBM775";', '"KOI8-U";', '"IBM00858";', '"IBM00924";', '"IBM01140";', '"IBM01141";', '"IBM01142";', '"IBM01143";', 
+          \ '"IBM01144";', '"IBM01145";', '"IBM01146";', '"IBM01147";', '"IBM01148";', '"IBM01149";', '"Big5-HKSCS";', '"IBM1047";', '"PTCP154";', '"Amiga-1251";', 
+          \ '"KOI7-switched";', '"BRF";', '"TSCII";', '"windows-1250";', '"windows-1251";', '"windows-1252";', '"windows-1253";', '"windows-1254";', '"windows-1255";', 
+          \ '"windows-1256";', '"windows-1257";', '"windows-1258";', '"TIS-620";']
 
-			elseif entered_atruleafter =~ "^url("
-				let filestart = matchstr(entered_atruleafter, "^url([\"']\\?\\zs.*")
-				let files = split(glob(filestart.'*'), '\n')
-				let values = map(copy(files), '"url(".v:val')
-				
-			else
-				let values = ['"', 'url(']
+      elseif atrulename == 'namespace'
+        let entered_atruleafter = matchstr(line, '.*@namespace\s\+\zs.*$')
+        let values = ["url("]
+
+      elseif atrulename == 'document'
+        let entered_atruleafter = matchstr(line, '.*@document\s\+\zs.*$')
+        let values = ["url(", "url-prefix(", "domain(", "regexp("]
 
-			endif
+      elseif atrulename == 'import'
+        let entered_atruleafter = matchstr(line, '.*@import\s\+\zs.*$')
 
-		else
-			return []
-
-		endif
+        if entered_atruleafter =~ "^[\"']"
+          let filestart = matchstr(entered_atruleafter, '^.\zs.*')
+          let files = split(glob(filestart.'*'), '\n')
+          let values = map(copy(files), '"\"".v:val')
 
-		for m in values
-			if m =~? '^'.entered_atruleafter
-				call add(res, m)
-			elseif m =~? entered_atruleafter
-				call add(res2, m)
-			endif
-		endfor
+        elseif entered_atruleafter =~ "^url("
+          let filestart = matchstr(entered_atruleafter, "^url([\"']\\?\\zs.*")
+          let files = split(glob(filestart.'*'), '\n')
+          let values = map(copy(files), '"url(".v:val')
 
-		return res + res2
+        else
+          let values = ['"', 'url(']
+
+        endif
 
-	endif
+      else
+        return []
 
-	let values = ["charset", "page", "media", "import", "font-face"]
+      endif
 
-	let entered_atrule = matchstr(line, '.*@\zs[a-zA-Z-]*$')
+      for m in values
+        if m =~? '^'.entered_atruleafter
+          if entered_atruleafter =~? '^"' && m =~? '^"'
+            let m = m[1:]
+          endif
+          if b:after =~? '"' && stridx(m, '"') > -1
+            let m = m[0:stridx(m, '"')-1]
+          endif 
+          call add(res, m)
+        elseif m =~? entered_atruleafter
+          if m =~? '^"'
+            let m = m[1:]
+          endif
+          call add(res2, m)
+        endif
+      endfor
+
+      return res + res2
 
-	for m in values
-		if m =~? '^'.entered_atrule
-			call add(res, m .' ')
-		elseif m =~? entered_atrule
-			call add(res2, m .' ')
-		endif
-	endfor
+    endif
+
+    let values = ["charset", "page", "media", "import", "font-face", "namespace", "supports", "keyframes", "viewport", "document"]
+
+    let entered_atrule = matchstr(line, '.*@\zs[a-zA-Z-]*$')
 
-	return res + res2
+    for m in values
+      if m =~? '^'.entered_atrule
+        call add(res, m .' ')
+      elseif m =~? entered_atrule
+        call add(res2, m .' ')
+      endif
+    endfor
 
-endif
+    return res + res2
 
-return []
+  endif
+
+  return []
 
 endfunction
--- a/runtime/doc/develop.txt
+++ b/runtime/doc/develop.txt
@@ -1,4 +1,4 @@
-*develop.txt*   For Vim version 7.4.  Last change: 2014 Mar 27
+*develop.txt*   For Vim version 7.4.  Last change: 2016 Jan 19
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -166,12 +166,27 @@ This list is not complete.  Look in the 
 MAKING CHANGES						*style-changes*
 
 The basic steps to make changes to the code:
-1. Adjust the documentation.  Doing this first gives you an impression of how
+1. Get the code from github.  That makes it easier to keep your changed
+   version in sync with the main code base (it may be a while before your
+   changes will be included).  You do need to spend some time learning git,
+   it's not the most user friendly tool.
+2. Adjust the documentation.  Doing this first gives you an impression of how
    your changes affect the user.
-2. Make the source code changes.
-3. Check ../doc/todo.txt if the change affects any listed item.
-4. Make a patch with "diff -c" against the unmodified code and docs.
-5. Make a note about what changed and include it with the patch.
+3. Make the source code changes.
+4. Check ../doc/todo.txt if the change affects any listed item.
+5. Make a patch with "git diff".  You can also create a pull request on
+   github, but it's the diff that matters.
+6. Make a note about what changed, preferably mentioning the problem and the
+   solution.  Send an email to the vim-dev maillist with an explanation and
+   include the diff. Or create a pull request on github.
+
+
+C COMPILER						*style-compiler*
+
+The minimal C compiler version supported is C89, also known as ANSI C.
+Later standards don't add much and C89 is the widest supported.
+
+One restriction that this implies: no // comments, only /* comments */.
 
 
 USE OF COMMON FUNCTIONS					*style-functions*
@@ -197,7 +212,7 @@ NAMES							*style-names*
 
 Function names can not be more than 31 characters long (because of VMS).
 
-Don't use "delete" as a variable name, C++ doesn't like it.
+Don't use "delete" or "this" as a variable name, C++ doesn't like it.
 
 Because of the requirement that Vim runs on as many systems as possible, we
 need to avoid using names that are already defined by the system.  This is a
@@ -288,6 +303,24 @@ OK:	    do
 		a = 1;
 	    while (cond);
 
+Wrong:	    if (cond) {
+               cmd;
+               cmd;
+	    } else {
+               cmd;
+               cmd;
+	    }
+
+OK:	    if (cond)
+            {
+               cmd;
+               cmd;
+	    }
+	    else
+	    {
+               cmd;
+               cmd;
+	    }
 
 Functions start with:
 
@@ -299,9 +332,9 @@ OK:	/*
 	 * Return value explanation.
 	 */
 	    int
-	function_name(arg1, arg2)
-	    int		arg1;		/* short comment about arg1 */
-	    int		arg2;		/* short comment about arg2 */
+	function_name(
+	    int		arg1,		/* short comment about arg1 */
+	    int		arg2)		/* short comment about arg2 */
 	{
 	    int		local;		/* comment about local */
 
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -1,4 +1,4 @@
-*eval.txt*	For Vim version 7.4.  Last change: 2016 Jan 17
+*eval.txt*	For Vim version 7.4.  Last change: 2016 Jan 21
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -103,6 +103,9 @@ When mixing Number and Float the Number 
 there is no automatic conversion of Float.  You can use str2float() for String
 to Float, printf() for Float to String and float2nr() for Float to Number.
 
+						*E891* *E892* *E893* *E894*
+When expecting a Float a Number can also be used, but nothing else.
+
 						*E706* *sticky-type-checking*
 You will get an error if you try to change the type of a variable.  You need
 to |:unlet| it first to avoid this error.  String and Number are considered
@@ -3601,7 +3604,8 @@ getftype({fname})					*getftype()*
 			getftype("/home")
 <		Note that a type such as "link" will only be returned on
 		systems that support it.  On some systems only "dir" and
-		"file" are returned.
+		"file" are returned.  On MS-Windows a symbolic link to a
+		directory returns "dir" instead of "link".
 
 							*getline()*
 getline({lnum} [, {end}])
@@ -5893,6 +5897,9 @@ sort({list} [, {func} [, {dict}]])			*so
 		sorted numerical. This is like 'n' but a string containing
 		digits will be used as the number they represent.
 
+		When {func} is given and it is 'f' then all items will be
+		sorted numerical. All values must be a Number or a Float.
+
 		When {func} is a |Funcref| or a function name, this function
 		is called to compare items.  The function is invoked with two
 		items as argument and must return zero if they are equal, 1 or
--- a/runtime/doc/index.txt
+++ b/runtime/doc/index.txt
@@ -1,4 +1,4 @@
-*index.txt*     For Vim version 7.4.  Last change: 2016 Jan 10
+*index.txt*     For Vim version 7.4.  Last change: 2016 Jan 19
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -1539,14 +1539,14 @@ tag	      command	      action ~
 |:tabdo|	:tabdo		execute command in each tab page
 |:tabedit|	:tabe[dit]	edit a file in a new tab page
 |:tabfind|	:tabf[ind]	find file in 'path', edit it in a new tab page
-|:tabfirst|	:tabfir[st]	got to first tab page
-|:tablast|	:tabl[ast]	got to last tab page
+|:tabfirst|	:tabfir[st]	go to first tab page
+|:tablast|	:tabl[ast]	go to last tab page
 |:tabmove|	:tabm[ove]	move tab page to other position
 |:tabnew|	:tabnew		edit a file in a new tab page
 |:tabnext|	:tabn[ext]	go to next tab page
 |:tabonly|	:tabo[nly]	close all tab pages except the current one
 |:tabprevious|	:tabp[revious]	go to previous tab page
-|:tabrewind|	:tabr[ewind]	got to first tab page
+|:tabrewind|	:tabr[ewind]	go to first tab page
 |:tabs|		:tabs		list the tab pages and what they contain
 |:tab|		:tab		create new tab when opening new window
 |:tag|		:ta[g]		jump to tag
--- a/runtime/doc/quickfix.txt
+++ b/runtime/doc/quickfix.txt
@@ -1,4 +1,4 @@
-*quickfix.txt*  For Vim version 7.4.  Last change: 2015 Dec 31
+*quickfix.txt*  For Vim version 7.4.  Last change: 2016 Jan 21
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
--- a/runtime/doc/tags
+++ b/runtime/doc/tags
@@ -2948,6 +2948,7 @@ 90.5	usr_90.txt	/*90.5*
 :syn-files	syntax.txt	/*:syn-files*
 :syn-fold	syntax.txt	/*:syn-fold*
 :syn-include	syntax.txt	/*:syn-include*
+:syn-iskeyword	syntax.txt	/*:syn-iskeyword*
 :syn-keepend	syntax.txt	/*:syn-keepend*
 :syn-keyword	syntax.txt	/*:syn-keyword*
 :syn-lc	syntax.txt	/*:syn-lc*
@@ -4417,6 +4418,10 @@ E888	pattern.txt	/*E888*
 E889	map.txt	/*E889*
 E89	message.txt	/*E89*
 E890	syntax.txt	/*E890*
+E891	eval.txt	/*E891*
+E892	eval.txt	/*E892*
+E893	eval.txt	/*E893*
+E894	eval.txt	/*E894*
 E90	message.txt	/*E90*
 E91	options.txt	/*E91*
 E92	message.txt	/*E92*
@@ -8134,6 +8139,7 @@ strstr()	eval.txt	/*strstr()*
 strtrans()	eval.txt	/*strtrans()*
 strwidth()	eval.txt	/*strwidth()*
 style-changes	develop.txt	/*style-changes*
+style-compiler	develop.txt	/*style-compiler*
 style-examples	develop.txt	/*style-examples*
 style-functions	develop.txt	/*style-functions*
 style-names	develop.txt	/*style-names*
--- a/runtime/doc/todo.txt
+++ b/runtime/doc/todo.txt
@@ -1,4 +1,4 @@
-*todo.txt*      For Vim version 7.4.  Last change: 2016 Jan 17
+*todo.txt*      For Vim version 7.4.  Last change: 2016 Jan 21
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -75,6 +75,12 @@ Regexp problems:
 - The pattern "\1" with the old engine gives E65, with the new engine it
   matches the empty string. (Dominique Pelle, 2015 Oct 2, Nov 24)
 - Search for \\~ causes error E874.
+- "\%1l^#.*" does not match on a line starting with "#".  The zero-width match
+  clears the start-of-line flag.
+
+C89: remove __ARGS in more places
+- Script: Hirohito Higashi, Jan 21.
+- Update to osdef.sh, Hirohito Higashi, 2016 Jan 21.
 
 Need to try out instructions in INSSTALLpc.txt about how to install all
 interfaces and how to build Vim with them.
@@ -90,6 +96,11 @@ work. (ZyX, 2013 Sep 28) With examples: 
 
 Problem using ":try" inside ":execute". (ZyX, 2013 Sep 15)
 
+Use vim.vim syntax highlighting for help file examples, but without ":" in
+'iskeyword' for syntax.
+
+Remove SPACE_IN_FILENAME ? What could possibly go wrong?
+
 Installation of .desktop files does not work everywhere.
 It's now fixed, but the target directory probably isn't right.
 Add configure check?
@@ -103,6 +114,11 @@ Access to uninitialized memory in match_
 ":cd C:\Windows\System32\drivers\etc*" does not work, even though the
 directory exists. (Sergio Gallelli, 2013 Dec 29)
 
+Win32: patch to use 64 bit stat() if possible. (Ken Takata, 2014 May 12)
+More tests May 14. Update May 29.  Update Aug 10.
+Now part of large file patches. (Ken Takata, 2016 Jan 19, second one)
+Updated patches with ordering: Jan 20.
+
 Using ":windo" to set options in all windows has the side effect that it
 changes the window layout and the current window.  Make a variant that saves
 and restores.  Use in the matchparen plugin.
@@ -118,6 +134,8 @@ Gvim: when both Tab and CTRL-I are mappe
 Unexpected delay when using CTRL-O u.  It's not timeoutlen.
 (Gary Johnson, 2015 Aug 28)
 
+Patch to support 64 bit ints for Number. (Ken Takata, 2016 Jan 21)
+
 Instead of separately uploading patches to the ftp site, we can get them from
 github with a URL like this:
    https://github.com/vim/vim/compare/v7.4.920%5E...v7.4.920.diff
@@ -152,8 +170,7 @@ Can we cache the syntax attributes, so t
 Build with Python on Mac does not always use the right library.
 (Kazunobu Kuriyama, 2015 Mar 28)
 
-Patch to support Python 'None' value in pyeval(). (Damien, 2015 Nov 21)
-Need a Vim equivalent of None and a way to test for it.
+Need a Vim equivalent of Python's None and a way to test for it.
 
 To support Thai (and other languages) word boundaries, include the ICU
 library:  http://userguide.icu-project.org/boundaryanalysis
@@ -161,10 +178,6 @@ library:  http://userguide.icu-project.o
 When complete() first argument is before where insert started and 'backspace'
 is Vi compatible, the completion fails. (Hirohito Higashi, 2015 Feb 19)
 
-Patch to fix bug in searchpair(). (Christian Brabandt, 2016 Jan 11)
-Problem reported by David Fishburn, using searchpair() with synID() used in
-the skip expression.
-
 Test 44 fails when [[=A=]] is changed to [[=À=]].  Caused by getcmdline() not
 handling the 0x80 as a second byte correctly?  (Dominique Pelle, 2015 Jun 10)
 
@@ -174,14 +187,6 @@ Goes away when disabling the swap file. 
 MS-Windows: Crash opening very long file name starting with "\\".
 (Christian Brock, 2012 Jun 29)
 
-Patch to add ":syn iskeyword". (Christian Brabandt, 2015 Nov 10)
-
-Patch to use PLATFORM to determine target architecture. (Taro Muraoka, 2015
-Nov 29)
-
-If libiconv.dll is not found search for libiconv2.dll. (Yasuhiro Matsumoto,
-2015 Oct 7)
-
 Using an external diff is inefficient.  Not all systems have a good diff
 program available (esp. MS-Windows).  Would be nice to have in internal diff
 implementation.  Can then also use this for displaying changes within a line.
@@ -199,9 +204,6 @@ 9)
 The argument for "-S" is not taken literally, the ":so" command expands
 wildcards.  Add a ":nowild" command modifier?  (ZyX, 2015 March 4)
 
-Patch to support sorting on floating point number.  (Alex Jakushev, 2010 Oct
-30)
-
 Proposal to make options.txt easier to read. (Arnaud Decara, 2015 Aug 5)
 Update Aug 14.
 
@@ -321,10 +323,6 @@ Adding "~" to 'cdpath' doesn't work for 
 Should be easy to highlight all matches with 'incsearch'.  Idea by Itchyny,
 2015 Feb 6.
 
-Plugins need to make a lot of effort, lots of mappings, to know what happened
-before pressing the key that triggers a plugin action.  How about keeping the
-last N pressed keys, so that they do not need to be mapped?
-
 Wrong scrolling when using incsearch.  Patch by Christian Brabandt, 2014 Dec 4.
 Is this a good solution?
 
@@ -410,9 +408,6 @@ Patch to make FocusGained and FocusLost 
 Saito, 2013 Apr 24)  Has a problem (email 2015 Jan 7).
 Update 2015 Jan 10.
 
-Win32: patch to use 64 bit stat() if possible. (Ken Takata, 2014 May 12)
-More tests May 14. Update May 29.  Update Aug 10.
-
 Idea: For a window in the middle (has window above and below it), use
 right-mouse-drag on the status line to move a window up/down without changing
 its height?  It's like dragging the status bar above it at the same time.
@@ -438,11 +433,13 @@ Problem with upwards search on Windows (
 2014 Jun 8)
 
 Include a plugin manager with Vim? Neobundle seems to be the best currently.
+Also Vundle: https://github.com/gmarik/vundle
 Long message about this from ZyX, 2014 Mar 23.  And following replies.
 Also see http://vim-wiki.mawercer.de/wiki/topic/vim%20plugin%20managment.html
 User view:
-- Support multiple sources, basically any http:// URL.  Be able to look into
-  the files before deciding to install.
+- Support multiple sources, basically any http:// URL. Or a central place that
+  will work for everybody (github?  redirects from vim.org?).
+  Be able to look into the files before deciding to install.
 - Be able to try out a plugin and remove it again with (almost) no traces.
 - Each plugin needs a "manifest" file that has the version, dependencies
   (including Vim version and features), conflicts, list of files, etc.
@@ -1113,6 +1110,14 @@ Gui menu edit/paste in block mode insert
 Winckler, 2011 May 11)
 Requires a map mode for Insert mode started from blockwise Visual mode.
 
+Use json format for new items in .viminfo:
+    |["info","any info"]
+    |["text","text text text"
+    |"continuation line"]
+    |["hist",242342342,{"arg":"value"}]
+  Use \" for a single ".  Use \\ for a \.
+  See http://www.ietf.org/rfc/rfc4627.txt
+
 Writing nested List and Dict in viminfo gives error message and can't be read
 back. (Yukihiro Nakadaira, 2010 Nov 13)
 
@@ -2130,10 +2135,37 @@ Add an option for a minimal text length 
 (Kartik Agaram)
 
 
-At next release:
--   Build a huge version by default.
--   Improve plugin handling: Automatic updates, handle dependencies?
-    E.g. Vundle: https://github.com/gmarik/vundle
+Better plugin support (not plugin manager, see elsewhere for that):
+- Add interface to another process, e.g. to run a background plugin.
+  Can use the code from netbeans to communicate over a socket.
+  A bit like +clientserver but without the hassle of starting another Vim.
+  Use json for the messages.
+    let handle = startjob({command})             # uses stdin/stdout
+    let handle = startjob({command}, {address})  # uses socket
+    let handle = connect({address})              # uses socket
+    let handle = deamon({command}, {address})    # start it if connect fails
+    let response = sendjson(handle, {json})      # sync
+    call sendjson(handle, {json}, {callback})    # async
+    call sethandler(handle, {callback})
+  The response json is wrapped in an array:
+    [{code},{response}]
+    {code} must be positive, when zero the callback from sethandler() is called
+  The job can send Vim commands that do not require a handler:
+    ['ex', {Ex command}]
+    ['normal', {Normal mode command}]
+    ['keys', {condition}, {key sequence}]
+    ['eval', {expression}]  sync, will send back result
+    ['expr', {expression}]  async
+- Native JSON support (to be able to commucate with any interface in the same
+  way).
+- Avoid use of feedkeys, add eval functions where needed:
+  - manipulating the Visual selection?
+- Add createmark(): add a mark like mM, but return a unique ID.  Need some way
+  to clean them up again...  Use a name + the script ID.
+  Add createmark( , 'c') to track inserts/deletes before the column.
+- Plugins need to make a lot of effort, lots of mappings, to know what
+  happened before pressing the key that triggers a plugin action.  How about
+  keeping the last N pressed keys, so that they do not need to be mapped?
 
 
 More patches:
@@ -3482,10 +3514,7 @@ 8   Add a "keepend-contained" argument: 
     one is contained in.  Like "keepend" but specified on the contained item,
     instead of the containing item.
 8   cpp.vim: In C++ it's allowed to use {} inside ().
-8   Some syntax files set 'iskeyword'.  When switching to another filetype
-    this isn't reset.  Add a special keyword definition for the syntax rules?
-    When this is done, use vim.vim syntax highlighting for help file examples,
-    but without ":" in 'iskeyword' for syntax.
+8   Some syntax files set 'iskeyword', they should use "syn iskeyword".
     Also need a separate 'iskeyword' for the command line, e.g., in a help
     window ":e /asdf/asdf/" CTRL-W works different.
 8   Add specific syntax item to match with parens/braces that don't have a
--- a/runtime/syntax/dcl.vim
+++ b/runtime/syntax/dcl.vim
@@ -1,8 +1,8 @@
 " Vim syntax file
 " Language:	DCL (Digital Command Language - vms)
 " Maintainer:	Charles E. Campbell <NdrOchipS@PcampbellAfamily.Mbiz>
-" Last Change:	Oct 23, 2014
-" Version:	7
+" Last Change:	Jan 20, 2016
+" Version:	8
 " URL:	http://www.drchip.org/astronaut/vim/index.html#SYNTAX_DCL
 
 " For version 5.x: Clear all syntax items
@@ -13,10 +13,10 @@ elseif exists("b:current_syntax")
   finish
 endif
 
-if version < 600
-  set iskeyword=$,@,48-57,_
+if !has("patch-7.4.1141")
+  setlocal iskeyword=$,@,48-57,_
 else
-  setlocal iskeyword=$,@,48-57,_
+ syn iskeyword $,@,48-57,_
 endif
 
 syn case ignore
--- a/runtime/syntax/lisp.vim
+++ b/runtime/syntax/lisp.vim
@@ -1,8 +1,8 @@
 " Vim syntax file
 " Language:    Lisp
 " Maintainer:  Charles E. Campbell <NdrOchipS@PcampbellAfamily.Mbiz>
-" Last Change: Oct 06, 2014
-" Version:     23
+" Last Change: Jan 20, 2016
+" Version:     24
 " URL:	       http://www.drchip.org/astronaut/vim/index.html#SYNTAX_LISP
 "
 "  Thanks to F Xavier Noria for a list of 978 Common Lisp symbols taken from HyperSpec
@@ -16,8 +16,10 @@ endif
 
 if exists("g:lisp_isk")
  exe "setl isk=".g:lisp_isk
+elseif !has("patch-7.4.1141")
+ setl isk=38,42,43,45,47-58,60-62,64-90,97-122,_
 else
- setl isk=38,42,43,45,47-58,60-62,64-90,97-122,_
+ syn iskeyword 38,42,43,45,47-58,60-62,64-90,97-122,_
 endif
 
 if exists("g:lispsyntax_ignorecase") || exists("g:lispsyntax_clisp")
--- a/runtime/syntax/maple.vim
+++ b/runtime/syntax/maple.vim
@@ -1,8 +1,8 @@
 " Vim syntax file
 " Language:	Maple V (based on release 4)
 " Maintainer:	Charles E. Campbell <NdrOchipS@PcampbellAfamily.Mbiz>
-" Last Change:	Oct 23, 2014
-" Version:	11
+" Last Change:	Jan 20, 2016
+" Version:	12
 " URL:	http://www.drchip.org/astronaut/vim/index.html#SYNTAX_MAPLE
 "
 " Package Function Selection: {{{1
@@ -30,10 +30,10 @@ elseif exists("b:current_syntax")
 endif
 
 " Iskeyword Effects: {{{1
-if version < 600
-  set iskeyword=$,48-57,_,a-z,@-Z
+if !has("patch-7.4.1141")
+ setl isk=$,48-57,_,a-z,@-Z
 else
-  setlocal iskeyword=$,48-57,_,a-z,@-Z
+ syn iskeyword $,48-57,_,a-z,@-Z
 endif
 
 " Package Selection: {{{1
--- a/runtime/syntax/messages.vim
+++ b/runtime/syntax/messages.vim
@@ -3,6 +3,7 @@
 " Maintainer:       Yakov Lerner <iler.ml@gmail.com>
 " Latest Revision:  2008-06-29
 " Changes:          2008-06-29 support for RFC3339 tuimestamps James Vega
+" 		    2016 Jan 19: messagesDate changed by Bram
 
 if exists("b:current_syntax")
   finish
@@ -13,7 +14,7 @@ set cpo&vim
 
 syn match   messagesBegin       display '^' nextgroup=messagesDate,messagesDateRFC3339
 
-syn match   messagesDate        contained display '\a\a\a [ 0-9]\d *'
+syn match   messagesDate        contained display '[[:lower:][:upper:]][[:lower:][:upper:]][[:lower:][:upper:]] [ 0-9]\d *'
                                 \ nextgroup=messagesHour
 
 syn match   messagesHour        contained display '\d\d:\d\d:\d\d\s*'
--- a/runtime/syntax/tex.vim
+++ b/runtime/syntax/tex.vim
@@ -1,8 +1,8 @@
 " Vim syntax file
 " Language:	TeX
 " Maintainer:	Charles E. Campbell <NdrchipO@ScampbellPfamily.AbizM>
-" Last Change:	Oct 20, 2015
-" Version:	90
+" Last Change:	Jan 20, 2016
+" Version:	91
 " URL:		http://www.drchip.org/astronaut/vim/index.html#SYNTAX_TEX
 "
 " Notes: {{{1
@@ -129,8 +129,10 @@ endif
 " g:tex_isk
 if exists("g:tex_isk")
  exe "setlocal isk=".g:tex_isk
+elseif !has("patch-7.4.1141")
+ setl isk=48-57,a-z,A-Z,192-255
 else
- setlocal isk=48-57,a-z,A-Z,192-255
+ syn iskeyword 48-57,a-z,A-Z,192-255
 endif
 if b:tex_stylish
   setlocal isk+=@-@
--- a/runtime/syntax/vim.vim
+++ b/runtime/syntax/vim.vim
@@ -1,8 +1,8 @@
 " Vim syntax file
 " Language:	Vim 7.4 script
 " Maintainer:	Charles E. Campbell <NdrOchipS@PcampbellAfamily.Mbiz>
-" Last Change:	January 04, 2016
-" Version:	7.4-39
+" Last Change:	January 20, 2016
+" Version:	7.4-40
 " Automatically generated keyword lists: {{{1
 
 " Quit when a syntax file was already loaded {{{2
@@ -18,38 +18,39 @@ syn keyword vimTodo contained	COMBAK	FIX
 syn cluster vimCommentGroup	contains=vimTodo,@Spell
 
 " regular vim commands {{{2
-syn keyword vimCommand contained	a arga[dd] argl[ocal] ba[ll] bn[ext] breakd[el] bufdo cabc[lear] cat[ch] ce[nter] cgetb[uffer] che[ckpath] cmapc[lear] cnf com cope[n] cs de delep delf di difft[his] dj[ump] dr[op] ec elsei[f] endf[unction] exi[t] filetype fix[del] for gr[ep] h[elp] hid[e] ij[ump] isp[lit] keepalt lad la[st] lcl[ose] lex[pr] lgete[xpr] ll lne lnf[ile] loc[kmarks] lr[ewind] lv[imgrep] marks mk mkv[imrc] mz[scheme] new noswap[file] o[pen] ped[it] pp[op] profd[el] ptf[irst] ptN[ext] py python3 re redr[aw] rew[ind] rubyf[ile] sa[rgument] sbn[ext] scripte[ncoding] setf[iletype] sh[ell] sim[alt] sm[ap] sni[ff] sor[t] spelli[nfo] spr[evious] start st[op] sunmenu syn ta tabf[ind] tabnew tabr[ewind] tcld[o] tj[ump] tN tr tu[nmenu] undoj[oin] uns[ilent] ve[rsion] vimgrepa[dd] vs[plit] winc[md] wN[ext] ws[verb] x[it] xnoremenu
-syn keyword vimCommand contained	ab argd ar[gs] bd[elete] bN[ext] breakl[ist] b[uffer] cad cb[uffer] cex[pr] cgete[xpr] checkt[ime] cn cNf comc[lear] co[py] cscope debug d[elete] delf[unction] diffg[et] diffu[pdate] dl ds[earch] echoe[rr] em[enu] en[dif] exu[sage] fin fo[ld] fu grepa[dd] helpc[lose] his[tory] il[ist] iuna[bbrev] keepj[umps] laddb[uffer] lat lcs lf lg[etfile] lla[st] lnew[er] lNf[ile] lockv[ar] ls lvimgrepa[dd] mat[ch] mk[exrc] mo n n[ext] nu[mber] opt[ions] pe[rl] pr prof[ile] ptj[ump] ptp[revious] py3 q r[ead] redraws[tatus] ri[ght] rundo sav[eas] sbN[ext] scrip[tnames] setg[lobal] si sl sme sno[magic] so[urce] spellr[epall] sre[wind] startg[replace] stopi[nsert] sus[pend] sync tab tabfir[st] tabn[ext] tabs tclf[ile] tl[ast] tn[ext] tr[ewind] u undol[ist] up[date] vert[ical] vi[sual] w windo wp[revious] wundo xmapc[lear] xunme
-syn keyword vimCommand contained	abc[lear] argd[elete] argu[ment] bel[owright] bo[tright] br[ewind] buffers caddb[uffer] cc cf cg[etfile] cl cN cnf[ile] comp[iler] cpf[ile] cstag debugg[reedy] deletel dell diffo[ff] dig dli[st] dsp[lit] echom[sg] en endt[ry] f fina[lly] foldc[lose] fun gui helpf[ind] i imapc[lear] j[oin] kee[pmarks] lad[dexpr] later lcscope lfdo lgr[ep] lli[st] lne[xt] lo lol[der] lt[ag] lw[indow] menut mks[ession] mod[e] nbc[lose] nmapc[lear] o ownsyntax perld[o] pre[serve] promptf[ind] ptl[ast] ptr[ewind] py3do qa[ll] rec[over] reg[isters] rightb[elow] ru[ntime] sba[ll] sbp[revious] scs setl[ocal] sig sla[st] smenu snoreme spe spellu[ndo] st star[tinsert] sts[elect] sv[iew] syncbind tabc[lose] tabl[ast] tabN[ext] ta[g] te[aroff] tm tN[ext] try un unh[ide] v vi viu[sage] wa[ll] winp[os] wq wv[iminfo] xme xunmenu
-syn keyword vimCommand contained	abo[veleft] argdo as[cii] bf[irst] bp[revious] bro[wse] bun[load] cad[dexpr] ccl[ose] cfdo c[hange] cla[st] cnew[er] cNf[ile] con cp[revious] cuna[bbrev] del deletep delm[arks] diffp[atch] dig[raphs] do e echon endf endw[hile] f[ile] fin[d] folddoc[losed] fu[nction] gvim helpg[rep] ia in ju[mps] keepp[atterns] laddf[ile] lb[uffer] ld[o] lf[ile] lgrepa[dd] lmak[e] lN[ext] loadk lop[en] lua ma menut[ranslate] mksp[ell] m[ove] nb[key] noa ol[dfiles] p po[p] prev[ious] promptr[epl] ptn pts[elect] pydo q[uit] red res[ize] ru rv[iminfo] sbf[irst] sbr[ewind] scscope sf[ind] sign sl[eep] sn[ext] snoremenu spelld[ump] spellw[rong] sta[g] startr[eplace] sun[hide] sw[apname] syntime tabd[o] tabm[ove] tabo[nly] tags tf[irst] tm[enu] to[pleft] ts[elect] una[bbreviate] unl ve vie[w] vmapc[lear] wh[ile] win[size] wqa[ll] x xmenu xwininfo
-syn keyword vimCommand contained	al[l] arge[dit] au bl[ast] brea[k] bu bw[ipeout] caddf[ile] cd cf[ile] changes cl[ist] cn[ext] col[der] conf[irm] cq[uit] cw[indow] delc[ommand] deletl delp diffpu[t] dir doau ea e[dit] endfo[r] ene[w] files fini[sh] foldd[oopen] g h helpt[ags] iabc[lear] intro k l lan lc[d] le[ft] lfir[st] lh[elpgrep] lmapc[lear] lnf loadkeymap lpf[ile] luado mak[e] mes mkv mz nbs[tart] noautocmd omapc[lear] pc[lose] popu p[rint] ps[earch] ptN pu[t] pyf[ile] quita[ll] redi[r] ret[ab] rub[y] sal[l] sbl[ast] sb[uffer] se[t] sfir[st] sil[ent] sm[agic] sN[ext] so spe[llgood] sp[lit] star stj[ump] sunme sy t tabe[dit] tabN tabp[revious] tc[l] th[row] tn tp[revious] tu u[ndo] unlo[ckvar] verb[ose] vim[grep] vne[w] win wn[ext] w[rite] xa[ll] xnoreme y[ank]
-syn keyword vimCommand contained	ar argg[lobal] bad[d] bm[odified] breaka[dd] buf c cal[l] cdo cfir[st] chd[ir] clo[se] cN[ext] colo[rscheme] con[tinue] cr[ewind] d delel deletp dep diffs[plit] di[splay] dp earlier el[se] endfun ex filet fir[st] foldo[pen] go[to] ha[rdcopy] hi if is[earch] keepa la lan[guage] lch[dir] lefta[bove] lgetb[uffer] l[ist] lN lNf lo[adview] lp[revious] luafile ma[rk] messages mkvie[w] mzf[ile] ne noh[lsearch] on[ly] pe popu[p] pro pta[g] ptn[ext] pw[d] py[thon] r red[o] retu[rn] rubyd[o] san[dbox] sbm[odified] scrip 
+syn keyword vimCommand contained	a argd argu[ment] bf[irst] brea[k] buf cabc[lear] cc cfdo changes clo[se] cN[ext] colo[rscheme] con[tinue] cr[ewind] d delel deletp dep diffpu[t] dir doau ea e[dit] endfo[r] ene[w] files fini[sh] foldd[oopen] g h helpt[ags] iabc[lear] intro k l lan lc[d] le[ft] lfir[st] lh[elpgrep] lmapc[lear] lnf loadkeymap lpf[ile] luado mak[e] mes mkv mz nbs[tart] noautocmd o ownsyntax perld[o] pre[serve] promptf[ind] ptl[ast] ptr[ewind] py3do qa[ll] rec[over] reg[isters] rightb[elow] ru[ntime] sba[ll] sbp[revious] sci scr[iptnames] setl[ocal] sgi sh[ell] sIe sil[ent] sir sm[ap] sno[magic] sp spellu[ndo] sre[wind] srp star[tinsert] sun[hide] sy ta tabfir[st] tabN[ext] tags th[row] tN tr[ewind] un unl verb[ose] vimgrepa[dd] w winp[os] wqa[ll] xa[ll] xnoremenu
+syn keyword vimCommand contained	ab argd[elete] as[cii] bl[ast] breaka[dd] bufdo cad[dbuffer] ccl[ose] cf[ile] chd[ir] cmapc[lear] cnf com cope[n] cs de delep delf di diffs[plit] di[splay] dp earlier el[se] endfun ex filet fir[st] foldo[pen] go[to] ha[rdcopy] hi if is[earch] keepa la lan[guage] lch[dir] lefta[bove] lgetb[uffer] l[ist] lN lNf lo[adview] lp[revious] luafile ma[rk] messages mkvie[w] mzf[ile] ne noh[lsearch] ol[dfiles] p po[p] prev[ious] promptr[epl] ptn pts[elect] pydo q[uit] red res[ize] ru rv[iminfo] sbf[irst] sbr[ewind] scI scs sf[ind] sgI si sig sim[alt] sIr sme snoreme spe spellw[rong] srg st startr[eplace] sunme syn tab tabl[ast] tabo[nly] tc[l] tj[ump] tn[ext] try una[bbreviate] unlo[ckvar] ve[rsion] vi[sual] wa[ll] win[size] w[rite] x[it] xprop
+syn keyword vimCommand contained	abc[lear] argdo au bm[odified] breakd[el] b[uffer] cadde[xpr] cd cfir[st] che[ckpath] cn cNf comc[lear] co[py] cscope debug d[elete] delf[unction] dif difft[his] dj[ump] dr[op] ec elsei[f] endf[unction] exi[t] filetype fix[del] for gr[ep] h[elp] hid[e] ij[ump] isp[lit] keepalt lad la[st] lcl[ose] lex[pr] lgete[xpr] ll lne lnf[ile] loc[kmarks] lr[ewind] lv[imgrep] marks mk mkv[imrc] mz[scheme] new nor omapc[lear] pc[lose] popu p[rint] ps[earch] ptN pu[t] pyf[ile] quita[ll] redi[r] ret[ab] rub[y] sal[l] sbl[ast] sb[uffer] scl scscope sfir[st] sgl sI sIg sin sl smenu snoremenu spelld[ump] sp[lit] sri sta[g] stj[ump] sunmenu sync tabc[lose] tabm[ove] tabp[revious] tcld[o] tl[ast] tN[ext] ts[elect] u[ndo] uns[ilent] vert[ical] viu[sage] wh[ile] wn[ext] ws[verb] xmapc[lear] xunme
+syn keyword vimCommand contained	abo[veleft] arge[dit] bad[d] bn[ext] breakl[ist] buffers caddf[ile] cdo cgetb[uffer] checkt[ime] cN cnf[ile] comp[iler] cpf[ile] cstag debugg[reedy] deletel dell diffg[et] dif[fupdate] dl ds[earch] echoe[rr] em[enu] en[dif] exu[sage] fin fo[ld] fu grepa[dd] helpc[lose] his[tory] il[ist] iuna[bbrev] keepj[umps] laddb[uffer] lat lcs lf lg[etfile] lla[st] lnew[er] lNf[ile] lockv[ar] ls lvimgrepa[dd] mat[ch] mk[exrc] mo n n[ext] nore on[ly] pe popu[p] pro pta[g] ptn[ext] pw[d] py[thon] r red[o] retu[rn] rubyd[o] san[dbox] sbm[odified] sc scp se[t] sg sgn sic sign sIn sla[st] sn[ext] so spe[llgood] spr[evious] srI star st[op] sus[pend] syncbind tabd[o] tabN tabr[ewind] tclf[ile] tm to[pleft] tu undoj[oin] up[date] vi vmapc[lear] win wN[ext] wundo xme xunmenu
+syn keyword vimCommand contained	al[l] argg[lobal] ba[ll] bN[ext] br[ewind] bun[load] cal[l] ce[nter] cgete[xpr] cl cnew[er] cNf[ile] con cp[revious] cuna[bbrev] del deletep delm[arks] diffo[ff] dig dli[st] dsp[lit] echom[sg] en endt[ry] f fina[lly] foldc[lose] fun gui helpf[ind] i imapc[lear] j[oin] kee[pmarks] lad[dexpr] later lcscope lfdo lgr[ep] lli[st] lne[xt] lo lol[der] lt[ag] lw[indow] menut mks[ession] mod[e] nbc[lose] nmapc[lear] nos[wapfile] o[pen] ped[it] pp[op] profd[el] ptf[irst] ptN[ext] py python3 re redr[aw] rew[ind] rubyf[ile] sa[rgument] sbn[ext] sce scr setf[iletype] sgc sgp sIc sil sip sl[eep] sN[ext] sor[t] spelli[nfo] sr srl start stopi[nsert] sv[iew] syntime tabe[dit] tabnew tabs te[aroff] tm[enu] tp[revious] tu[nmenu] undol[ist] v vie[w] vne[w] winc[md] wp[revious] wv[iminfo] xmenu xwininfo
+syn keyword vimCommand contained	ar argl[ocal] bd[elete] bo[tright] bro[wse] bw[ipeout] cat[ch] cex[pr] cg[etfile] cla[st] cn[ext] col[der] conf[irm] cq[uit] cw[indow] delc[ommand] deletl delp diffp[atch] dig[raphs] do e echon endf endw[hile] f[ile] fin[d] folddoc[losed] fu[nction] gvim helpg[rep] ia in ju[mps] keepp[atterns] laddf[ile] lb[uffer] ld[o] lf[ile] lgrepa[dd] lmak[e] lN[ext] loadk lop[en] lua ma menut[ranslate] mksp[ell] m[ove] nb[key] noa nu[mber] opt[ions] pe[rl] pr prof[ile] ptj[ump] ptp[revious] py3 q r[ead] redraws[tatus] ri[ght] rundo sav[eas] sbN[ext] scg scripte[ncoding] setg[lobal] sge sgr sie sIl sIp sm[agic] sni[ff] so[urce] spellr[epall] src srn startg[replace] sts[elect] sw[apname] t tabf[ind] tabn[ext] ta[g] tf[irst] tn tr u unh[ide] ve vim[grep] vs[plit] windo wq x xnoreme y[ank]
+syn keyword vimCommand contained	arga[dd] ar[gs] bel[owright] bp[revious] bu c cb[uffer] cf c[hange] cl[ist] 
 syn match   vimCommand contained	"\<z[-+^.=]\=\>"
 syn keyword vimStdPlugin contained	DiffOrig Man N[ext] P[rint] S TOhtml XMLent XMLns 
 
 " vimOptions are caught only when contained in a vimSet {{{2
-syn keyword vimOption contained	acd ambw arshape background ballooneval bg bl brk buftype cf cinkeys cmp com concealcursor cp cscopeprg csprg cul def diff display edcompatible endofline errorformat fcl fdm fex fileformats fkmap foldenable foldminlines formatprg gdefault gp guifontset helpfile hidden hl ignorecase imcmdline imsf indentexpr is isp keywordprg laststatus lisp loadplugins ma matchtime mco ml modeline mousefocus mousetime nrformats ofu para pdev pheader previewheight printmbcharset pvw readonly restorescreen rnu ruf sc scrollopt selectmode shellpipe shellxquote showcmd sidescroll smartindent sol spellsuggest sr stal sua swf syntax tagcase tbi termbidi tgst titleold top ttimeoutlen ttyscroll ul ur verbosefile visualbell wcm wi wildmenu winfixwidth wm wrapscan
-syn keyword vimOption contained	ai anti autochdir backspace balloonexpr bh bo browsedir casemap cfu cino cms comments conceallevel cpo cscopequickfix csqf cursorbind define diffexpr dy ef eol esckeys fcs fdn ff fileignorecase flp foldexpr foldnestmax fp gfm grepformat guifontwide helpheight highlight hlg im imd imstatusfunc indentkeys isf isprint km lazyredraw lispwords lpl macatsui maxcombine mef mls modelines mousehide mp nu omnifunc paragraphs penc pi previewwindow printmbfont pythondll redrawtime revins ro ruler scb scs sessionoptions shellquote shiftround showfulltag sidescrolloff smarttab sp spf srr startofline suffixes switchbuf ta taglength tbidi termencoding thesaurus titlestring tpm ttm ttytype undodir ut vfile vop wd wic wildmode winheight wmh write
-syn keyword vimOption contained	akm antialias autoindent backup bdir bin bomb bs cb ch cinoptions co commentstring confirm cpoptions cscoperelative csre cursorcolumn delcombine diffopt ea efm ep et fdc fdo ffs filetype fml foldignore foldopen fs gfn grepprg guiheadroom helplang history hls imactivatefunc imdisable inc indk isfname joinspaces kmp lbr list ls magic maxfuncdepth menuitems mm modifiable mousem mps number opendevice paste perldll pm printdevice printoptions pythonthreedll regexpengine ri rop rulerformat scr sect sft shellredir shiftwidth showmatch siso smc spc spl ss statusline suffixesadd sws tabline tagrelative tbis terse tildeop tl tr tty tw undofile vb vi wa weirdinvert wig wildoptions winminheight wmnu writeany
-syn keyword vimOption contained	al ar autoread backupcopy bdlay binary breakat bsdir cc charconvert cinw cocu compatible consk cpt cscopetag cst cursorline dex digraph ead ei equalalways eventignore fde fdt fic fillchars fmr foldlevel foldtext fsync gfs gtl guioptions hf hk hlsearch imactivatekey imi include inex isi js kp lcs listchars lsp makeef maxmapdepth mfd mmd modified mousemodel msm numberwidth operatorfunc pastetoggle pex pmbcs printencoding prompt qe relativenumber rightleft rs runtimepath scroll sections sh shellslash shm showmode sj smd spell splitbelow ssl stl sw sxe tabpagemax tags tbs textauto timeout tm ts ttybuiltin tx undolevels vbs viewdir wak wfh wildchar wim winminwidth wmw writebackup
-syn keyword vimOption contained	aleph arab autowrite backupdir belloff biosk breakindent bsk ccv ci cinwords cole complete conskey crb cscopetagorder csto cwh dg dip eadirection ek equalprg ex fdi fen fileencoding fixendofline fo foldlevelstart formatexpr ft gfw gtt guipty hh hkmap ic imaf iminsert includeexpr inf isident key langmap linebreak lm luadll makeprg maxmem mh mmp more mouses mzq nuw opfunc patchexpr pexpr pmbfn printexpr pt quoteescape remap rightleftcmd rtp sb scrollbind secure shcf shelltemp shortmess showtabline slm sn spellcapcheck splitright ssop stmp swapfile sxq tabstop tagstack tc textmode timeoutlen to tsl ttyfast uc undoreload vdir viewoptions warn wfw wildcharm winaltkeys winwidth wop writedelay
-syn keyword vimOption contained	allowrevins arabic autowriteall backupext beval bioskey breakindentopt bt cd cin clipboard colorcolumn completefunc copyindent cryptmethod cscopeverbose csverb debug dict dir eb enc errorbells expandtab fdl fenc fileencodings fixeol foldclose foldmarker formatlistpat gcr ghr guicursor guitablabel hi hkmapp icon imak ims incsearch infercase isk keymap langmenu lines lmap lw mat maxmempattern mis mmt mouse mouseshape mzquantum odev osfiletype patchmode pfn popt printfont pumheight rdt renderoptions rl ru sbo scrolljump sel shell shelltype shortname shq sm so spellfile spr st sts swapsync syn tag tal tenc textwidth title toolbar tsr ttym udf updatecount ve viminfo wb wh wildignore window wiv wrap ws
-syn keyword vimOption contained	altkeymap arabicshape aw backupskip bex bk bri bufhidden cdpath cindent cmdheight columns completeopt cot cscopepathcomp cspc cuc deco dictionary directory ed encoding errorfile exrc fdls fencs fileformat fk foldcolumn foldmethod formatoptions gd go guifont guitabtooltip hid hkp iconstring imc imsearch inde insertmode iskeyword keymodel langnoremap linespace lnr lz matchpairs maxmemtot mkspellmem mod mousef mouset nf oft pa path ph preserveindent printheader pvh re report rlc rubydll sbr scrolloff selection shellcmdflag shellxescape showbreak si smartcase softtabstop spelllang sps sta su swb synmaxcol tagbsearch tb term tf titlelen toolbariconsize ttimeout ttymouse udir updatetime verbose virtualedit wc whichwrap wildignorecase winfixheight wiw wrapmargin ww
-syn keyword vimOption contained	ambiwidth ari awa balloondelay bexpr bkc briopt buflisted cedit cink cmdwinheight 
+syn keyword vimOption contained	acd ambw arshape background ballooneval bg bl brk buftype cf cinkeys cmdwinheight com conceallevel cpo cscopequickfix csqf cursorbind define diffexpr dy ef eol esckeys fcs fdn ff fileignorecase flp foldexpr foldnestmax fp gfm grepformat guifontwide helpheight highlight hlg im imd imstatusfunc indentkeys isf isprint km lazyredraw lispwords lpl macatsui maxcombine mef mls modelines mousehide mp nu omnifunc paragraphs penc pi previewwindow printmbfont pythondll redrawtime revins ro ruler scb scs sessionoptions shellquote shiftround showfulltag sidescrolloff smarttab sp spf srr startofline suffixes switchbuf ta taglength tbidi termbidi tgst titleold top ttimeoutlen ttyscroll ul ur verbosefile visualbell wcm wi wildmenu winfixwidth wm wrapscan
+syn keyword vimOption contained	ai anti autochdir backspace balloonexpr bh bo browsedir casemap cfu cino cmp comments confirm cpoptions cscoperelative csre cursorcolumn delcombine diffopt ea efm ep et fdc fdo ffs filetype fml foldignore foldopen fs gfn grepprg guiheadroom helplang history hls imactivatefunc imdisable inc indk isfname joinspaces kmp lbr list ls magic maxfuncdepth menuitems mm modifiable mousem mps number opendevice paste perldll pm printdevice printoptions pythonthreedll regexpengine ri rop rulerformat scr sect sft shellredir shiftwidth showmatch siso smc spc spl ss statusline suffixesadd sws tabline tagrelative tbis termencoding thesaurus titlestring tpm ttm ttytype undodir ut vfile vop wd wic wildmode winheight wmh write
+syn keyword vimOption contained	akm antialias autoindent backup bdir bin bomb bs cb ch cinoptions cms commentstring consk cpt cscopetag cst cursorline dex digraph ead ei equalalways eventignore fde fdt fic fillchars fmr foldlevel foldtext fsync gfs gtl guioptions hf hk hlsearch imactivatekey imi include inex isi js kp lcs listchars lsp makeef maxmapdepth mfd mmd modified mousemodel msm numberwidth operatorfunc pastetoggle pex pmbcs printencoding prompt qe relativenumber rightleft rs runtimepath scroll sections sh shellslash shm showmode sj smd spell splitbelow ssl stl sw sxe tabpagemax tags tbs terse tildeop tl tr tty tw undofile vb vi wa weirdinvert wig wildoptions winminheight wmnu writeany
+syn keyword vimOption contained	al ar autoread backupcopy bdlay binary breakat bsdir cc charconvert cinw co compatible conskey crb cscopetagorder csto cwh dg dip eadirection ek equalprg ex fdi fen fileencoding fixendofline fo foldlevelstart formatexpr ft gfw gtt guipty hh hkmap ic imaf iminsert includeexpr inf isident key langmap linebreak lm luadll makeprg maxmem mh mmp more mouses mzq nuw opfunc patchexpr pexpr pmbfn printexpr pt quoteescape remap rightleftcmd rtp sb scrollbind secure shcf shelltemp shortmess showtabline slm sn spellcapcheck splitright ssop stmp swapfile sxq tabstop tagstack tc textauto timeout tm ts ttybuiltin tx undolevels vbs viewdir wak wfh wildchar wim winminwidth wmw writebackup
+syn keyword vimOption contained	aleph arab autowrite backupdir belloff biosk breakindent bsk ccv ci cinwords cocu complete copyindent cryptmethod cscopeverbose csverb debug dict dir eb enc errorbells expandtab fdl fenc fileencodings fixeol foldclose foldmarker formatlistpat gcr ghr guicursor guitablabel hi hkmapp icon imak ims incsearch infercase isk keymap langmenu lines lmap lw mat maxmempattern mis mmt mouse mouseshape mzquantum odev osfiletype patchmode pfn popt printfont pumheight rdt renderoptions rl ru sbo scrolljump sel shell shelltype shortname shq sm so spellfile spr st sts swapsync syn tag tal tcldll textmode timeoutlen to tsl ttyfast uc undoreload vdir viewoptions warn wfw wildcharm winaltkeys winwidth wop writedelay
+syn keyword vimOption contained	allowrevins arabic autowriteall backupext beval bioskey breakindentopt bt cd cin clipboard cole completefunc cot cscopepathcomp cspc cuc deco dictionary directory ed encoding errorfile exrc fdls fencs fileformat fk foldcolumn foldmethod formatoptions gd go guifont guitabtooltip hid hkp iconstring imc imsearch inde insertmode iskeyword keymodel langnoremap linespace lnr lz matchpairs maxmemtot mkspellmem mod mousef mouset nf oft pa path ph preserveindent printheader pvh re report rlc rubydll sbr scrolloff selection shellcmdflag shellxescape showbreak si smartcase softtabstop spelllang sps sta su swb synmaxcol tagbsearch tb tenc textwidth title toolbar tsr ttym udf updatecount ve viminfo wb wh wildignore window wiv wrap ws
+syn keyword vimOption contained	altkeymap arabicshape aw backupskip bex bk bri bufhidden cdpath cindent cm colorcolumn completeopt cp cscopeprg csprg cul def diff display edcompatible endofline errorformat fcl fdm fex fileformats fkmap foldenable foldminlines formatprg gdefault gp guifontset helpfile hidden hl ignorecase imcmdline imsf indentexpr is isp keywordprg laststatus lisp loadplugins ma matchtime mco ml modeline mousefocus mousetime nrformats ofu para pdev pheader previewheight printmbcharset pvw readonly restorescreen rnu ruf sc scrollopt selectmode shellpipe shellxquote showcmd sidescroll smartindent sol spellsuggest sr stal sua swf syntax tagcase tbi term tf titlelen toolbariconsize ttimeout ttymouse udir updatetime verbose virtualedit wc whichwrap wildignorecase winfixheight wiw wrapmargin ww
+syn keyword vimOption contained	ambiwidth ari awa balloondelay bexpr bkc briopt buflisted cedit cink cmdheight columns concealcursor 
 
 " vimOptions: These are the turn-off setting variants {{{2
-syn keyword vimOption contained	noacd noallowrevins noantialias noarabic noarshape noautoread noaw noballooneval nobinary nobk nobuflisted nocin noconfirm nocopyindent nocscoperelative nocsre nocuc nocursorcolumn nodelcombine nodigraph noed noendofline noerrorbells noex nofen nofixendofline nofkmap nogdefault nohidden nohkmapp nohlsearch noicon noim noimcmdline noimdisable noinf noinsertmode nojoinspaces nolazyredraw nolinebreak nolist nolpl noma nomagic noml nomodeline nomodified nomousef nomousehide nonumber noopendevice nopi nopreviewwindow nopvw norelativenumber norestorescreen nori norl noro noru nosb noscb noscs nosft noshelltemp noshortname noshowfulltag noshowmode nosm nosmartindent nosmd nosol nosplitbelow nospr nossl nostartofline noswapfile nota notagrelative notbi notbs noterse notextmode notgst notimeout noto notr nottybuiltin notx noundofile novisualbell nowarn noweirdinvert nowfw nowildignorecase nowinfixheight nowiv nowrap nowrite nowritebackup
-syn keyword vimOption contained	noai noaltkeymap noar noarabicshape noautochdir noautowrite noawa nobeval nobiosk nobl nocf nocindent noconsk nocp nocscopetag nocst nocul nocursorline nodg noea noedcompatible noeol noesckeys noexpandtab nofic nofixeol nofoldenable noguipty nohk nohkp noic noignorecase noimc noimd noincsearch noinfercase nois nojs nolbr nolisp noloadplugins nolz nomacatsui nomh nomod nomodifiable nomore nomousefocus nonu noodev nopaste nopreserveindent noprompt noreadonly noremap norevins norightleft nornu nors noruler nosc noscrollbind nosecure noshellslash noshiftround noshowcmd noshowmatch nosi nosmartcase nosmarttab nosn nospell nosplitright nosr nosta nostmp noswf notagbsearch notagstack notbidi notermbidi notextauto notf notildeop notitle notop nottimeout nottyfast noudf novb nowa nowb nowfh nowic nowildmenu nowinfixwidth nowmnu nowrapscan nowriteany nows
-syn keyword vimOption contained	noakm noanti noarab noari noautoindent noautowriteall nobackup nobin nobioskey nobomb noci nocompatible noconskey nocrb nocscopeverbose nocsverb nocursorbind nodeco nodiff noeb noek noequalalways noet noexrc nofileignorecase nofk nogd nohid nohkmap nohls 
+syn keyword vimOption contained	noacd noallowrevins noantialias noarabic noarshape noautoread noaw noballooneval nobinary nobk nobreakindent nocf nocindent noconsk nocp nocscopetag nocst nocul nocursorline nodg noea noedcompatible noeol noesckeys noexpandtab nofic nofixeol nofoldenable nogd nohid nohkmap nohls noicon noimc noimdisable noinfercase nojoinspaces nolangnoremap nolbr nolisp nolnr nolpl noma nomagic noml nomodeline nomodified nomousef nomousehide nonumber noopendevice nopi nopreviewwindow nopvw norelativenumber norestorescreen nori norl noro noru nosb noscb noscs nosft noshelltemp noshortname noshowfulltag noshowmode nosm nosmartindent nosmd nosol nosplitbelow nospr nossl nostartofline noswapfile nota notagrelative notbi notbs noterse notextmode notgst notimeout noto notr nottybuiltin notx noundofile novisualbell nowarn noweirdinvert nowfw nowildignorecase nowinfixheight nowiv nowrap nowrite nowritebackup
+syn keyword vimOption contained	noai noaltkeymap noar noarabicshape noautochdir noautowrite noawa nobeval nobiosk nobl nobri noci nocompatible noconskey nocrb nocscopeverbose nocsverb nocursorbind nodeco nodiff noeb noek noequalalways noet noexrc nofileignorecase nofk nofs nogdefault nohidden nohkmapp nohlsearch noignorecase noimcmdline noincsearch noinsertmode nojs nolazyredraw nolinebreak nolist noloadplugins nolz nomacatsui nomh nomod nomodifiable nomore nomousefocus nonu noodev nopaste nopreserveindent noprompt noreadonly noremap norevins norightleft nornu nors noruler nosc noscrollbind nosecure noshellslash noshiftround noshowcmd noshowmatch nosi nosmartcase nosmarttab nosn nospell nosplitright nosr nosta nostmp noswf notagbsearch notagstack notbidi notermbidi notextauto notf notildeop notitle notop nottimeout nottyfast noudf novb nowa nowb nowfh nowic nowildmenu nowinfixwidth nowmnu nowrapscan nowriteany nows
+syn keyword vimOption contained	noakm noanti noarab noari noautoindent noautowriteall nobackup nobin nobioskey nobomb nobuflisted nocin noconfirm nocopyindent nocscoperelative nocsre nocuc nocursorcolumn nodelcombine nodigraph noed noendofline noerrorbells noex nofen nofixendofline nofkmap nofsync noguipty nohk nohkp noic noim noimd noinf nois 
 
 " vimOptions: These are the invertible variants {{{2
-syn keyword vimOption contained	invacd invallowrevins invantialias invarabic invarshape invautoread invaw invballooneval invbinary invbk invbuflisted invcin invconfirm invcopyindent invcscoperelative invcsre invcuc invcursorcolumn invdelcombine invdigraph inved invendofline inverrorbells invex invfen invfixendofline invfkmap invgdefault invhidden invhkmapp invhlsearch invicon invim invimcmdline invimdisable invinf invinsertmode invjoinspaces invlazyredraw invlinebreak invlist invlpl invma invmagic invml invmodeline invmodified invmousef invmousehide invnumber invopendevice invpi invpreviewwindow invpvw invrelativenumber invrestorescreen invri invrl invro invru invsb invscb invscs invsft invshelltemp invshortname invshowfulltag invshowmode invsm invsmartindent invsmd invsol invsplitbelow invspr invssl invstartofline invswapfile invta invtagrelative invtbi invtbs invterse invtextmode invtgst invtimeout invto invtr invttybuiltin invtx invundofile invvisualbell invwarn invweirdinvert invwfw invwildignorecase invwinfixheight invwiv invwrap invwrite invwritebackup
-syn keyword vimOption contained	invai invaltkeymap invar invarabicshape invautochdir invautowrite invawa invbeval invbiosk invbl invcf invcindent invconsk invcp invcscopetag invcst invcul invcursorline invdg invea invedcompatible inveol invesckeys invexpandtab invfic invfixeol invfoldenable invguipty invhk invhkp invic invignorecase invimc invimd invincsearch invinfercase invis invjs invlbr invlisp invloadplugins invlz invmacatsui invmh invmod invmodifiable invmore invmousefocus invnu invodev invpaste invpreserveindent invprompt invreadonly invremap invrevins invrightleft invrnu invrs invruler invsc invscrollbind invsecure invshellslash invshiftround invshowcmd invshowmatch invsi invsmartcase invsmarttab invsn invspell invsplitright invsr invsta invstmp invswf invtagbsearch invtagstack invtbidi invtermbidi invtextauto invtf invtildeop invtitle invtop invttimeout invttyfast invudf invvb invwa invwb invwfh invwic invwildmenu invwinfixwidth invwmnu invwrapscan invwriteany invws
-syn keyword vimOption contained	invakm invanti invarab invari invautoindent invautowriteall invbackup invbin invbioskey invbomb invci invcompatible invconskey invcrb invcscopeverbose invcsverb invcursorbind invdeco invdiff inveb invek invequalalways invet invexrc invfileignorecase invfk invgd invhid invhkmap invhls 
+syn keyword vimOption contained	invacd invallowrevins invantialias invarabic invarshape invautoread invaw invballooneval invbinary invbk invbreakindent invcf invcindent invconsk invcp invcscopetag invcst invcul invcursorline invdg invea invedcompatible inveol invesckeys invexpandtab invfic invfixeol invfoldenable invgd invhid invhkmap invhls invicon invimc invimdisable invinfercase invjoinspaces invlangnoremap invlbr invlisp invlnr invlpl invma invmagic invml invmodeline invmodified invmousef invmousehide invnumber invopendevice invpi invpreviewwindow invpvw invrelativenumber invrestorescreen invri invrl invro invru invsb invscb invscs invsft invshelltemp invshortname invshowfulltag invshowmode invsm invsmartindent invsmd invsol invsplitbelow invspr invssl invstartofline invswapfile invta invtagrelative invtbi invtbs invterse invtextmode invtgst invtimeout invto invtr invttybuiltin invtx invundofile invvisualbell invwarn invweirdinvert invwfw invwildignorecase invwinfixheight invwiv invwrap invwrite invwritebackup
+syn keyword vimOption contained	invai invaltkeymap invar invarabicshape invautochdir invautowrite invawa invbeval invbiosk invbl invbri invci invcompatible invconskey invcrb invcscopeverbose invcsverb invcursorbind invdeco invdiff inveb invek invequalalways invet invexrc invfileignorecase invfk invfs invgdefault invhidden invhkmapp invhlsearch invignorecase invimcmdline invincsearch invinsertmode invjs invlazyredraw invlinebreak invlist invloadplugins invlz invmacatsui invmh invmod invmodifiable invmore invmousefocus invnu invodev invpaste invpreserveindent invprompt invreadonly invremap invrevins invrightleft invrnu invrs invruler invsc invscrollbind invsecure invshellslash invshiftround invshowcmd invshowmatch invsi invsmartcase invsmarttab invsn invspell invsplitright invsr invsta invstmp invswf invtagbsearch invtagstack invtbidi invtermbidi invtextauto invtf invtildeop invtitle invtop invttimeout invttyfast invudf invvb invwa invwb invwfh invwic invwildmenu invwinfixwidth invwmnu invwrapscan invwriteany invws
+syn keyword vimOption contained	invakm invanti invarab invari invautoindent invautowriteall invbackup invbin invbioskey invbomb invbuflisted invcin invconfirm invcopyindent invcscoperelative invcsre invcuc invcursorcolumn invdelcombine invdigraph inved invendofline inverrorbells invex invfen invfixendofline invfkmap invfsync invguipty invhk invhkp invic invim invimd invinf invis 
 
 " termcap codes (which can also be set) {{{2
-syn keyword vimOption contained	t_AB t_al t_bc t_ce t_cl t_Co t_Cs t_CV t_db t_dl t_DL t_EI t_F1 t_F2 t_F3 t_F4 t_F5 t_F6 t_F7 t_F8 t_F9 t_fs t_IE t_IS t_k1 t_K1 t_k2 t_k3 t_K3 t_k4 t_K4 t_k5 t_K5 t_k6 t_K6 t_k7 t_K7 t_k8 t_K8 t_k9 t_K9 t_KA t_kb t_kB t_KB t_KC t_kd t_kD t_KD t_ke t_KE t_KF t_KG t_kh t_KH t_kI t_KI t_KJ t_KK t_kl t_KL t_kN t_kP t_kr t_ks t_ku t_le t_mb t_md t_me t_mr t_ms t_nd t_op t_RI t_RV t_Sb t_se t_Sf t_SI t_so t_sr t_SR t_te t_ti t_ts t_u7 t_ue t_us t_ut t_vb t_ve t_vi t_vs t_WP t_WS t_xn t_xs t_ZH t_ZR
-syn keyword vimOption contained	t_AF t_AL t_cd t_Ce t_cm t_cs t_CS t_da 
+syn keyword vimOption contained	t_AB t_al t_bc t_ce t_cl t_Co t_Cs t_CV t_db t_DL t_EI t_F1 t_F2 t_F3 t_F4 t_F5 t_F6 t_F7 t_F8 t_F9 t_fs t_IE t_IS t_k1 t_K1 t_k2 t_k3 t_K3 t_k4 t_K4 t_k5 t_K5 t_k6 t_K6 t_k7 t_K7 t_k8 t_K8 t_k9 t_K9 t_KA t_kb t_kB t_KB t_KC t_kd t_kD t_KD t_ke t_KE t_KF t_KG t_kh t_KH t_kI t_KI t_KJ t_KK t_kl t_KL t_kN t_kP t_kr t_ks t_ku t_le t_mb t_md t_me t_mr t_ms t_nd t_op t_RB t_RI t_RV t_Sb t_se t_Sf t_SI t_so t_sr t_SR t_te t_ti t_ts t_u7 t_ue t_us t_ut t_vb t_ve t_vi t_vs t_WP t_WS t_xn t_xs t_ZH t_ZR
+syn keyword vimOption contained	t_AF t_AL t_cd t_Ce t_cm t_cs t_CS t_da t_dl 
 syn match   vimOption contained	"t_%1"
 syn match   vimOption contained	"t_#2"
 syn match   vimOption contained	"t_#4"
@@ -75,9 +76,9 @@ syn match vimHLGroup contained	"Conceal"
 syn case match
 
 " Function Names {{{2
-syn keyword vimFuncName contained	abs and argidx asin assert_true browse buflisted bufnr byteidx ceil cindent complete confirm cosh cursor did_filetype empty eventhandler exists expr8 filereadable finddir floor fnamemodify foldlevel foreground get getchar getcmdline getcmdwintype getfontname getftime getloclist getpos getregtype getwinposx glob has hasmapto histget hlID indent inputdialog inputsave invert items len line localtime luaeval mapcheck matchaddpos matchend max mode nr2char pow pumvisible range reltimestr remote_peek remove resolve screenattr screenrow searchpair server2client setcharsearch setloclist setqflist settabwinvar shellescape sin soundfold split str2nr strftime strlen strridx strwidth substitute synID synIDtrans system tabpagebuflist tabpagewinnr taglist tanh tolower tr type undotree values visualmode winbufnr winheight winnr winrestview winwidth writefile
-syn keyword vimFuncName contained	acos append arglistid assert_equal atan browsedir bufloaded bufwinnr byteidxcomp changenr clearmatches complete_add copy count deepcopy diff_filler escape executable exp extend filewritable findfile fmod foldclosed foldtext function getbufline getcharmod getcmdpos getcurpos getfperm getftype getmatches getqflist gettabvar getwinposy glob2regpat has_key histadd histnr hostname index inputlist inputsecret isdirectory join libcall line2byte log map match matcharg matchlist min mzeval or prevnonblank py3eval readfile remote_expr remote_read rename reverse screenchar search searchpairpos serverlist setcmdpos setmatches setreg setwinvar shiftwidth sinh spellbadword sqrt strchars stridx strpart strtrans submatch synconcealed synIDattr synstack systemlist tabpagenr tagfiles tan tempname toupper trunc undofile uniq virtcol wildmenumode wincol winline winrestcmd winsaveview wordcount xor
-syn keyword vimFuncName contained	add argc argv assert_false atan2 bufexists bufname byte2line call char2nr col complete_check cos cscope_connection delete diff_hlID eval exepath expand feedkeys filter float2nr fnameescape foldclosedend foldtextresult garbagecollect getbufvar getcharsearch getcmdtype getcwd getfsize getline getpid getreg gettabwinvar getwinvar globpath haslocaldir histdel hlexists iconv input inputrestore insert islocked keys libcallnr lispindent log10 maparg matchadd matchdelete matchstr mkdir nextnonblank pathshorten printf pyeval reltime remote_foreground remote_send repeat round screencol searchdecl searchpos setbufvar setline setpos settabvar sha256 simplify sort spellsuggest str2float strdisplaywidth string 
+syn keyword vimFuncName contained	abs alloc_fail argc argv assert_exception assert_true browse buflisted bufnr byteidx ceil cindent complete confirm cosh cursor did_filetype empty eventhandler exists expr8 filereadable finddir floor fnamemodify foldlevel foreground get getchar getcmdline getcmdwintype getfontname getftime getloclist getpos getregtype getwinposx glob has hasmapto histget hlID indent inputdialog inputsave invert items len line localtime luaeval mapcheck matchaddpos matchend max mode nr2char perleval printf pyeval reltime remote_foreground remote_send repeat round screencol searchdecl searchpos setbufvar setline setpos settabvar sha256 simplify sort spellsuggest str2float strdisplaywidth string strridx submatch synID synIDtrans system tabpagebuflist tabpagewinnr taglist tanh tolower tr type undotree values visualmode winbufnr winheight winnr winrestview winwidth writefile
+syn keyword vimFuncName contained	acos and argidx asin assert_fails atan browsedir bufloaded bufwinnr byteidxcomp changenr clearmatches complete_add copy count deepcopy diff_filler escape executable exp extend filewritable findfile fmod foldclosed foldtext function getbufline getcharmod getcmdpos getcurpos getfperm getftype getmatches getqflist gettabvar getwinposy glob2regpat has_key histadd histnr hostname index inputlist inputsecret isdirectory join libcall line2byte log map match matcharg matchlist min mzeval or pow pumvisible range reltimestr remote_peek remove resolve screenattr screenrow searchpair server2client setcharsearch setloclist setqflist settabwinvar shellescape sin soundfold split str2nr strftime strlen strtrans substitute synIDattr synstack systemlist tabpagenr tagfiles tan tempname toupper trunc undofile uniq virtcol wildmenumode wincol winline winrestcmd winsaveview wordcount xor
+syn keyword vimFuncName contained	add append arglistid assert_equal assert_false atan2 bufexists bufname byte2line call char2nr col complete_check cos cscope_connection delete diff_hlID eval exepath expand feedkeys filter float2nr fnameescape foldclosedend foldtextresult garbagecollect getbufvar getcharsearch getcmdtype getcwd getfsize getline getpid getreg gettabwinvar getwinvar globpath haslocaldir histdel hlexists iconv input inputrestore insert islocked keys libcallnr lispindent log10 maparg matchadd matchdelete matchstr mkdir nextnonblank pathshorten prevnonblank py3eval readfile remote_expr remote_read rename reverse screenchar search searchpairpos serverlist setcmdpos setmatches setreg setwinvar shiftwidth sinh spellbadword sqrt strchars stridx strpart strwidth synconcealed 
 
 "--- syntax here and above generated by mkvimvim ---
 " Special Vim Highlighting (not automatic) {{{1
@@ -468,6 +469,11 @@ syn match	vimGroupAdd	contained	"add="	n
 syn match	vimGroupRem	contained	"remove="	nextgroup=vimGroupList
 syn cluster vimFuncBodyList add=vimSynType,vimGroupAdd,vimGroupRem
 
+" Syntax: iskeyword {{{2
+syn keyword	vimSynType	contained	iskeyword	skipwhite nextgroup=vimIskList
+syn match	vimIskList	contained	'\S\+'	contains=vimIskSep
+syn match	vimIskSep	contained	','
+
 " Syntax: include {{{2
 syn keyword	vimSynType	contained	include	skipwhite nextgroup=vimGroupList
 syn cluster vimFuncBodyList add=vimSynType
@@ -855,6 +861,7 @@ hi def link vimHiTerm	Type
 hi def link vimHLGroup	vimGroup
 hi def link vimHLMod	PreProc
 hi def link vimInsert	vimString
+hi def link vimIskSep	Delimiter
 hi def link vimKeyCode	vimSpecFile
 hi def link vimKeyword	Statement
 hi def link vimLet	vimCommand