diff --git a/README.md b/README.md index 4a76d81..f110974 100644 --- a/README.md +++ b/README.md @@ -55,6 +55,11 @@ let g:limelight_paragraph_span = 1 let g:limelight_bop = '^\s' let g:limelight_eop = '\ze\n^\s' +" Alternatively, you can use movements to define paragraphs +let g:limelight_mode = 'movement' +let g:limelight_bop = '{' +let g:limelight_eop = '}' + " Highlighting priority (default: 10) " Set it to -1 not to overrule hlsearch let g:limelight_priority = -1 diff --git a/autoload/limelight.vim b/autoload/limelight.vim index ed2728e..b68381a 100644 --- a/autoload/limelight.vim +++ b/autoload/limelight.vim @@ -42,17 +42,26 @@ function! s:unsupported() endif endfunction +function! s:searchline(arg, flags) + if get(g:, 'limelight_mode', 'pattern') == 'movement' + execute 'silent! normal! ' . a:arg + return line('.') + else + return searchpos(a:arg, a:flags)[0] + endif +endfunction + function! s:getpos() let bop = get(g:, 'limelight_bop', '^\s*$\n\zs') let eop = get(g:, 'limelight_eop', '^\s*$') let span = max([0, get(g:, 'limelight_paragraph_span', 0) - s:empty(getline('.'))]) let win_view = winsaveview() for i in range(0, span) - let start = searchpos(bop, i == 0 ? 'cbW' : 'bW')[0] + let start = s:searchline(bop, i == 0 ? 'cbW' : 'bW') endfor call winrestview(win_view) for _ in range(0, span) - let end = searchpos(eop, 'W')[0] + let end = s:searchline(eop, 'W') endfor call winrestview(win_view) return [start, end]