From 6764c57a44362da5ce0bf142f996c45e63b0a581 Mon Sep 17 00:00:00 2001 From: Hiroshi Shirosaki Date: Fri, 8 Jan 2016 20:41:57 +0900 Subject: [PATCH 1/1] Improve performance of folding Folding is very slow for large files. Drop `s:effective_line()` to reduce call of `s:is_mkdCode()`. --- after/ftplugin/markdown.vim | 29 ++++++++++++----------------- 1 file changed, 12 insertions(+), 17 deletions(-) diff --git a/after/ftplugin/markdown.vim b/after/ftplugin/markdown.vim index 1d0572c..d965a71 100644 --- a/after/ftplugin/markdown.vim +++ b/after/ftplugin/markdown.vim @@ -10,24 +10,19 @@ function! s:is_mkdCode(lnum) return synIDattr(synID(a:lnum, 1, 0), 'name') == 'mkdCode' endfunction -function! s:effective_line(lnum) - let line = getline(a:lnum) - return (line !~ '^[=-#]' || s:is_mkdCode(a:lnum)) ? '' : line -endfunction - if get(g:, "vim_markdown_folding_style_pythonic", 0) function! Foldexpr_markdown(lnum) - let l2 = s:effective_line(a:lnum+1) - if l2 =~ '^==\+\s*' + let l2 = getline(a:lnum+1) + if l2 =~ '^==\+\s*' && !s:is_mkdCode(a:lnum+1) " next line is underlined (level 1) return '>0' - elseif l2 =~ '^--\+\s*' + elseif l2 =~ '^--\+\s*' && !s:is_mkdCode(a:lnum+1) " next line is underlined (level 2) return '>1' endif - let l1 = s:effective_line(a:lnum) - if l1 =~ '^#' + let l1 = getline(a:lnum) + if l1 =~ '^#' && !s:is_mkdCode(a:lnum) " current line starts with hashes return '>'.(matchend(l1, '^#\+') - 1) elseif a:lnum == 1 @@ -52,17 +47,17 @@ if get(g:, "vim_markdown_folding_style_pythonic", 0) endfunction else function! Foldexpr_markdown(lnum) - let l2 = s:effective_line(a:lnum+1) - if l2 =~ '^==\+\s*' + let l2 = getline(a:lnum+1) + if l2 =~ '^==\+\s*' && !s:is_mkdCode(a:lnum+1) " next line is underlined (level 1) return '>1' - elseif l2 =~ '^--\+\s*' + elseif l2 =~ '^--\+\s*' && !s:is_mkdCode(a:lnum+1) " next line is underlined (level 2) return '>2' endif - let l1 = s:effective_line(a:lnum) - if l1 =~ '^#' + let l1 = getline(a:lnum) + if l1 =~ '^#' && !s:is_mkdCode(a:lnum) " don't include the section title in the fold return '-1' endif @@ -70,9 +65,9 @@ else if (a:lnum == 1) let l0 = '' else - let l0 = s:effective_line(a:lnum-1) + let l0 = getline(a:lnum-1) endif - if l0 =~ '^#' + if l0 =~ '^#' && !s:is_mkdCode(a:lnum-1) " current line starts with hashes return '>'.matchend(l0, '^#\+') else -- 2.39.5