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.vim35
1 files changed, 32 insertions, 3 deletions
diff --git a/vim/init/keymaps.vim b/vim/init/keymaps.vim
index 4df45ad..ce6cf84 100644
--- a/vim/init/keymaps.vim
+++ b/vim/init/keymaps.vim
@@ -196,7 +196,6 @@ function! DeleteMark(mark)
196endfunc 196endfunc
197nnoremap dm :call DeleteMark(getchar())<CR> 197nnoremap dm :call DeleteMark(getchar())<CR>
198 198
199
200" Usage: z' to fold lines not near marks, use v:count to set offset 199" Usage: z' to fold lines not near marks, use v:count to set offset
201" For example: 15z' 200" For example: 15z'
202autocmd BufEnter * let b:fold_for_marks = 0 201autocmd BufEnter * let b:fold_for_marks = 0
@@ -205,8 +204,8 @@ function! ToggleFoldForMarks(offset)
205 if !b:fold_for_marks || a:offset 204 if !b:fold_for_marks || a:offset
206 " If toggling from other foldmethod, save view! 205 " If toggling from other foldmethod, save view!
207 if !b:fold_for_marks 206 if !b:fold_for_marks
208 mkview 207 mkview
209 setlocal foldmethod=manual 208 setlocal foldmethod=manual
210 endif 209 endif
211 210
212 " Then clear all folds 211 " Then clear all folds
@@ -242,6 +241,7 @@ function! ToggleFoldForMarks(offset)
242 let b:fold_for_marks = 1 241 let b:fold_for_marks = 1
243 echo "Folds for Marks" 242 echo "Folds for Marks"
244 else 243 else
244 " Reset everything
245 loadview 245 loadview
246 let b:fold_for_marks = 0 246 let b:fold_for_marks = 0
247 echo "Reset Folds" 247 echo "Reset Folds"
@@ -249,6 +249,35 @@ function! ToggleFoldForMarks(offset)
249endfunction 249endfunction
250nnoremap <expr> z' ":\<C-u>call ToggleFoldForMarks("..v:count..")\<CR>" 250nnoremap <expr> z' ":\<C-u>call ToggleFoldForMarks("..v:count..")\<CR>"
251 251
252function! ChangeUnfold(downward, count)
253 " Only do this if foldmethod is manual or count is given
254 if &foldmethod != 'manual' || !a:count | return | endif
255
256 " Move to fold upward/downward
257 if downward
258 norm! zj
259 else
260 norm! zk
261 endif
262 let foldstart = foldclosed('.')
263 let foldend = foldclosedend('.')
264
265 " Change folding area
266 norm! zd
267 let move = (a:count ? a:count : 1)
268 if downward
269 let foldstart += move
270 else
271 let foldend -= move
272 endif
273 exe foldstart..","..foldend.."fold"
274
275 " Get back to origin cursor position
276 norm! ''
277endfunc
278nnoremap <expr> z> ":\<C-u>call ChangeUnfold(1,"..v:count..")\<CR>"
279nnoremap <expr> z< ":\<C-u>call ChangeUnfold(0,"..v:count..")\<CR>"
280
252"}}} 281"}}}
253" EDIT {{{ 282" EDIT {{{
254 283