changeset 18818:5c40013d45ee

Update runtime files. Commit: https://github.com/vim/vim/commit/c08ee7476b19f9b4de5df287797af87c4e3fba0a Author: Bram Moolenaar <Bram@vim.org> Date: Thu Dec 5 22:47:25 2019 +0100 Update runtime files.
author Bram Moolenaar <Bram@vim.org>
date Thu, 05 Dec 2019 23:00:04 +0100
parents 17aefb9d7c45
children ba8dc10a2c0d
files runtime/doc/todo.txt runtime/doc/version8.txt runtime/ftplugin/git.vim runtime/ftplugin/gitcommit.vim runtime/ftplugin/gitrebase.vim runtime/ftplugin/haml.vim runtime/ftplugin/markdown.vim runtime/ftplugin/sass.vim runtime/indent/haml.vim runtime/syntax/git.vim runtime/syntax/gitcommit.vim runtime/syntax/gitconfig.vim runtime/syntax/gitrebase.vim runtime/syntax/haml.vim runtime/syntax/markdown.vim runtime/syntax/sass.vim runtime/syntax/scss.vim
diffstat 17 files changed, 383 insertions(+), 93 deletions(-) [+]
line wrap: on
line diff
--- a/runtime/doc/todo.txt
+++ b/runtime/doc/todo.txt
@@ -1,4 +1,4 @@
-*todo.txt*      For Vim version 8.1.  Last change: 2019 Dec 03
+*todo.txt*      For Vim version 8.1.  Last change: 2019 Dec 05
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -181,6 +181,8 @@ default one.  #4698
 When using :packadd files under "later" are not used, which is inconsistent
 with packages under "start". (xtal8, #1994)
 
+Patch to add new motion ]( and ]{.  (Yasuhiro Matsumoto, #5320)
+
 Modeless selection doesn't work in gvim. (#4783)
 Caused by patch 8.1.1534.
 
--- a/runtime/doc/version8.txt
+++ b/runtime/doc/version8.txt
@@ -1,4 +1,4 @@
-*version8.txt*  For Vim version 8.1.  Last change: 2019 Dec 04
+*version8.txt*  For Vim version 8.1.  Last change: 2019 Dec 05
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -35845,7 +35845,7 @@ Solution:   Ignore the "browse" modifier
 Files:	    src/ex_cmds.c
 
 Patch 8.1.1595
-Problem:    MS-Windows with VIMDLL: colors wrong in console.
+Problem:    MS-Windows with VIMDLL: colors wrong in the GUI.
 Solution:   Do not set the terminal colors when not using the GUI. (Ken
             Takata, closes #4588)
 Files:	    src/syntax.c
@@ -40741,5 +40741,195 @@ Problem:    ml_get error when accessing 
 Solution:   Disable Visual mode when using another window. (closes #5278)
 Files:	    src/testdir/test_statusline.vim, src/buffer.c
 
+Patch 8.1.2364
+Problem:    Termwinscroll test is flaky on FreeBSD.
+Solution:   Add to list of flaky tests.  Rename function.
+Files:	    src/testdir/runtest.vim, src/testdir/test_terminal.vim
+
+Patch 8.1.2365
+Problem:    Missing tests for recent popupwin changes.
+Solution:   Add test cases.
+Files:	    src/testdir/test_popupwin.vim
+
+Patch 8.1.2366
+Problem:    Using old C style comments.
+Solution:   Use // comments where appropriate.
+Files:	    src/ascii.h, src/beval.h, src/dosinst.h, src/feature.h,
+            src/glbl_ime.h, src/globals.h, src/gui_at_sb.h, src/gui_gtk_f.h,
+            src/gui_gtk_vms.h, src/gui.h, src/gui_x11_pm.h, src/gui_xmebwp.h,
+            src/if_cscope.h, src/if_mzsch.h, src/if_ole.h, src/if_py_both.h,
+            src/iscygpty.h, src/keymap.h, src/macros.h, src/nbdebug.h,
+            src/option.h, src/os_amiga.h, src/os_beos.h, src/os_dos.h,
+            src/os_mac.h, src/os_qnx.h, src/os_unix.h, src/os_unixx.h,
+            src/os_vms_conf.h, src/os_win32.h, src/proto.h, src/regexp.h,
+            src/spell.h, src/structs.h, src/term.h, src/version.h, src/vimio.h
+ 
+Patch 8.1.2367
+Problem:    Registers are not sufficiently tested.
+Solution:   Add a few more test cases. (Yegappan Lakshmanan, closes #5288)
+Files:	    src/testdir/test_registers.vim
+
+Patch 8.1.2368
+Problem:    Using old C style comments.
+Solution:   Use // comments where appropriate.
+Files:	    src/autocmd.c, src/beval.c, src/blob.c, src/blowfish.c,
+            src/buffer.c, src/change.c, src/channel.c, src/charset.c,
+            src/cindent.c, src/crypt.c, src/crypt_zip.c
+
+Patch 8.1.2369
+Problem:    Cannot build with quickfix and without text properties.
+Solution:   Fix typo. (Naruhiko Nishino)
+Files:	    src/popupmenu.c
+
+Patch 8.1.2370
+Problem:    Build problems on VMS.
+Solution:   Adjust the build file. (Zoltan Arpadffy)
+Files:	    src/Make_vms.mms, src/os_unix.c, src/os_vms.c
+
+Patch 8.1.2371
+Problem:    FEAT_TEXT_PROP is a confusing name.
+Solution:   Use FEAT_PROP_POPUP. (Naruhiko Nishino, closes #5291)
+Files:	    runtime/doc/popup.txt, src/beval.c, src/buffer.c, src/change.c,
+            src/drawline.c, src/drawscreen.c, src/edit.c, src/eval.c,
+            src/evalbuffer.c, src/evalfunc.c, src/evalwindow.c, src/ex_cmds.c,
+            src/ex_docmd.c, src/feature.h, src/fileio.c, src/getchar.c,
+            src/globals.h, src/gui.c, src/gui_w32.c, src/indent.c,
+            src/insexpand.c, src/macros.h, src/main.c, src/memline.c,
+            src/misc2.c, src/mouse.c, src/move.c, src/ops.c, src/option.h,
+            src/optiondefs.h, src/optionstr.c, src/popupmenu.c,
+            src/popupwin.c, src/proto.h, src/screen.c, src/search.c,
+            src/sign.c, src/structs.h, src/tag.c, src/testdir/runtest.vim,
+            src/testdir/test_execute_func.vim, src/testdir/test_popupwin.vim,
+            src/testdir/test_popupwin_textprop.vim, src/textprop.c, src/ui.c,
+            src/version.c, src/vim.h, src/window.c
+
+Patch 8.1.2372
+Problem:    VMS: failing realloc leaks memory. (Chakshu Gupta)
+Solution:   Free the memory. (partly fixes #5292)
+Files:	    src/os_vms.c
+
+Patch 8.1.2373
+Problem:    Cannot build with +popupwin but without +quickfix. (John Marriott)
+Solution:   Adjust #ifdefs.
+Files:	    src/ex_cmds.c, src/popupmenu.c, src/popupwin.c, src/fileio.c,
+            src/testdir/test_compiler.vim, src/testdir/test_tagjump.vim,
+            src/testdir/test86.in, src/testdir/test87.in,
+            src/testdir/test_autocmd.vim, src/testdir/test_bufwintabinfo.vim,
+            src/testdir/test_channel.vim, src/testdir/test_edit.vim,
+            src/testdir/test_execute_func.vim,
+            src/testdir/test_filter_cmd.vim, src/testdir/test_gui.vim,
+            src/testdir/test_makeencoding.vim, src/testdir/test_mksession.vim,
+            src/testdir/test_normal.vim, src/testdir/test_popup.vim,
+            src/testdir/test_popupwin.vim, src/testdir/test_preview.vim,
+            src/testdir/test_startup.vim, src/testdir/test_statusline.vim,
+            src/testdir/test_tabpage.vim, src/testdir/test_window_cmd.vim,
+            src/testdir/test_window_id.vim
+
+Patch 8.1.2374
+Problem:    Unused parts of libvterm are included.
+Solution:   Delete the unused files.
+Files:	    Filelist, src/libvterm/bin/vterm-ctrl.c,
+            src/libvterm/bin/unterm.c, src/libvterm/bin/vterm-dump.c
+
+Patch 8.1.2375
+Problem:    No sufficient testing for registers.
+Solution:   Add more test cases. (Yegappan Lakshmanan, closes #5296)
+            Fix that "p" on last virtual column of tab inserts spaces.
+Files:	    src/register.c, src/testdir/test_registers.vim,
+            src/testdir/test_virtualedit.vim, src/testdir/test_visual.vim
+
+Patch 8.1.2376
+Problem:    Preprocessor indents are incorrect.
+Solution:   Fix the indents. (Ken Takata, closes #5298)
+Files:	    src/drawline.c, src/gui_w32.c src/os_mswin.c src/os_win32.c
+            src/proto.h
+
+Patch 8.1.2377
+Problem:    GUI: when losing focus a pending operator is executed.
+Solution:   Do not execute an operator when getting K_IGNORE. (closes #5300)
+Files:	    src/normal.c
+
+Patch 8.1.2378
+Problem:    Using old C style comments.
+Solution:   Use // comments where appropriate.
+Files:	    src/dict.c, src/diff.c, src/digraph.c, src/dosinst.c, src/edit.c,
+            src/eval.c, src/evalbuffer.c, src/evalfunc.c
+
+Patch 8.1.2379
+Problem:    Using old C style comments.
+Solution:   Use // comments where appropriate.
+Files:	    src/ex_cmds.c, src/ex_cmds2.c, src/ex_docmd.c, src/ex_eval.c,
+            src/ex_getln.c, src/fileio.c, src/filepath.c, src/findfile.c,
+            src/fold.c
+
+Patch 8.1.2380
+Problem:    Using old C style comments.
+Solution:   Use // comments where appropriate.
+Files:	    src/getchar.c, src/gui.c, src/gui_at_fs.c, src/gui_at_sb.c,
+            src/gui_athena.c, src/gui_beval.c, src/gui_gtk.c, src/gui_gtk_f.c,
+            src/gui_gtk_x11.c
+
+Patch 8.1.2381
+Problem:    Not all register related code is covered by tests.
+Solution:   Add more test cases. (Yegappan Lakshmanan, closes #5301)
+Files:	    src/testdir/test_marks.vim, src/testdir/test_registers.vim,
+            src/testdir/test_virtualedit.vim
+
+Patch 8.1.2382
+Problem:    MS-Windows: When using VTP bold+inverse doesn't work.
+Solution:   Compare with the default colors. (Nobuhiro Takasaki, closes #5303)
+Files:	    src/os_win32.c, src/proto/os_win32.pro, src/screen.c
+
+Patch 8.1.2383
+Problem:    Using old C style comments.
+Solution:   Use // comments where appropriate.
+Files:	    src/gui_mac.c, src/gui_motif.c, src/gui_photon.c, src/gui_w32.c,
+            src/gui_x11.c, src/gui_xmdlg.c, src/gui_xmebw.c
+
+Patch 8.1.2384
+Problem:    Test 48 is old style.
+Solution:   Merge test cases into new style test. (Yegappan Lakshmanan,
+            closes #5307)
+Files:	    src/Makefile, src/testdir/Make_all.mak, src/testdir/Make_vms.mms,
+            src/testdir/test48.in, src/testdir/test48.ok,
+            src/testdir/test_virtualedit.vim
+
+Patch 8.1.2385
+Problem:    Opening cmdline window with feedkeys() does not work. (Yegappan
+            Lakshmanan)
+Solution:   Recognize K_CMDWIN also when ex_normal_busy is set.
+Files:	    src/ex_getln.c, src/testdir/test_cmdline.vim
+
+Patch 8.1.2386
+Problem:    'wincolor' is not used for 'listchars'.
+Solution:   Combine the colors. (closes #5308)
+Files:	    src/drawline.c, src/testdir/test_highlight.vim,
+            src/testdir/dumps/Test_wincolor_lcs.dump
+
+Patch 8.1.2387
+Problem:    Using old C style comments.
+Solution:   Use // comments where appropriate.
+Files:	    src/hardcopy.c, src/hashtab.c, src/if_cscope.c, src/if_lua.c,
+            src/if_mzsch.c, src/if_perlsfio.c, src/if_python.c,
+            src/if_python3.c, src/if_ruby.c, src/if_tcl.c, src/if_xcmdsrv.c
+
+Patch 8.1.2388
+Problem:    Using old C style comments.
+Solution:   Use // comments where appropriate.
+Files:	    src/json.c, src/json_test.c, src/kword_test.c, src/list.c,
+            src/main.c, src/mark.c, src/mbyte.c, src/memfile.c,
+            src/memfile_test.c, src/memline.c, src/menu.c
+
+Patch 8.1.2389
+Problem:    Using old C style comments.
+Solution:   Use // comments where appropriate.
+Files:	    src/libvterm/src/screen.c, src/libvterm/src/unicode.c,
+            src/libvterm/src/vterm.c, src/libvterm/t/harness.c,
+            src/libvterm/include/vterm.h, src/xdiff/xdiffi.c,
+            src/xdiff/xemit.c, src/xdiff/xhistogram.c, src/xdiff/xpatience.c,
+            src/xdiff/xutils.c, src/xdiff/xdiff.h, src/xdiff/xdiffi.h,
+            src/xdiff/xemit.h, src/xdiff/xinclude.h, src/xdiff/xmacros.h,
+            src/xdiff/xprepare.h, src/xdiff/xtypes.h, src/xdiff/xutils.h
+
 
  vim:tw=78:ts=8:noet:ft=help:norl:
--- a/runtime/ftplugin/git.vim
+++ b/runtime/ftplugin/git.vim
@@ -1,7 +1,7 @@
 " Vim filetype plugin
 " Language:	generic git output
 " Maintainer:	Tim Pope <vimNOSPAM@tpope.org>
-" Last Change:	2016 Aug 29
+" Last Change:	2019 Dec 05
 
 " Only do this when not done yet for this buffer
 if (exists("b:did_ftplugin"))
@@ -10,7 +10,7 @@ endif
 let b:did_ftplugin = 1
 
 if !exists('b:git_dir')
-  if expand('%:p') =~# '[\/]\.git[\/]modules[\/]'
+  if expand('%:p') =~# '[\/]\.git[\/]modules[\/]\|:[\/][\/]\|^\a\a\+:'
     " Stay out of the way
   elseif expand('%:p') =~# '[\/]\.git[\/]worktrees'
     let b:git_dir = matchstr(expand('%:p'),'.*\.git[\/]worktrees[\/][^\/]\+\>')
--- a/runtime/ftplugin/gitcommit.vim
+++ b/runtime/ftplugin/gitcommit.vim
@@ -1,7 +1,7 @@
 " Vim filetype plugin
 " Language:	git commit file
 " Maintainer:	Tim Pope <vimNOSPAM@tpope.org>
-" Last Change:	2016 Aug 29
+" Last Change:	2019 Dec 05
 
 " Only do this when not done yet for this buffer
 if (exists("b:did_ftplugin"))
@@ -13,8 +13,10 @@ let b:did_ftplugin = 1
 
 setlocal comments=:# commentstring=#\ %s
 setlocal nomodeline tabstop=8 formatoptions+=tl textwidth=72
-setlocal formatoptions-=c formatoptions-=r formatoptions-=o formatoptions-=q
-let b:undo_ftplugin = 'setl modeline< tabstop< formatoptions< tw< com< cms<'
+setlocal formatoptions-=c formatoptions-=r formatoptions-=o formatoptions-=q formatoptions+=n
+setlocal formatlistpat+=\\\|^\\s*[-*+]\\s\\+
+
+let b:undo_ftplugin = 'setl modeline< tabstop< formatoptions< tw< com< cms< formatlistpat<'
 
 if exists("g:no_gitcommit_commands") || v:version < 700
   finish
--- a/runtime/ftplugin/gitrebase.vim
+++ b/runtime/ftplugin/gitrebase.vim
@@ -1,7 +1,7 @@
 " Vim filetype plugin
 " Language:	git rebase --interactive
 " Maintainer:	Tim Pope <vimNOSPAM@tpope.org>
-" Last Change:	2016 Aug 29
+" Last Change:	2019 Dec 05
 
 " Only do this when not done yet for this buffer
 if (exists("b:did_ftplugin"))
@@ -18,27 +18,31 @@ if !exists("b:undo_ftplugin")
 endif
 let b:undo_ftplugin = b:undo_ftplugin."|setl com< cms< fo< ml<"
 
-function! s:choose(word)
+function! s:choose(word) abort
   s/^\(\w\+\>\)\=\(\s*\)\ze\x\{4,40\}\>/\=(strlen(submatch(1)) == 1 ? a:word[0] : a:word) . substitute(submatch(2),'^$',' ','')/e
 endfunction
 
-function! s:cycle()
-  call s:choose(get({'s':'edit','p':'squash','e':'reword','r':'fixup'},getline('.')[0],'pick'))
+function! s:cycle(count) abort
+  let words = ['pick', 'edit', 'fixup', 'squash', 'reword', 'drop']
+  let index = index(map(copy(words), 'v:val[0]'), getline('.')[0])
+  let index = ((index < 0 ? 0 : index) + 10000 * len(words) + a:count) % len(words)
+  call s:choose(words[index])
 endfunction
 
-command! -buffer -bar Pick   :call s:choose('pick')
-command! -buffer -bar Squash :call s:choose('squash')
-command! -buffer -bar Edit   :call s:choose('edit')
-command! -buffer -bar Reword :call s:choose('reword')
-command! -buffer -bar Fixup  :call s:choose('fixup')
-command! -buffer -bar Cycle  :call s:cycle()
-" The above are more useful when they are mapped; for example:
-"nnoremap <buffer> <silent> S :Cycle<CR>
+command! -buffer -bar -range Pick   :<line1>,<line2>call s:choose('pick')
+command! -buffer -bar -range Squash :<line1>,<line2>call s:choose('squash')
+command! -buffer -bar -range Edit   :<line1>,<line2>call s:choose('edit')
+command! -buffer -bar -range Reword :<line1>,<line2>call s:choose('reword')
+command! -buffer -bar -range Fixup  :<line1>,<line2>call s:choose('fixup')
+command! -buffer -bar -range Drop   :<line1>,<line2>call s:choose('drop')
+command! -buffer -count=1 -bar -bang Cycle call s:cycle(<bang>0 ? -<count> : <count>)
 
 if exists("g:no_plugin_maps") || exists("g:no_gitrebase_maps")
   finish
 endif
 
 nnoremap <buffer> <expr> K col('.') < 7 && expand('<Lt>cword>') =~ '\X' && getline('.') =~ '^\w\+\s\+\x\+\>' ? 'wK' : 'K'
+nnoremap <buffer> <silent> <C-A> :<C-U><C-R>=v:count1<CR>Cycle<CR>
+nnoremap <buffer> <silent> <C-X> :<C-U><C-R>=v:count1<CR>Cycle!<CR>
 
-let b:undo_ftplugin = b:undo_ftplugin . "|nunmap <buffer> K"
+let b:undo_ftplugin = b:undo_ftplugin . "|exe 'nunmap <buffer> K'|exe 'nunmap <buffer> <C-A>'|exe 'nunmap <buffer> <C-X>'"
--- a/runtime/ftplugin/haml.vim
+++ b/runtime/ftplugin/haml.vim
@@ -1,7 +1,7 @@
 " Vim filetype plugin
 " Language:	Haml
 " Maintainer:	Tim Pope <vimNOSPAM@tpope.org>
-" Last Change:	2016 Aug 29
+" Last Change:	2019 Dec 05
 
 " Only do this when not done yet for this buffer
 if exists("b:did_ftplugin")
@@ -37,6 +37,8 @@ endif
 runtime! ftplugin/ruby.vim ftplugin/ruby_*.vim ftplugin/ruby/*.vim
 let b:did_ftplugin = 1
 
+let &l:define .= empty(&l:define ? '' : '\|') . '^\s*\%(%\w*\)\=\%(\.[[:alnum:]_-]\+\)*#'
+
 " Combine the new set of values with those previously included.
 if exists("b:undo_ftplugin")
   let s:undo_ftplugin = b:undo_ftplugin . " | " . s:undo_ftplugin
@@ -60,7 +62,7 @@ endif
 
 setlocal comments= commentstring=-#\ %s
 
-let b:undo_ftplugin = "setl cms< com< "
+let b:undo_ftplugin = "setl def< cms< com< "
       \ " | unlet! b:browsefilter b:match_words | " . s:undo_ftplugin
 
 let &cpo = s:save_cpo
--- a/runtime/ftplugin/markdown.vim
+++ b/runtime/ftplugin/markdown.vim
@@ -1,7 +1,7 @@
 " Vim filetype plugin
 " Language:		Markdown
 " Maintainer:		Tim Pope <vimNOSPAM@tpope.org>
-" Last Change:		2016 Aug 29
+" Last Change:		2019 Dec 05
 
 if exists("b:did_ftplugin")
   finish
@@ -9,7 +9,7 @@ endif
 
 runtime! ftplugin/html.vim ftplugin/html_*.vim ftplugin/html/*.vim
 
-setlocal comments=fb:*,fb:-,fb:+,n:> commentstring=>\ %s
+setlocal comments=fb:*,fb:-,fb:+,n:> commentstring=<!--%s-->
 setlocal formatoptions+=tcqln formatoptions-=r formatoptions-=o
 setlocal formatlistpat=^\\s*\\d\\+\\.\\s\\+\\\|^[-*+]\\s\\+\\\|^\\[^\\ze[^\\]]\\+\\]:
 
@@ -19,32 +19,56 @@ else
   let b:undo_ftplugin = "setl cms< com< fo< flp<"
 endif
 
-function! MarkdownFold()
+function! s:NotCodeBlock(lnum) abort
+  return synIDattr(synID(v:lnum, 1, 1), 'name') !=# 'markdownCode'
+endfunction
+
+function! MarkdownFold() abort
   let line = getline(v:lnum)
 
-  " Regular headers
-  let depth = match(line, '\(^#\+\)\@<=\( .*$\)\@=')
-  if depth > 0
-    return ">" . depth
+  if line =~# '^#\+ ' && s:NotCodeBlock(v:lnum)
+    return ">" . match(line, ' ')
   endif
 
-  " Setext style headings
   let nextline = getline(v:lnum + 1)
-  if (line =~ '^.\+$') && (nextline =~ '^=\+$')
+  if (line =~ '^.\+$') && (nextline =~ '^=\+$') && s:NotCodeBlock(v:lnum + 1)
     return ">1"
   endif
 
-  if (line =~ '^.\+$') && (nextline =~ '^-\+$')
+  if (line =~ '^.\+$') && (nextline =~ '^-\+$') && s:NotCodeBlock(v:lnum + 1)
     return ">2"
   endif
 
   return "="
 endfunction
 
+function! s:HashIndent(lnum) abort
+  let hash_header = matchstr(getline(a:lnum), '^#\{1,6}')
+  if len(hash_header)
+    return hash_header
+  else
+    let nextline = getline(a:lnum + 1)
+    if nextline =~# '^=\+\s*$'
+      return '#'
+    elseif nextline =~# '^-\+\s*$'
+      return '##'
+    endif
+  endif
+endfunction
+
+function! MarkdownFoldText() abort
+  let hash_indent = s:HashIndent(v:foldstart)
+  let title = substitute(getline(v:foldstart), '^#\+\s*', '', '')
+  let foldsize = (v:foldend - v:foldstart + 1)
+  let linecount = '['.foldsize.' lines]'
+  return hash_indent.' '.title.' '.linecount
+endfunction
+
 if has("folding") && exists("g:markdown_folding")
   setlocal foldexpr=MarkdownFold()
   setlocal foldmethod=expr
-  let b:undo_ftplugin .= " foldexpr< foldmethod<"
+  setlocal foldtext=MarkdownFoldText()
+  let b:undo_ftplugin .= " foldexpr< foldmethod< foldtext<"
 endif
 
 " vim:set sw=2:
--- a/runtime/ftplugin/sass.vim
+++ b/runtime/ftplugin/sass.vim
@@ -1,7 +1,7 @@
 " Vim filetype plugin
 " Language:	Sass
 " Maintainer:	Tim Pope <vimNOSPAM@tpope.org>
-" Last Change:	2016 Aug 29
+" Last Change:	2019 Dec 05
 
 " Only do this when not done yet for this buffer
 if exists("b:did_ftplugin")
@@ -13,11 +13,25 @@ let b:undo_ftplugin = "setl com< cms< de
 
 setlocal comments=://
 setlocal commentstring=//\ %s
-setlocal define=^\\s*\\%(@mixin\\\|=\\)
-setlocal includeexpr=substitute(v:fname,'\\%(.*/\\\|^\\)\\zs','_','')
+setlocal includeexpr=SassIncludeExpr(v:fname)
 setlocal omnifunc=csscomplete#CompleteCSS
 setlocal suffixesadd=.sass,.scss,.css
+if &filetype =~# '\<s[ac]ss]\>'
+  setlocal iskeyword+=-
+  setlocal iskeyword+=$
+  setlocal iskeyword+=%
+  let b:undo_ftplugin .= ' isk<'
+endif
 
+let &l:define = '^\C\v\s*%(\@function|\@mixin|\=)|^\s*%(\$[[:alnum:]-]+:|[%.][:alnum:]-]+\s*%(\{|$))@='
 let &l:include = '^\s*@import\s\+\%(url(\)\=["'']\='
 
+function! SassIncludeExpr(file) abort
+  let partial = substitute(a:file, '\%(.*/\|^\)\zs', '_', '')
+  if !empty(findfile(partial))
+    return partial
+  endif
+  return a:file
+endfunction
+
 " vim:set sw=2:
--- a/runtime/indent/haml.vim
+++ b/runtime/indent/haml.vim
@@ -1,7 +1,7 @@
 " Vim indent file
 " Language:	Haml
 " Maintainer:	Tim Pope <vimNOSPAM@tpope.org>
-" Last Change:	2017 Jun 13
+" Last Change:	2019 Dec 05
 
 if exists("b:did_indent")
   finish
@@ -10,7 +10,7 @@ runtime! indent/ruby.vim
 unlet! b:did_indent
 let b:did_indent = 1
 
-setlocal autoindent sw=2 et
+setlocal autoindent
 setlocal indentexpr=GetHamlIndent()
 setlocal indentkeys=o,O,*<Return>,},],0),!^F,=end,=else,=elsif,=rescue,=ensure,=when
 
--- a/runtime/syntax/git.vim
+++ b/runtime/syntax/git.vim
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:	generic git output
 " Maintainer:	Tim Pope <vimNOSPAM@tpope.org>
-" Last Change:	2010 May 21
+" Last Change:	2019 Dec 05
 
 if exists("b:current_syntax")
   finish
@@ -13,7 +13,7 @@ syn sync minlines=50
 syn include @gitDiff syntax/diff.vim
 
 syn region gitHead start=/\%^/ end=/^$/
-syn region gitHead start=/\%(^commit \x\{40\}\%(\s*(.*)\)\=$\)\@=/ end=/^$/
+syn region gitHead start=/\%(^commit\%( \x\{40\}\)\{1,\}\%(\s*(.*)\)\=$\)\@=/ end=/^$/
 
 " For git reflog and git show ...^{tree}, avoid sync issues
 syn match gitHead /^\d\{6\} \%(\w\{4} \)\=\x\{40\}\%( [0-3]\)\=\t.*/
@@ -25,12 +25,14 @@ syn region gitDiff start=/^\%(@@ -\)\@=/
 syn region gitDiffMerge start=/^\%(diff --\%(cc\|combined\) \)\@=/ end=/^\%(diff --\|$\)\@=/ contains=@gitDiff
 syn region gitDiffMerge start=/^\%(@@@@* -\)\@=/ end=/^\%(diff --\|$\)\@=/ contains=@gitDiff
 syn match gitDiffAdded "^ \++.*" contained containedin=gitDiffMerge
+syn match gitDiffAdded "{+.*+}" contained containedin=gitDiff
 syn match gitDiffRemoved "^ \+-.*" contained containedin=gitDiffMerge
+syn match gitDiffRemoved "\[-.*-\]" contained containedin=gitDiff
 
 syn match  gitKeyword /^\%(object\|type\|tag\|commit\|tree\|parent\|encoding\)\>/ contained containedin=gitHead nextgroup=gitHash,gitType skipwhite
 syn match  gitKeyword /^\%(tag\>\|ref:\)/ contained containedin=gitHead nextgroup=gitReference skipwhite
 syn match  gitKeyword /^Merge:/  contained containedin=gitHead nextgroup=gitHashAbbrev skipwhite
-syn match  gitMode    /^\d\{6\}/ contained containedin=gitHead nextgroup=gitType,gitHash skipwhite
+syn match  gitMode    /^\d\{6\}\>/ contained containedin=gitHead nextgroup=gitType,gitHash skipwhite
 syn match  gitIdentityKeyword /^\%(author\|committer\|tagger\)\>/ contained containedin=gitHead nextgroup=gitIdentity skipwhite
 syn match  gitIdentityHeader /^\%(Author\|Commit\|Tagger\):/ contained containedin=gitHead nextgroup=gitIdentity skipwhite
 syn match  gitDateHeader /^\%(AuthorDate\|CommitDate\|Date\):/ contained containedin=gitHead nextgroup=gitDate skipwhite
--- a/runtime/syntax/gitcommit.vim
+++ b/runtime/syntax/gitcommit.vim
@@ -2,7 +2,7 @@
 " Language:	git commit file
 " Maintainer:	Tim Pope <vimNOSPAM@tpope.org>
 " Filenames:	*.git/COMMIT_EDITMSG
-" Last Change:	2016 Aug 29
+" Last Change:	2019 Dec 05
 
 if exists("b:current_syntax")
   finish
@@ -18,11 +18,18 @@ endif
 syn include @gitcommitDiff syntax/diff.vim
 syn region gitcommitDiff start=/\%(^diff --\%(git\|cc\|combined\) \)\@=/ end=/^\%(diff --\|$\|#\)\@=/ fold contains=@gitcommitDiff
 
-syn match   gitcommitFirstLine	"\%^[^#].*"  nextgroup=gitcommitBlank skipnl
-syn match   gitcommitSummary	"^.\{0,50\}" contained containedin=gitcommitFirstLine nextgroup=gitcommitOverflow contains=@Spell
+syn match   gitcommitSummary	"^.*\%<51v." contained containedin=gitcommitFirstLine nextgroup=gitcommitOverflow contains=@Spell
 syn match   gitcommitOverflow	".*" contained contains=@Spell
 syn match   gitcommitBlank	"^[^#].*" contained contains=@Spell
-syn match   gitcommitComment	"^#.*"
+
+if get(g:, "gitcommit_cleanup") is# "scissors"
+  syn match gitcommitFirstLine	"\%^.*" nextgroup=gitcommitBlank skipnl
+  syn region gitcommitComment start=/^# -\+ >8 -\+$/ end=/\%$/ contains=gitcommitDiff
+else
+  syn match gitcommitFirstLine	"\%^[^#].*" nextgroup=gitcommitBlank skipnl
+  syn match gitcommitComment	"^#.*"
+endif
+
 syn match   gitcommitHead	"^\%(#   .*\n\)\+#$" contained transparent
 syn match   gitcommitOnBranch	"\%(^# \)\@<=On branch" contained containedin=gitcommitComment nextgroup=gitcommitBranch skipwhite
 syn match   gitcommitOnBranch	"\%(^# \)\@<=Your branch .\{-\} '" contained containedin=gitcommitComment nextgroup=gitcommitBranch skipwhite
--- a/runtime/syntax/gitconfig.vim
+++ b/runtime/syntax/gitconfig.vim
@@ -2,24 +2,22 @@
 " Language:	git config file
 " Maintainer:	Tim Pope <vimNOSPAM@tpope.org>
 " Filenames:	gitconfig, .gitconfig, *.git/config
-" Last Change:	2019 Sep 27
+" Last Change:	2019 Dec 05
 
 if exists("b:current_syntax")
   finish
 endif
 
-setlocal iskeyword+=-
-setlocal iskeyword-=_
 syn case ignore
 syn sync minlines=10
 
 syn match   gitconfigComment	"[#;].*" contains=@Spell
 syn match   gitconfigSection	"\%(^\s*\)\@<=\[[a-z0-9.-]\+\]"
 syn match   gitconfigSection	'\%(^\s*\)\@<=\[[a-z0-9.-]\+ \+\"\%([^\\"]\|\\.\)*"\]'
-syn match   gitconfigVariable	 "\%(^\s*\)\@<=\a\k*\%(\s*\%([=#;]\|$\)\)\@=" nextgroup=gitconfigAssignment skipwhite
+syn match   gitconfigVariable	"\%(^\s*\)\@<=\a[a-z0-9-]*\%(\s*\%([=#;]\|$\)\)\@=" nextgroup=gitconfigAssignment skipwhite
 syn region  gitconfigAssignment  matchgroup=gitconfigNone start=+=\s*+ skip=+\\+ end=+\s*$+ contained contains=gitconfigBoolean,gitconfigNumber,gitConfigString,gitConfigEscape,gitConfigError,gitconfigComment keepend
 syn keyword gitconfigBoolean true false yes no contained
-syn match   gitconfigNumber  "\d\+" contained
+syn match   gitconfigNumber  "\<\d\+\>" contained
 syn region  gitconfigString  matchgroup=gitconfigDelim start=+"+ skip=+\\+ end=+"+ matchgroup=gitconfigError end=+[^\\"]\%#\@!$+ contained contains=gitconfigEscape,gitconfigEscapeError
 syn match   gitconfigError  +\\.+	 contained
 syn match   gitconfigEscape +\\[\\"ntb]+ contained
@@ -32,7 +30,7 @@ hi def link gitconfigBoolean		Boolean
 hi def link gitconfigNumber		Number
 hi def link gitconfigString		String
 hi def link gitconfigDelim		Delimiter
-hi def link gitconfigEscape		Delimiter
+hi def link gitconfigEscape		Special
 hi def link gitconfigError		Error
 
 let b:current_syntax = "gitconfig"
--- a/runtime/syntax/gitrebase.vim
+++ b/runtime/syntax/gitrebase.vim
@@ -2,7 +2,7 @@
 " Language:	git rebase --interactive
 " Maintainer:	Tim Pope <vimNOSPAM@tpope.org>
 " Filenames:	git-rebase-todo
-" Last Change:	2016 Aug 29
+" Last Change:	2019 Dec 05
 
 if exists("b:current_syntax")
   finish
@@ -10,31 +10,48 @@ endif
 
 syn case match
 
-syn match   gitrebaseHash   "\v<\x{7,40}>"                             contained
-syn match   gitrebaseCommit "\v<\x{7,40}>"  nextgroup=gitrebaseSummary skipwhite
+syn match   gitrebaseHash   "\v<\x{7,}>"                               contained
+syn match   gitrebaseCommit "\v<\x{7,}>"    nextgroup=gitrebaseSummary skipwhite
 syn match   gitrebasePick   "\v^p%(ick)=>"   nextgroup=gitrebaseCommit skipwhite
 syn match   gitrebaseReword "\v^r%(eword)=>" nextgroup=gitrebaseCommit skipwhite
 syn match   gitrebaseEdit   "\v^e%(dit)=>"   nextgroup=gitrebaseCommit skipwhite
 syn match   gitrebaseSquash "\v^s%(quash)=>" nextgroup=gitrebaseCommit skipwhite
 syn match   gitrebaseFixup  "\v^f%(ixup)=>"  nextgroup=gitrebaseCommit skipwhite
 syn match   gitrebaseExec   "\v^%(x|exec)>" nextgroup=gitrebaseCommand skipwhite
+syn match   gitrebaseBreak  "\v^b%(reak)=>"
 syn match   gitrebaseDrop   "\v^d%(rop)=>"   nextgroup=gitrebaseCommit skipwhite
+syn match   gitrebaseNoop   "\v^noop>"
+syn match   gitrebaseMerge  "\v^m(erge)=>"   nextgroup=gitrebaseMergeOption,gitrebaseName skipwhite
+syn match   gitrebaseLabel  "\v^l(abel)=>"   nextgroup=gitrebaseName skipwhite
+syn match   gitrebaseReset  "\v^r(eset)=>"   nextgroup=gitrebaseName skipwhite
 syn match   gitrebaseSummary ".*"               contains=gitrebaseHash contained
 syn match   gitrebaseCommand ".*"                                      contained
-syn match   gitrebaseComment "^#.*"             contains=gitrebaseHash
+syn match   gitrebaseComment "^\s*#.*"             contains=gitrebaseHash
 syn match   gitrebaseSquashError "\v%^%(s%(quash)=>|f%(ixup)=>)" nextgroup=gitrebaseCommit skipwhite
+syn match   gitrebaseMergeOption "\v-[Cc]>"  nextgroup=gitrebaseMergeCommit skipwhite contained
+syn match   gitrebaseMergeCommit "\v<\x{7,}>"  nextgroup=gitrebaseName skipwhite contained
+syn match   gitrebaseName        "\v[^[:space:].*?i:^~/-]\S+" nextgroup=gitrebaseMergeComment skipwhite contained
+syn match   gitrebaseMergeComment "#"  nextgroup=gitrebaseSummary skipwhite contained
 
 hi def link gitrebaseCommit         gitrebaseHash
 hi def link gitrebaseHash           Identifier
-hi def link gitrebasePick           Statement
-hi def link gitrebaseReword         Number
+hi def link gitrebasePick           Type
+hi def link gitrebaseReword         Conditional
 hi def link gitrebaseEdit           PreProc
-hi def link gitrebaseSquash         Type
-hi def link gitrebaseFixup          Special
-hi def link gitrebaseExec           Function
+hi def link gitrebaseSquash         Statement
+hi def link gitrebaseFixup          Repeat
+hi def link gitrebaseExec           Operator
+hi def link gitrebaseBreak          Macro
 hi def link gitrebaseDrop           Comment
+hi def link gitrebaseNoop           Comment
+hi def link gitrebaseMerge          Exception
+hi def link gitrebaseLabel          Label
+hi def link gitrebaseReset          Keyword
 hi def link gitrebaseSummary        String
 hi def link gitrebaseComment        Comment
 hi def link gitrebaseSquashError    Error
+hi def link gitrebaseMergeCommit    gitrebaseCommit
+hi def link gitrebaseMergeComment   gitrebaseComment
+hi def link gitrebaseName           Tag
 
 let b:current_syntax = "gitrebase"
--- a/runtime/syntax/haml.vim
+++ b/runtime/syntax/haml.vim
@@ -2,7 +2,7 @@
 " Language:	Haml
 " Maintainer:	Tim Pope <vimNOSPAM@tpope.org>
 " Filenames:	*.haml
-" Last Change:	2016 Aug 29
+" Last Change:	2019 Dec 05
 
 if exists("b:current_syntax")
   finish
@@ -38,7 +38,7 @@ syn match   hamlDespacer "[<>]" containe
 syn match   hamlSelfCloser "/" contained
 syn match   hamlClassChar "\." contained nextgroup=hamlClass
 syn match   hamlIdChar "#{\@!" contained nextgroup=hamlId
-syn match   hamlClass "\%(\w\|-\)\+" contained nextgroup=@hamlComponent
+syn match   hamlClass "\%(\w\|-\|\:\)\+" contained nextgroup=@hamlComponent
 syn match   hamlId    "\%(\w\|-\)\+" contained nextgroup=@hamlComponent
 syn region  hamlDocType start="^\s*!!!" end="$"
 
--- a/runtime/syntax/markdown.vim
+++ b/runtime/syntax/markdown.vim
@@ -2,7 +2,7 @@
 " Language:     Markdown
 " Maintainer:   Tim Pope <vimNOSPAM@tpope.org>
 " Filenames:    *.markdown
-" Last Change:  2016 Aug 29
+" Last Change:  2019 Dec 05
 
 if exists("b:current_syntax")
   finish
@@ -18,37 +18,46 @@ unlet! b:current_syntax
 if !exists('g:markdown_fenced_languages')
   let g:markdown_fenced_languages = []
 endif
+let s:done_include = {}
 for s:type in map(copy(g:markdown_fenced_languages),'matchstr(v:val,"[^=]*$")')
+  if has_key(s:done_include, matchstr(s:type,'[^.]*'))
+    continue
+  endif
   if s:type =~ '\.'
     let b:{matchstr(s:type,'[^.]*')}_subtype = matchstr(s:type,'\.\zs.*')
   endif
   exe 'syn include @markdownHighlight'.substitute(s:type,'\.','','g').' syntax/'.matchstr(s:type,'[^.]*').'.vim'
   unlet! b:current_syntax
+  let s:done_include[matchstr(s:type,'[^.]*')] = 1
 endfor
 unlet! s:type
+unlet! s:done_include
 
-syn sync minlines=10
+if !exists('g:markdown_minlines')
+  let g:markdown_minlines = 50
+endif
+execute 'syn sync minlines=' . g:markdown_minlines
 syn case ignore
 
-syn match markdownValid '[<>]\c[a-z/$!]\@!'
-syn match markdownValid '&\%(#\=\w*;\)\@!'
+syn match markdownValid '[<>]\c[a-z/$!]\@!' transparent contains=NONE
+syn match markdownValid '&\%(#\=\w*;\)\@!' transparent contains=NONE
 
 syn match markdownLineStart "^[<@]\@!" nextgroup=@markdownBlock,htmlSpecialChar
 
 syn cluster markdownBlock contains=markdownH1,markdownH2,markdownH3,markdownH4,markdownH5,markdownH6,markdownBlockquote,markdownListMarker,markdownOrderedListMarker,markdownCodeBlock,markdownRule
-syn cluster markdownInline contains=markdownLineBreak,markdownLinkText,markdownItalic,markdownBold,markdownCode,markdownEscape,@htmlTop,markdownError
+syn cluster markdownInline contains=markdownLineBreak,markdownLinkText,markdownItalic,markdownBold,markdownCode,markdownEscape,@htmlTop,markdownError,markdownValid
 
 syn match markdownH1 "^.\+\n=\+$" contained contains=@markdownInline,markdownHeadingRule,markdownAutomaticLink
 syn match markdownH2 "^.\+\n-\+$" contained contains=@markdownInline,markdownHeadingRule,markdownAutomaticLink
 
 syn match markdownHeadingRule "^[=-]\+$" contained
 
-syn region markdownH1 matchgroup=markdownHeadingDelimiter start="##\@!"      end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained
-syn region markdownH2 matchgroup=markdownHeadingDelimiter start="###\@!"     end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained
-syn region markdownH3 matchgroup=markdownHeadingDelimiter start="####\@!"    end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained
-syn region markdownH4 matchgroup=markdownHeadingDelimiter start="#####\@!"   end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained
-syn region markdownH5 matchgroup=markdownHeadingDelimiter start="######\@!"  end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained
-syn region markdownH6 matchgroup=markdownHeadingDelimiter start="#######\@!" end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained
+syn region markdownH1 matchgroup=markdownH1Delimiter start="##\@!"      end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained
+syn region markdownH2 matchgroup=markdownH2Delimiter start="###\@!"     end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained
+syn region markdownH3 matchgroup=markdownH3Delimiter start="####\@!"    end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained
+syn region markdownH4 matchgroup=markdownH4Delimiter start="#####\@!"   end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained
+syn region markdownH5 matchgroup=markdownH5Delimiter start="######\@!"  end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained
+syn region markdownH6 matchgroup=markdownH6Delimiter start="#######\@!" end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained
 
 syn match markdownBlockquote ">\%(\s\|$\)" contained nextgroup=@markdownBlock
 
@@ -70,31 +79,40 @@ syn region markdownUrlTitle matchgroup=m
 syn region markdownUrlTitle matchgroup=markdownUrlTitleDelimiter start=+'+ end=+'+ keepend contained
 syn region markdownUrlTitle matchgroup=markdownUrlTitleDelimiter start=+(+ end=+)+ keepend contained
 
-syn region markdownLinkText matchgroup=markdownLinkTextDelimiter start="!\=\[\%(\_[^]]*]\%( \=[[(]\)\)\@=" end="\]\%( \=[[(]\)\@=" nextgroup=markdownLink,markdownId skipwhite contains=@markdownInline,markdownLineStart
+syn region markdownLinkText matchgroup=markdownLinkTextDelimiter start="!\=\[\%(\%(\_[^][]\|\[\_[^][]*\]\)*]\%( \=[[(]\)\)\@=" end="\]\%( \=[[(]\)\@=" nextgroup=markdownLink,markdownId skipwhite contains=@markdownInline,markdownLineStart
 syn region markdownLink matchgroup=markdownLinkDelimiter start="(" end=")" contains=markdownUrl keepend contained
 syn region markdownId matchgroup=markdownIdDelimiter start="\[" end="\]" keepend contained
 syn region markdownAutomaticLink matchgroup=markdownUrlDelimiter start="<\%(\w\+:\|[[:alnum:]_+-]\+@\)\@=" end=">" keepend oneline
 
-let s:concealends = has('conceal') ? ' concealends' : ''
-exe 'syn region markdownItalic matchgroup=markdownItalicDelimiter start="\S\@<=\*\|\*\S\@=" end="\S\@<=\*\|\*\S\@=" keepend contains=markdownLineStart' . s:concealends
-exe 'syn region markdownItalic matchgroup=markdownItalicDelimiter start="\S\@<=_\|_\S\@=" end="\S\@<=_\|_\S\@=" keepend contains=markdownLineStart' . s:concealends
-exe 'syn region markdownBold matchgroup=markdownBoldDelimiter start="\S\@<=\*\*\|\*\*\S\@=" end="\S\@<=\*\*\|\*\*\S\@=" keepend contains=markdownLineStart,markdownItalic' . s:concealends
-exe 'syn region markdownBold matchgroup=markdownBoldDelimiter start="\S\@<=__\|__\S\@=" end="\S\@<=__\|__\S\@=" keepend contains=markdownLineStart,markdownItalic' . s:concealends
-exe 'syn region markdownBoldItalic matchgroup=markdownBoldItalicDelimiter start="\S\@<=\*\*\*\|\*\*\*\S\@=" end="\S\@<=\*\*\*\|\*\*\*\S\@=" keepend contains=markdownLineStart' . s:concealends
-exe 'syn region markdownBoldItalic matchgroup=markdownBoldItalicDelimiter start="\S\@<=___\|___\S\@=" end="\S\@<=___\|___\S\@=" keepend contains=markdownLineStart' . s:concealends
+let s:concealends = ''
+if has('conceal') && get(g:, 'markdown_syntax_conceal', 1) == 1
+  let s:concealends = ' concealends'
+endif
+exe 'syn region markdownItalic matchgroup=markdownItalicDelimiter start="\S\@<=\*\|\*\S\@=" end="\S\@<=\*\|\*\S\@=" skip="\\*" contains=markdownLineStart,@Spell' . s:concealends
+exe 'syn region markdownItalic matchgroup=markdownItalicDelimiter start="\w\@<!_\S\@=" end="\S\@<=_\w\@!" skip="\\_" contains=markdownLineStart,@Spell' . s:concealends
+exe 'syn region markdownBold matchgroup=markdownBoldDelimiter start="\S\@<=\*\*\|\*\*\S\@=" end="\S\@<=\*\*\|\*\*\S\@=" skip="\\*" contains=markdownLineStart,markdownItalic,@Spell' . s:concealends
+exe 'syn region markdownBold matchgroup=markdownBoldDelimiter start="\w\@<!__\S\@=" end="\S\@<=__\w\@!" skip="\\_" contains=markdownLineStart,markdownItalic,@Spell' . s:concealends
+exe 'syn region markdownBoldItalic matchgroup=markdownBoldItalicDelimiter start="\S\@<=\*\*\*\|\*\*\*\S\@=" end="\S\@<=\*\*\*\|\*\*\*\S\@=" skip="\\*" contains=markdownLineStart,@Spell' . s:concealends
+exe 'syn region markdownBoldItalic matchgroup=markdownBoldItalicDelimiter start="\w\@<!___\S\@=" end="\S\@<=___\w\@!" skip="\\_" contains=markdownLineStart,@Spell' . s:concealends
 
 syn region markdownCode matchgroup=markdownCodeDelimiter start="`" end="`" keepend contains=markdownLineStart
 syn region markdownCode matchgroup=markdownCodeDelimiter start="`` \=" end=" \=``" keepend contains=markdownLineStart
-syn region markdownCode matchgroup=markdownCodeDelimiter start="^\s*```.*$" end="^\s*```\ze\s*$" keepend
+syn region markdownCode matchgroup=markdownCodeDelimiter start="^\s*````*.*$" end="^\s*````*\ze\s*$" keepend
 
 syn match markdownFootnote "\[^[^\]]\+\]"
 syn match markdownFootnoteDefinition "^\[^[^\]]\+\]:"
 
 if main_syntax ==# 'markdown'
+  let s:done_include = {}
   for s:type in g:markdown_fenced_languages
-    exe 'syn region markdownHighlight'.substitute(matchstr(s:type,'[^=]*$'),'\..*','','').' matchgroup=markdownCodeDelimiter start="^\s*```\s*'.matchstr(s:type,'[^=]*').'\>.*$" end="^\s*```\ze\s*$" keepend contains=@markdownHighlight'.substitute(matchstr(s:type,'[^=]*$'),'\.','','g')
+    if has_key(s:done_include, matchstr(s:type,'[^.]*'))
+      continue
+    endif
+    exe 'syn region markdownHighlight'.substitute(matchstr(s:type,'[^=]*$'),'\..*','','').' matchgroup=markdownCodeDelimiter start="^\s*````*\s*\%({.\{-}\.\)\='.matchstr(s:type,'[^=]*').'}\=\S\@!.*$" end="^\s*````*\ze\s*$" keepend contains=@markdownHighlight'.substitute(matchstr(s:type,'[^=]*$'),'\.','','g') . s:concealends
+    let s:done_include[matchstr(s:type,'[^.]*')] = 1
   endfor
   unlet! s:type
+  unlet! s:done_include
 endif
 
 syn match markdownEscape "\\[][\\`*_{}()<>#+.!-]"
@@ -107,6 +125,12 @@ hi def link markdownH4                  
 hi def link markdownH5                    htmlH5
 hi def link markdownH6                    htmlH6
 hi def link markdownHeadingRule           markdownRule
+hi def link markdownH1Delimiter           markdownHeadingDelimiter
+hi def link markdownH2Delimiter           markdownHeadingDelimiter
+hi def link markdownH3Delimiter           markdownHeadingDelimiter
+hi def link markdownH4Delimiter           markdownHeadingDelimiter
+hi def link markdownH5Delimiter           markdownHeadingDelimiter
+hi def link markdownH6Delimiter           markdownHeadingDelimiter
 hi def link markdownHeadingDelimiter      Delimiter
 hi def link markdownOrderedListMarker     markdownListMarker
 hi def link markdownListMarker            htmlTagName
--- a/runtime/syntax/sass.vim
+++ b/runtime/syntax/sass.vim
@@ -2,7 +2,7 @@
 " Language:	Sass
 " Maintainer:	Tim Pope <vimNOSPAM@tpope.org>
 " Filenames:	*.sass
-" Last Change:	2016 Aug 29
+" Last Change:	2019 Dec 05
 
 if exists("b:current_syntax")
   finish
@@ -21,8 +21,7 @@ syn match sassProperty "\%([{};]\s*\|^\)
 syn match sassProperty "^\s*\zs\s\%(\%([[:alnum:]-]\|#{[^{}]*}\)\+\s*:\|:[[:alnum:]-]\+\)"hs=s+1 contains=css.*Prop skipwhite nextgroup=sassCssAttribute
 syn match sassProperty "^\s*\zs\s\%(:\=[[:alnum:]-]\+\s*=\)"hs=s+1 contains=css.*Prop skipwhite nextgroup=sassCssAttribute
 syn match sassCssAttribute +\%("\%([^"]\|\\"\)*"\|'\%([^']\|\\'\)*'\|#{[^{}]*}\|[^{};]\)*+ contained contains=@sassCssAttributes,sassVariable,sassFunction,sassInterpolation
-syn match sassDefault "!default\>" contained
-syn match sassVariable "!\%(important\>\|default\>\)\@![[:alnum:]_-]\+"
+syn match sassFlag "!\%(default\|global\|optional\)\>" contained
 syn match sassVariable "$[[:alnum:]_-]\+"
 syn match sassVariableAssignment "\%([!$][[:alnum:]_-]\+\s*\)\@<=\%(||\)\==" nextgroup=sassCssAttribute skipwhite
 syn match sassVariableAssignment "\%([!$][[:alnum:]_-]\+\s*\)\@<=:" nextgroup=sassCssAttribute skipwhite
@@ -42,7 +41,6 @@ syn match sassMixin  "\%([{};]\s*\|^\s*\
 syn match sassMixing "^\s\+\zs+"        nextgroup=sassMixinName
 syn match sassMixing "\%([{};]\s*\|^\s*\)\@<=@include" nextgroup=sassMixinName skipwhite
 syn match sassExtend "\%([{};]\s*\|^\s*\)\@<=@extend"
-syn match sassPlaceholder "\%([{};]\s*\|^\s*\)\@<=%"   nextgroup=sassMixinName skipwhite
 
 syn match sassFunctionName "[[:alnum:]_-]\+" contained nextgroup=sassCssAttribute
 syn match sassFunctionDecl "\%([{};]\s*\|^\s*\)\@<=@function"   nextgroup=sassFunctionName skipwhite
@@ -52,6 +50,7 @@ syn match sassEscape     "^\s*\zs\\"
 syn match sassIdChar     "#[[:alnum:]_-]\@=" nextgroup=sassId
 syn match sassId         "[[:alnum:]_-]\+" contained
 syn match sassClassChar  "\.[[:alnum:]_-]\@=" nextgroup=sassClass
+syn match sassPlaceholder "\%([{};]\s*\|^\s*\)\@<=%"   nextgroup=sassClass
 syn match sassClass      "[[:alnum:]_-]\+" contained
 syn match sassAmpersand  "&"
 
@@ -75,12 +74,12 @@ syn match   sassEndOfLineComment "//.*" 
 hi def link sassEndOfLineComment        sassComment
 hi def link sassCssComment              sassComment
 hi def link sassComment                 Comment
-hi def link sassDefault                 cssImportant
+hi def link sassFlag                    cssImportant
 hi def link sassVariable                Identifier
 hi def link sassFunction                Function
 hi def link sassMixing                  PreProc
 hi def link sassMixin                   PreProc
-hi def link sassPlaceholder             PreProc
+hi def link sassPlaceholder             sassClassChar
 hi def link sassExtend                  PreProc
 hi def link sassFunctionDecl            PreProc
 hi def link sassReturn                  PreProc
--- a/runtime/syntax/scss.vim
+++ b/runtime/syntax/scss.vim
@@ -2,7 +2,7 @@
 " Language:	SCSS
 " Maintainer:	Tim Pope <vimNOSPAM@tpope.org>
 " Filenames:	*.scss
-" Last Change:	2010 Jul 26
+" Last Change:	2019 Dec 05
 
 if exists("b:current_syntax")
   finish
@@ -10,10 +10,15 @@ endif
 
 runtime! syntax/sass.vim
 
+syn clear sassComment
+syn clear sassCssComment
+syn clear sassEndOfLineComment
+
 syn match scssComment "//.*" contains=sassTodo,@Spell
-syn region scssComment start="/\*" end="\*/" contains=sassTodo,@Spell
+syn region scssCssComment start="/\*" end="\*/" contains=sassTodo,@Spell
 
-hi def link scssComment sassComment
+hi def link scssCssComment scssComment
+hi def link scssComment Comment
 
 let b:current_syntax = "scss"