diff --git a/README.md b/README.md index 5cd803c..07b978c 100644 --- a/README.md +++ b/README.md @@ -66,6 +66,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 0a4cd86..acc8fb2 100644 --- a/autoload/limelight.vim +++ b/autoload/limelight.vim @@ -42,19 +42,28 @@ 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 pos = exists('*getcurpos')? getcurpos() : getpos('.') + 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 setpos('.', pos) + call winrestview(win_view) for _ in range(0, span) - let end = searchpos(eop, 'W')[0] + let end = s:searchline(eop, 'W') endfor - call setpos('.', pos) + call winrestview(win_view) return [start, end] endfunction