From e94b17515037564d993209f7917329e8f9a42727 Mon Sep 17 00:00:00 2001 From: Hsieh Chin Fan Date: Wed, 31 Jul 2024 11:49:46 +0800 Subject: Update --- vim/init/basic.vim | 2 +- vim/init/keymaps.vim | 35 ++++++++++++++++++++++++++++++++--- 2 files changed, 33 insertions(+), 4 deletions(-) (limited to 'vim/init') diff --git a/vim/init/basic.vim b/vim/init/basic.vim index 58277b9..17a97da 100644 --- a/vim/init/basic.vim +++ b/vim/init/basic.vim @@ -23,7 +23,7 @@ augroup tabinfo autocmd BufDelete * call RemoveBufFromTabs() function! AddBufToTab() - if !has_key(t:, 'bufs') | let t:['bufs'] = [] | endif + if !has_key(t:, 'bufs') | let t:bufs = [] | endif call add(t:bufs, bufnr()) | call sort(t:bufs) | call uniq(t:bufs) endfunc function! RemoveBufFromTabs() 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) endfunc nnoremap dm :call DeleteMark(getchar()) - " Usage: z' to fold lines not near marks, use v:count to set offset " For example: 15z' autocmd BufEnter * let b:fold_for_marks = 0 @@ -205,8 +204,8 @@ 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 + mkview + setlocal foldmethod=manual endif " Then clear all folds @@ -242,6 +241,7 @@ function! ToggleFoldForMarks(offset) let b:fold_for_marks = 1 echo "Folds for Marks" else + " Reset everything loadview let b:fold_for_marks = 0 echo "Reset Folds" @@ -249,6 +249,35 @@ function! ToggleFoldForMarks(offset) endfunction nnoremap z' ":\call ToggleFoldForMarks("..v:count..")\" +function! ChangeUnfold(downward, count) + " Only do this if foldmethod is manual or count is given + if &foldmethod != 'manual' || !a:count | return | endif + + " Move to fold upward/downward + if downward + norm! zj + else + norm! zk + endif + let foldstart = foldclosed('.') + let foldend = foldclosedend('.') + + " Change folding area + norm! zd + let move = (a:count ? a:count : 1) + if downward + let foldstart += move + else + let foldend -= move + endif + exe foldstart..","..foldend.."fold" + + " Get back to origin cursor position + norm! '' +endfunc +nnoremap z> ":\call ChangeUnfold(1,"..v:count..")\" +nnoremap z< ":\call ChangeUnfold(0,"..v:count..")\" + "}}} " EDIT {{{ -- cgit v1.2.3-70-g09d2