From 3827a2680a7205ff3da78a18531d39463c637ebc Mon Sep 17 00:00:00 2001 From: Alexandre Constantino Date: Wed, 13 Jan 2016 11:10:27 +0000 Subject: [PATCH] Fix :Toc for setext headers --- README.md | 30 +++++++++++++++--------------- after/ftplugin/markdown.vim | 13 ++++++++----- ftplugin/markdown.vim | 8 +++++++- 3 files changed, 30 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index da77a07..6fd8a38 100644 --- a/README.md +++ b/README.md @@ -79,6 +79,21 @@ the following to your `.vimrc`: let g:vim_markdown_folding_style_pythonic=1 ``` +### Set header folding level + +Folding level is a number between 1 and 6. By default, if not specified, it is set to 1. + +```vim +let g:vim_markdown_folding_level = 6 +``` + +Tip: it can be changed on the fly with: + +```vim +:let g:vim_markdown_folding_level = 1 +:edit +``` + ### Disable Default Key Mappings Add the following line to your `.vimrc` to disable default key mappings: @@ -109,21 +124,6 @@ Highlight YAML frontmatter as used by Jekyll: let g:vim_markdown_frontmatter=1 ``` -#### Folding level - -Folding level is a number between 1 and 6. By default, if not specified, it is set to 1. - -```vim -let g:vim_markdown_folding_level = 6 -``` - -Tip: it can be changed on the fly with: - -```vim -:let g:vim_markdown_folding_level = 1 -:edit -``` - ## Mappings diff --git a/after/ftplugin/markdown.vim b/after/ftplugin/markdown.vim index f6bfe47..1916a73 100644 --- a/after/ftplugin/markdown.vim +++ b/after/ftplugin/markdown.vim @@ -64,16 +64,19 @@ else let l2 = getline(a:lnum+1) if l2 =~ '^==\+\s*' && !s:is_mkdCode(a:lnum+1) " next line is underlined (level 1) - return '>1' + return 0 elseif l2 =~ '^--\+\s*' && !s:is_mkdCode(a:lnum+1) " next line is underlined (level 2) - return '>2' + if g:vim_markdown_folding_level == 2 + return 0 + else + return 1 + endif endif let l1 = getline(a:lnum) if l1 =~ '^#' && !s:is_mkdCode(a:lnum) " fold level according to option - " (in vim -1 is visible, >= 0 is folded) let l:level = matchend(l1, '^#\+') if g:vim_markdown_folding_level == 1 || l:level > g:vim_markdown_folding_level return -1 @@ -91,8 +94,8 @@ else " current line starts with hashes return '>'.matchend(l0, '^#\+') else - " keep previous foldlevel - return '=' + " fold here because of setext headers + return 1 endif endfunction endif diff --git a/ftplugin/markdown.vim b/ftplugin/markdown.vim index bc916ef..61fdab4 100644 --- a/ftplugin/markdown.vim +++ b/ftplugin/markdown.vim @@ -309,6 +309,7 @@ function! s:Toc(...) let l:header_max_len = 0 for i in range(1, line('$')) let l:lineraw = getline(i) + let l:l1 = getline(i+1) let l:line = substitute(l:lineraw, "#", "\\\#", "g") if l:line =~ '````*' || l:line =~ '\~\~\~\~*' if b:fenced_block == 0 @@ -317,7 +318,12 @@ function! s:Toc(...) let b:fenced_block = 0 endif endif - if l:line =~ '^#\+' && b:fenced_block == 0 + if l:line =~ '^#\+' || l:l1 =~ '^==\+\s*' || l:l1 =~ '^--\+\s*' + let b:is_header = 1 + else + let b:is_header = 0 + endif + if b:is_header == 1 && b:fenced_block == 0 " append line to location list let b:item = {'lnum': i, 'text': l:line, 'valid': 1, 'bufnr': b:bufnr, 'col': 1} let b:header_list = b:header_list + [b:item] -- 2.39.2