]> git.madduck.net Git - etc/vim.git/commitdiff

madduck's git repository

Every one of the projects in this repository is available at the canonical URL git://git.madduck.net/madduck/pub/<projectpath> — see each project's metadata for the exact URL.

All patches and comments are welcome. Please squash your changes to logical commits before using git-format-patch and git-send-email to patches@git.madduck.net. If you'd read over the Git project's submission guidelines and adhered to them, I'd be especially grateful.

SSH access, as well as push access can be individually arranged.

If you use my repositories frequently, consider adding the following snippet to ~/.gitconfig and using the third clone URL listed for each project:

[url "git://git.madduck.net/madduck/"]
  insteadOf = madduck:

Refactoring the fenced code block handling of folding
authorHiroshi Shirosaki <h.shirosaki@gmail.com>
Thu, 14 Jan 2016 11:27:46 +0000 (20:27 +0900)
committerHiroshi Shirosaki <h.shirosaki@gmail.com>
Thu, 14 Jan 2016 11:27:46 +0000 (20:27 +0900)
after/ftplugin/markdown.vim

index 586ff2f5b001ee8490c5a6f7d6f8e1fd74b8d2ab..777ddace57db29e70dde6ce2f9fec97209c72e7b 100644 (file)
@@ -23,16 +23,26 @@ if get(g:, "vim_markdown_folding_style_pythonic", 0)
             endif
         endif
 
+        if b:fenced_block == 1
+            if a:lnum == 1
+                " fold any 'preamble'
+                return '>1'
+            else
+                " keep previous foldlevel
+                return '='
+            endif
+        endif
+
         let l2 = getline(a:lnum+1)
-        if l2 =~ '^==\+\s*' && b:fenced_block == 0 && !s:is_mkdCode(a:lnum+1)
+        if l2 =~ '^==\+\s*' && !s:is_mkdCode(a:lnum+1)
             " next line is underlined (level 1)
             return '>0'
-        elseif l2 =~ '^--\+\s*' && b:fenced_block == 0 && !s:is_mkdCode(a:lnum+1)
+        elseif l2 =~ '^--\+\s*' && !s:is_mkdCode(a:lnum+1)
             " next line is underlined (level 2)
             return '>1'
         endif
 
-        if l1 =~ '^#' && b:fenced_block == 0 && !s:is_mkdCode(a:lnum)
+        if l1 =~ '^#' && !s:is_mkdCode(a:lnum)
             " current line starts with hashes
             return '>'.(matchend(l1, '^#\+') - 1)
         elseif a:lnum == 1
@@ -62,6 +72,7 @@ else
         else
             let l0 = getline(a:lnum-1)
         endif
+
         " keep track of fenced code blocks
         if l0 =~ '````*' || l0 =~ '\~\~\~\~*'
             if b:fenced_block == 0
@@ -71,11 +82,16 @@ else
             endif
         endif
 
+        if b:fenced_block == 1
+            " keep previous foldlevel
+            return '='
+        endif
+
         let l2 = getline(a:lnum+1)
-        if  l2 =~ '^==\+\s*' && b:fenced_block == 0 && !s:is_mkdCode(a:lnum+1)
+        if  l2 =~ '^==\+\s*' && !s:is_mkdCode(a:lnum+1)
             " next line is underlined (level 1)
             return '>1'
-        elseif l2 =~ '^--\+\s*' && b:fenced_block == 0 && !s:is_mkdCode(a:lnum+1)
+        elseif l2 =~ '^--\+\s*' && !s:is_mkdCode(a:lnum+1)
             " next line is underlined (level 2)
             if g:vim_markdown_folding_level >= 2
                 return '>1'
@@ -85,7 +101,7 @@ else
         endif
 
         let l1 = getline(a:lnum)
-        if l1 =~ '^#' && b:fenced_block == 0 && !s:is_mkdCode(a:lnum)
+        if l1 =~ '^#' && !s:is_mkdCode(a:lnum)
             " fold level according to option
             let l:level = matchend(l1, '^#\+')
             if g:vim_markdown_folding_level == 1 || l:level > g:vim_markdown_folding_level
@@ -96,7 +112,7 @@ else
             endif
         endif
 
-        if l0 =~ '^#' && b:fenced_block == 0 && !s:is_mkdCode(a:lnum-1)
+        if l0 =~ '^#' && !s:is_mkdCode(a:lnum-1)
             " current line starts with hashes
             return '>'.matchend(l0, '^#\+')
         else