Vim: Custom Folding function done, custom highlighting required

Posted by sixtyfootersdude on Super User See other posts from Super User or by sixtyfootersdude
Published on 2010-03-10T16:26:41Z Indexed on 2010/03/18 12:51 UTC
Read the original article Hit count: 605

Filed under:
|
|
|

I have defined a function in vim to properly indent folds. Ie so they look like this:

Unfolded

this is text 
also text
    indented text
    indented text
not indented text

folded with default function

this is text 
also text
+-- 2 lines: indented text ----------------------------
not indented text

folded with my new function

this is text 
also text
    ++- 2 lines: indented text ----------------------------
not indented text

The only problem is the the highlighting is still like this:

folded with my new function (highlighting shown with tag)

this is text 
also text
<hi>    ++- 2 lines: indented text ----------------------------</hi>
not indented text

I would like the highlighting to start at the ++ and not at the beginning of the line. I have looked in the vim manual but could not find anything like that. One so-so solution I found was to make the background black.

highlight Folded ctermbg=black ctermfg=white cterm=bold

But this make folds less visible.

I have tried several variations of:

syn keyword Folded lines
syn region Folded ...

But I don't think that this is the way that folds are selected. Can anyone offer a suggestion?

By the way this is my function to indent the folds:

set foldmethod=indent

function! MyFoldText()
        let lines = 1 + v:foldend - v:foldstart
        let ind = indent(v:foldstart)

        let spaces = ''
        let i = 0
        while i < ind
                let i = i+1
                let spaces = spaces . ' '
        endwhile

        let linestxt = 'lines'
        if lines == 1
                linestxt = 'line'
        endif

        return spaces . '+' . v:folddashes . ' '. lines . ' ' . linestxt . ': ' . getline(v:foldstaendfunction
endfunction


au BufWinEnter,BufRead,BufNewFile * set foldtext=MyFoldText()

By the way thanks to njd for helping me get this function setup.

© Super User or respective owner

Related posts about vim

Related posts about function