aboutsummaryrefslogtreecommitdiffhomepage
path: root/vim/init/keymaps.vim
diff options
context:
space:
mode:
Diffstat (limited to 'vim/init/keymaps.vim')
-rw-r--r--vim/init/keymaps.vim40
1 files changed, 26 insertions, 14 deletions
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
197nnoremap dm :call DeleteMark(getchar())<CR> 197nnoremap dm :call DeleteMark(getchar())<CR>
198 198
199 199
200" Usage: z' to fold lines not near marks, use v:count to set bound 200" Usage: z' to fold lines not near marks, use v:count to set offset
201" For example: 15z' 201" For example: 15z'
202autocmd BufEnter * let b:unfold_marks = 0 202autocmd BufEnter * let b:fold_for_marks = 0
203let g:mark_bound = 5 203let g:mark_offset = 5
204function! ToggleFoldForMarks(bound) 204function! ToggleFoldForMarks(offset)
205 let bound = a:bound ? a:bound : g:mark_bound 205 if !b:fold_for_marks || a:offset
206 if !b:unfold_marks 206 " If toggling from other foldmethod, save view!
207 mkview 207 if !b:fold_for_marks
208 setlocal foldmethod=manual 208 mkview
209 setlocal foldmethod=manual
210 endif
211
212 " Then clear all folds
209 norm! zEgg 213 norm! zEgg
210 214
215 " Get list of lines which has mark
211 let line_list = [] 216 let line_list = []
212 for info in getmarklist(bufnr()) 217 for info in getmarklist(bufnr())
213 if match(info.mark, "[a-z]") == 1 218 if match(info.mark, "[a-z]") == 1
214 call add(line_list, info.pos[1]) 219 call add(line_list, info.pos[1])
215 endif 220 endif
216 endfor 221 endfor
217 echo line_list
218 call uniq(sort(line_list, 'n')) 222 call uniq(sort(line_list, 'n'))
219 223
224 " Create folds not inside offset of marks
225 let offset = a:offset ? a:offset : g:mark_offset
220 for line in line_list 226 for line in line_list
221 let foldstart = line('.') 227 let foldstart = line('.')
222 let line_upper = line - bound 228 let line_upper = line - offset
223 let line_lower = line + bound 229 let line_lower = line + offset
224 if foldstart < (line_upper - 1) 230 if foldstart < (line_upper - 1)
225 exe foldstart..","..(line_upper-1).." fold" 231 exe foldstart..","..(line_upper-1).." fold"
226 endif 232 endif
227 " Jump to lower bound of lineer 233 " Move cursor outside of lower offset
228 exe (line_lower + 1) 234 exe (line_lower + 1)
229 endfor 235 endfor
236
237 " Fold lower offset to end of file
230 if line('.') < line('$') 238 if line('.') < line('$')
231 norm! zfG 239 norm! zfG
232 endif 240 endif
241
242 let b:fold_for_marks = 1
243 echo "Folds for Marks"
233 else 244 else
234 loadview 245 loadview
246 let b:fold_for_marks = 0
247 echo "Reset Folds"
235 endif 248 endif
236 let b:unfold_marks = !b:unfold_marks
237endfunction 249endfunction
238nnoremap <expr> z' ":\<C-u>call ToggleFoldForMarks(".v:count..")\<CR>" 250nnoremap <expr> z' ":\<C-u>call ToggleFoldForMarks("..v:count..")\<CR>"
239 251
240"}}} 252"}}}
241" EDIT {{{ 253" EDIT {{{