From 0cf71e0018a5c11dd2cd2183e3f0632ec4ce01df Mon Sep 17 00:00:00 2001 From: Hsieh Chin Fan Date: Wed, 31 Jul 2024 01:42:03 +0800 Subject: Update --- vim/init/keymaps.vim | 40 ++++++++++++++++++++++++++-------------- 1 file changed, 26 insertions(+), 14 deletions(-) (limited to 'vim/init') diff --git a/vim/init/keymaps.vim b/vim/init/keymaps.vim index 37c0936..4df45ad 100644 --- a/vim/init/keymaps.vim +++ b/vim/init/keymaps.vim @@ -197,45 +197,57 @@ endfunc nnoremap dm :call DeleteMark(getchar()) -" Usage: z' to fold lines not near marks, use v:count to set bound +" Usage: z' to fold lines not near marks, use v:count to set offset " For example: 15z' -autocmd BufEnter * let b:unfold_marks = 0 -let g:mark_bound = 5 -function! ToggleFoldForMarks(bound) - let bound = a:bound ? a:bound : g:mark_bound - if !b:unfold_marks - mkview - setlocal foldmethod=manual +autocmd BufEnter * let b:fold_for_marks = 0 +let g:mark_offset = 5 +function! ToggleFoldForMarks(offset) + if !b:fold_for_marks || a:offset + " If toggling from other foldmethod, save view! + if !b:fold_for_marks + mkview + setlocal foldmethod=manual + endif + + " Then clear all folds norm! zEgg + " Get list of lines which has mark let line_list = [] for info in getmarklist(bufnr()) if match(info.mark, "[a-z]") == 1 call add(line_list, info.pos[1]) endif endfor - echo line_list call uniq(sort(line_list, 'n')) + " Create folds not inside offset of marks + let offset = a:offset ? a:offset : g:mark_offset for line in line_list let foldstart = line('.') - let line_upper = line - bound - let line_lower = line + bound + let line_upper = line - offset + let line_lower = line + offset if foldstart < (line_upper - 1) exe foldstart..","..(line_upper-1).." fold" endif - " Jump to lower bound of lineer + " Move cursor outside of lower offset exe (line_lower + 1) endfor + + " Fold lower offset to end of file if line('.') < line('$') norm! zfG endif + + let b:fold_for_marks = 1 + echo "Folds for Marks" else loadview + let b:fold_for_marks = 0 + echo "Reset Folds" endif - let b:unfold_marks = !b:unfold_marks endfunction -nnoremap z' ":\call ToggleFoldForMarks(".v:count..")\" +nnoremap z' ":\call ToggleFoldForMarks("..v:count..")\" "}}} " EDIT {{{ -- cgit v1.2.3-70-g09d2