diff --git a/autoload/fugitive.vim b/autoload/fugitive.vim index 47bc839..eb140bc 100644 --- a/autoload/fugitive.vim +++ b/autoload/fugitive.vim @@ -1730,6 +1730,8 @@ function! fugitive#BufReadStatus() abort nunmap ~ nnoremap :execute StageNext(v:count1) nnoremap :execute StagePrevious(v:count1) + nnoremap [[ :execute PreviousSection(v:count1) + nnoremap ]] :execute NextSection(v:count1) exe "nnoremap " nowait "- :execute Do('Toggle',0)" exe "xnoremap " nowait "- :execute Do('Toggle',1)" exe "nnoremap " nowait "s :execute Do('Stage',0)" @@ -2565,6 +2567,29 @@ function! s:StagePrevious(count) abort endif endfunction +function! s:NextSection(count) abort + for i in range(a:count) + if !search('^[A-Z][a-z][^:]*$','W') + return '.' + endif + + + endfor + call s:StageReveal() + return '.' +endfunction + +function! s:PreviousSection(count) abort + - + for i in range(a:count) + if !search('^[A-Z][a-z][^:]*$\|\%^','bW') || line('.') == 1 + return '.' + endif + + + endfor + call s:StageReveal() + return '.' +endfunction + function! s:StageInline(mode, ...) abort let lnum1 = a:0 ? a:1 : line('.') let lnum = lnum1 + 1 diff --git a/doc/fugitive.txt b/doc/fugitive.txt index 79ae24d..7a7a569 100644 --- a/doc/fugitive.txt +++ b/doc/fugitive.txt @@ -249,12 +249,6 @@ u Unstage (reset) the file or hunk under the cursor. *fugitive_-* - Stage or unstage the file or hunk under the cursor. - *fugitive_CTRL-N* - Skip to the next file or hunk. - - *fugitive_CTRL-P* - Skip to the previous file or hunk. - *fugitive_X* X Discard the change under the cursor. This uses `checkout` or `clean` under the hood. A command is @@ -327,6 +321,18 @@ C Open the commit containing the current file. C Open the commit containing the current file in a new split. + *fugitive_CTRL-P* + Jump to the previous file or hunk. + + *fugitive_CTRL-N* + Jump to the next file or hunk. + + *fugitive_[[* +[[ Jump to the previous section. + + *fugitive_]]* +]] Jump to the next section. + *fugitive_gu* gu Jump to "Unstaged" section.