From fd3f4831bec69d4096a4992d46ab62b26cc79718 Mon Sep 17 00:00:00 2001 From: David Palma Date: Wed, 24 Jul 2019 22:59:55 +0200 Subject: [PATCH 01/18] Fix for slowness due to folds (#143) --- ftplugin/markdown.vim | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/ftplugin/markdown.vim b/ftplugin/markdown.vim index 2fbdf66..39c0f8e 100644 --- a/ftplugin/markdown.vim +++ b/ftplugin/markdown.vim @@ -23,9 +23,8 @@ function! MarkdownFold() let line = getline(v:lnum) " Regular headers - let depth = match(line, '\(^#\+\)\@<=\( .*$\)\@=') - if depth > 0 - return ">" . depth + if line =~# '^#\+ ' + return ">" . match(line, ' ') endif " Setext style headings From c043a93c847dbaba96aac643df818baafa04a3e5 Mon Sep 17 00:00:00 2001 From: Thomas Faingnaert Date: Tue, 23 Jul 2019 10:26:29 +0200 Subject: [PATCH 02/18] Conceal code blocks --- syntax/markdown.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/markdown.vim b/syntax/markdown.vim index 26ba4c9..8e3c564 100644 --- a/syntax/markdown.vim +++ b/syntax/markdown.vim @@ -108,7 +108,7 @@ if main_syntax ==# 'markdown' 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') + 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 From a2e123a288a72efe3f800c3a90736f9d2e48ebea Mon Sep 17 00:00:00 2001 From: Alex Vear Date: Wed, 7 Nov 2018 11:14:12 +0000 Subject: [PATCH 03/18] Prevent the folding of heading syntax in code fences Previously in Markdown files, Vim would treat heading syntax in code fences as Markdown headers. This commit ensures that only headers will be folded by checking the 'synIDattr' of the item. E.g. The comment in this code snippet would have been treated as a Markdown header. ```sh # This is a comment echo "Hello world" ``` --- ftplugin/markdown.vim | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/ftplugin/markdown.vim b/ftplugin/markdown.vim index 39c0f8e..7cda6b1 100644 --- a/ftplugin/markdown.vim +++ b/ftplugin/markdown.vim @@ -23,23 +23,27 @@ function! MarkdownFold() let line = getline(v:lnum) " Regular headers - if line =~# '^#\+ ' + 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:NotCodeBlock(lnum) + return synIDattr(synID(v:lnum, 1, 1), 'name') !=# 'markdownCode' +endfunction + function! MarkdownFoldText() let hash_indent = s:HashIndent(v:foldstart) let title = substitute(getline(v:foldstart), '^#\+\s*', '', '') From 64689dfeae1ffa77dfa0f82e2e1f409ecac3d5ad Mon Sep 17 00:00:00 2001 From: Greg Anders Date: Thu, 10 Oct 2019 14:32:14 -0600 Subject: [PATCH 04/18] Support pandoc syntax for fenced code blocks --- syntax/markdown.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/markdown.vim b/syntax/markdown.vim index 8e3c564..488c080 100644 --- a/syntax/markdown.vim +++ b/syntax/markdown.vim @@ -108,7 +108,7 @@ if main_syntax ==# 'markdown' 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 + 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 From 5363a4d803ded5edeb8ac6542ca5e641b3f3029a Mon Sep 17 00:00:00 2001 From: Tim Pope Date: Wed, 23 Oct 2019 02:59:33 -0400 Subject: [PATCH 05/18] Allow one level of nested brackets Closes https://github.com/tpope/vim-markdown/issues/129 --- syntax/markdown.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/markdown.vim b/syntax/markdown.vim index 488c080..322a997 100644 --- a/syntax/markdown.vim +++ b/syntax/markdown.vim @@ -79,7 +79,7 @@ syn region markdownUrlTitle matchgroup=markdownUrlTitleDelimiter start=+"+ end=+ 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 From a6866ac0aafe98fd9243f6825b14e114d6c4b908 Mon Sep 17 00:00:00 2001 From: Tim Pope Date: Sat, 26 Oct 2019 18:09:00 -0400 Subject: [PATCH 06/18] Add sponsor button --- .github/FUNDING.yml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .github/FUNDING.yml diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..e2a49d1 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,2 @@ +github: tpope +custom: ["https://www.paypal.me/vimpope"] From 06a62df8a5394654c0796d30d72d22d174987c19 Mon Sep 17 00:00:00 2001 From: Tim Pope Date: Mon, 18 Nov 2019 19:45:03 -0500 Subject: [PATCH 07/18] Restrict HTML highlighting when nesting Closes https://github.com/tpope/vim-markdown/issues/148 --- syntax/markdown.vim | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/syntax/markdown.vim b/syntax/markdown.vim index 322a997..efec3eb 100644 --- a/syntax/markdown.vim +++ b/syntax/markdown.vim @@ -39,13 +39,13 @@ 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 From 1a436852acde2fc52b8d7c90ff002f8be34a9d92 Mon Sep 17 00:00:00 2001 From: Tim Pope Date: Sun, 1 Dec 2019 04:25:59 -0500 Subject: [PATCH 08/18] Clean up folding code --- ftplugin/markdown.vim | 40 ++++++++++++++++++---------------------- 1 file changed, 18 insertions(+), 22 deletions(-) diff --git a/ftplugin/markdown.vim b/ftplugin/markdown.vim index 7cda6b1..79ec151 100644 --- a/ftplugin/markdown.vim +++ b/ftplugin/markdown.vim @@ -19,15 +19,17 @@ 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 if line =~# '^#\+ ' && s:NotCodeBlock(v:lnum) return ">" . match(line, ' ') endif - " Setext style headings let nextline = getline(v:lnum + 1) if (line =~ '^.\+$') && (nextline =~ '^=\+$') && s:NotCodeBlock(v:lnum + 1) return ">1" @@ -40,11 +42,21 @@ function! MarkdownFold() return "=" endfunction -function! s:NotCodeBlock(lnum) - return synIDattr(synID(v:lnum, 1, 1), 'name') !=# 'markdownCode' +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() +function! MarkdownFoldText() abort let hash_indent = s:HashIndent(v:foldstart) let title = substitute(getline(v:foldstart), '^#\+\s*', '', '') let foldsize = (v:foldend - v:foldstart + 1) @@ -52,22 +64,6 @@ function! MarkdownFoldText() return hash_indent.' '.title.' '.linecount endfunction -function! s:HashIndent(lnum) - let hash_header = matchstr(getline(a:lnum), '^#\{1,6}') - if len(hash_header) > 0 - " hashtag header - return hash_header - else - " == or -- header - let nextline = getline(a:lnum + 1) - if nextline =~ '^=\+\s*$' - return repeat('#', 1) - elseif nextline =~ '^-\+\s*$' - return repeat('#', 2) - endif - endif -endfunction - if has("folding") && exists("g:markdown_folding") setlocal foldexpr=MarkdownFold() setlocal foldmethod=expr From 8a76c845deed501411f9fe93eec6ecb9a8f78096 Mon Sep 17 00:00:00 2001 From: Igor Mikushkin Date: Thu, 21 Nov 2019 18:27:28 +0400 Subject: [PATCH 09/18] Github flavored parsing of underscores --- syntax/markdown.vim | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/syntax/markdown.vim b/syntax/markdown.vim index efec3eb..348c500 100644 --- a/syntax/markdown.vim +++ b/syntax/markdown.vim @@ -89,11 +89,11 @@ 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\@=" keepend contains=markdownLineStart,@Spell' . s:concealends -exe 'syn region markdownItalic matchgroup=markdownItalicDelimiter start="\S\@<=_\|_\S\@=" end="\S\@<=_\|_\S\@=" keepend contains=markdownLineStart,@Spell' . s:concealends +exe 'syn region markdownItalic matchgroup=markdownItalicDelimiter start="\w\@ Date: Mon, 2 Dec 2019 08:47:20 -0500 Subject: [PATCH 10/18] Skip escaped bold/italics closer Closes https://github.com/tpope/vim-markdown/issues/102 --- syntax/markdown.vim | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/syntax/markdown.vim b/syntax/markdown.vim index 348c500..b88a3db 100644 --- a/syntax/markdown.vim +++ b/syntax/markdown.vim @@ -88,12 +88,12 @@ 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\@=" keepend contains=markdownLineStart,@Spell' . s:concealends -exe 'syn region markdownItalic matchgroup=markdownItalicDelimiter start="\w\@ Date: Thu, 12 Dec 2019 13:53:49 -0500 Subject: [PATCH 11/18] Vim 8.2 --- ftplugin/markdown.vim | 2 +- syntax/markdown.vim | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ftplugin/markdown.vim b/ftplugin/markdown.vim index 79ec151..fc1d9e0 100644 --- a/ftplugin/markdown.vim +++ b/ftplugin/markdown.vim @@ -1,7 +1,7 @@ " Vim filetype plugin " Language: Markdown " Maintainer: Tim Pope -" Last Change: 2013 May 30 +" Last Change: 2019 Dec 05 if exists("b:did_ftplugin") finish diff --git a/syntax/markdown.vim b/syntax/markdown.vim index b88a3db..0321ca3 100644 --- a/syntax/markdown.vim +++ b/syntax/markdown.vim @@ -2,7 +2,7 @@ " Language: Markdown " Maintainer: Tim Pope " Filenames: *.markdown -" Last Change: 2013 May 30 +" Last Change: 2019 Dec 05 if exists("b:current_syntax") finish From e875717243fbea38189f5590a25a05809f03672b Mon Sep 17 00:00:00 2001 From: Tim Pope Date: Thu, 12 Dec 2019 13:55:26 -0500 Subject: [PATCH 12/18] Fix closing italics Closes https://github.com/tpope/vim-markdown/issues/151 --- syntax/markdown.vim | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/syntax/markdown.vim b/syntax/markdown.vim index 0321ca3..9bc510a 100644 --- a/syntax/markdown.vim +++ b/syntax/markdown.vim @@ -88,11 +88,11 @@ 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="\S\@<=\*\|\*\S\@=" end="\S\@<=\*\|\*\S\@=" skip="\\\*" contains=markdownLineStart,@Spell' . s:concealends exe 'syn region markdownItalic matchgroup=markdownItalicDelimiter start="\w\@ Date: Thu, 30 Jan 2020 11:50:49 -0500 Subject: [PATCH 13/18] Vim 8.2.0141 --- syntax/markdown.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/markdown.vim b/syntax/markdown.vim index 9bc510a..17b61c2 100644 --- a/syntax/markdown.vim +++ b/syntax/markdown.vim @@ -2,7 +2,7 @@ " Language: Markdown " Maintainer: Tim Pope " Filenames: *.markdown -" Last Change: 2019 Dec 05 +" Last Change: 2020 Jan 14 if exists("b:current_syntax") finish From 191438f3582a532b72c9f8a1d6c0477050ccddef Mon Sep 17 00:00:00 2001 From: Tim Pope Date: Thu, 30 Jan 2020 11:52:15 -0500 Subject: [PATCH 14/18] Add [[ and ]] maps Hat tip to Joe Reynolds for the idea. --- ftplugin/markdown.vim | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/ftplugin/markdown.vim b/ftplugin/markdown.vim index fc1d9e0..d2d1e17 100644 --- a/ftplugin/markdown.vim +++ b/ftplugin/markdown.vim @@ -19,6 +19,14 @@ else let b:undo_ftplugin = "setl cms< com< fo< flp<" endif +if !exists("g:no_plugin_maps") || !exists("g:no_markdown_maps") + nnoremap [[ m':call search('^#\{1,5\}\s\+\S', "bW") + nnoremap ]] m':call search('^#\{1,5\}\s\+\S', "W") + xnoremap [[ m':exe "normal! gv"call search('^#\{1,5\}\s\+\S', "bW") + xnoremap ]] m':exe "normal! gv"call search('^#\{1,5\}\s\+\S', "W") + let b:undo_ftplugin .= '|sil! nunmap [[|sil! nunmap ]]|sil! xunmap [[|sil! xunmap ]]' +endif + function! s:NotCodeBlock(lnum) abort return synIDattr(synID(v:lnum, 1, 1), 'name') !=# 'markdownCode' endfunction From 719b046bbec79879add51b7e95415db06a394f30 Mon Sep 17 00:00:00 2001 From: Tim Pope Date: Thu, 30 Jan 2020 12:45:09 -0500 Subject: [PATCH 15/18] Don't let fenced language syntaxes change 'foldmethod' Closes https://github.com/tpope/vim-markdown/issues/154 --- syntax/markdown.vim | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/syntax/markdown.vim b/syntax/markdown.vim index 17b61c2..436d94f 100644 --- a/syntax/markdown.vim +++ b/syntax/markdown.vim @@ -15,6 +15,9 @@ endif runtime! syntax/html.vim unlet! b:current_syntax +if has('folding') + let s:foldmethod = &l:foldmethod +endif if !exists('g:markdown_fenced_languages') let g:markdown_fenced_languages = [] endif @@ -32,6 +35,9 @@ for s:type in map(copy(g:markdown_fenced_languages),'matchstr(v:val,"[^=]*$")') endfor unlet! s:type unlet! s:done_include +if exists('s:foldmethod') && s:foldmethod !=# &l:foldmethod + let &l:foldmethod = s:foldmethod +endif if !exists('g:markdown_minlines') let g:markdown_minlines = 50 From 6c4c60fbaab78f2dba481404dccc9adad519e3c2 Mon Sep 17 00:00:00 2001 From: Tim Pope Date: Thu, 30 Jan 2020 12:56:09 -0500 Subject: [PATCH 16/18] Also don't let HTML and dependent syntaxes change 'foldmethod' References https://github.com/tpope/vim-markdown/issues/154 --- syntax/markdown.vim | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/syntax/markdown.vim b/syntax/markdown.vim index 436d94f..8bf373e 100644 --- a/syntax/markdown.vim +++ b/syntax/markdown.vim @@ -12,12 +12,13 @@ if !exists('main_syntax') let main_syntax = 'markdown' endif -runtime! syntax/html.vim -unlet! b:current_syntax - if has('folding') let s:foldmethod = &l:foldmethod endif + +runtime! syntax/html.vim +unlet! b:current_syntax + if !exists('g:markdown_fenced_languages') let g:markdown_fenced_languages = [] endif @@ -35,8 +36,10 @@ for s:type in map(copy(g:markdown_fenced_languages),'matchstr(v:val,"[^=]*$")') endfor unlet! s:type unlet! s:done_include + if exists('s:foldmethod') && s:foldmethod !=# &l:foldmethod let &l:foldmethod = s:foldmethod + unlet s:foldmethod endif if !exists('g:markdown_minlines') From f35c43c535af40dc045d55dd459969b6f31d4128 Mon Sep 17 00:00:00 2001 From: Greg Anders Date: Fri, 31 Jan 2020 15:33:09 -0700 Subject: [PATCH 17/18] Update [[ and ]] mappings 1. Add support for setext style headings 2. Use the 's' flag in search() to set the ' mark instead of using m' 3. Fix the guard --- ftplugin/markdown.vim | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/ftplugin/markdown.vim b/ftplugin/markdown.vim index d2d1e17..ba8526c 100644 --- a/ftplugin/markdown.vim +++ b/ftplugin/markdown.vim @@ -19,11 +19,11 @@ else let b:undo_ftplugin = "setl cms< com< fo< flp<" endif -if !exists("g:no_plugin_maps") || !exists("g:no_markdown_maps") - nnoremap [[ m':call search('^#\{1,5\}\s\+\S', "bW") - nnoremap ]] m':call search('^#\{1,5\}\s\+\S', "W") - xnoremap [[ m':exe "normal! gv"call search('^#\{1,5\}\s\+\S', "bW") - xnoremap ]] m':exe "normal! gv"call search('^#\{1,5\}\s\+\S', "W") +if !exists("g:no_plugin_maps") && !exists("g:no_markdown_maps") + nnoremap [[ :call search('\%(^#\{1,5\}\s\+\S\\|^\S.*\n^[=-]\+$\)', "bsW") + nnoremap ]] :call search('\%(^#\{1,5\}\s\+\S\\|^\S.*\n^[=-]\+$\)', "sW") + xnoremap [[ :exe "normal! gv"call search('\%(^#\{1,5\}\s\+\S\\|^\S.*\n^[=-]\+$\)', "bsW") + xnoremap ]] :exe "normal! gv"call search('\%(^#\{1,5\}\s\+\S\\|^\S.*\n^[=-]\+$\)', "sW") let b:undo_ftplugin .= '|sil! nunmap [[|sil! nunmap ]]|sil! xunmap [[|sil! xunmap ]]' endif From 296eeaa8877528fae45e89a9013c5a8d317deef1 Mon Sep 17 00:00:00 2001 From: Tim Pope Date: Fri, 21 Feb 2020 00:20:54 -0500 Subject: [PATCH 18/18] Support tilde code blocks Also ensure the end marker has the same number of delimiter characters as the start marker. Closes https://github.com/tpope/vim-markdown/issues/156 --- syntax/markdown.vim | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/syntax/markdown.vim b/syntax/markdown.vim index 8bf373e..fa28abf 100644 --- a/syntax/markdown.vim +++ b/syntax/markdown.vim @@ -106,7 +106,8 @@ exe 'syn region markdownBoldItalic matchgroup=markdownBoldItalicDelimiter start= 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*\z(`\{3,\}\).*$" end="^\s*\z1\ze\s*$" keepend +syn region markdownCode matchgroup=markdownCodeDelimiter start="^\s*\z(\~\{3,\}\).*$" end="^\s*\z1\ze\s*$" keepend syn match markdownFootnote "\[^[^\]]\+\]" syn match markdownFootnoteDefinition "^\[^[^\]]\+\]:" @@ -117,7 +118,8 @@ if main_syntax ==# 'markdown' 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 + exe 'syn region markdownHighlight'.substitute(matchstr(s:type,'[^=]*$'),'\..*','','').' matchgroup=markdownCodeDelimiter start="^\s*\z(`\{3,\}\)*\s*\%({.\{-}\.\)\='.matchstr(s:type,'[^=]*').'}\=\S\@!.*$" end="^\s*\z1\ze\s*$" keepend contains=@markdownHighlight'.substitute(matchstr(s:type,'[^=]*$'),'\.','','g') . s:concealends + exe 'syn region markdownHighlight'.substitute(matchstr(s:type,'[^=]*$'),'\..*','','').' matchgroup=markdownCodeDelimiter start="^\s*\z(\~\{3,\}\)*\s*\%({.\{-}\.\)\='.matchstr(s:type,'[^=]*').'}\=\S\@!.*$" end="^\s*\z1\ze\s*$" keepend contains=@markdownHighlight'.substitute(matchstr(s:type,'[^=]*$'),'\.','','g') . s:concealends let s:done_include[matchstr(s:type,'[^.]*')] = 1 endfor unlet! s:type