diff options
author | Hsieh Chin Fan <pham@topo.tw> | 2024-07-31 11:49:46 +0800 |
---|---|---|
committer | Hsieh Chin Fan <pham@topo.tw> | 2024-07-31 13:47:57 +0800 |
commit | e94b17515037564d993209f7917329e8f9a42727 (patch) | |
tree | d629aa93c0fefc0ab8abee658cc7037492379e76 /vim/init/keymaps.vim | |
parent | 0cf71e0018a5c11dd2cd2183e3f0632ec4ce01df (diff) |
Update
Diffstat (limited to 'vim/init/keymaps.vim')
-rw-r--r-- | vim/init/keymaps.vim | 35 |
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) | |||
196 | endfunc | 196 | endfunc |
197 | nnoremap dm :call DeleteMark(getchar())<CR> | 197 | nnoremap 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' |
202 | autocmd BufEnter * let b:fold_for_marks = 0 | 201 | autocmd 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) | |||
249 | endfunction | 249 | endfunction |
250 | nnoremap <expr> z' ":\<C-u>call ToggleFoldForMarks("..v:count..")\<CR>" | 250 | nnoremap <expr> z' ":\<C-u>call ToggleFoldForMarks("..v:count..")\<CR>" |
251 | 251 | ||
252 | function! 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! '' | ||
277 | endfunc | ||
278 | nnoremap <expr> z> ":\<C-u>call ChangeUnfold(1,"..v:count..")\<CR>" | ||
279 | nnoremap <expr> z< ":\<C-u>call ChangeUnfold(0,"..v:count..")\<CR>" | ||
280 | |||
252 | "}}} | 281 | "}}} |
253 | " EDIT {{{ | 282 | " EDIT {{{ |
254 | 283 | ||