aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--vim/plugin/scroll_next.vim32
-rw-r--r--vim/vimrc5
2 files changed, 35 insertions, 2 deletions
diff --git a/vim/plugin/scroll_next.vim b/vim/plugin/scroll_next.vim
new file mode 100644
index 00000000..fa33044e
--- /dev/null
+++ b/vim/plugin/scroll_next.vim
@@ -0,0 +1,32 @@
+"
+" scroll_next.vim: Mapping to scroll a page forward with CTRL-F until the last
+" line is visible in the buffer (if supported) or the cursor is on the last
+" line, and to run :next instead if so to move to the next buffer in the
+" argument list.
+"
+" Author: Tom Ryder <tom@sanctum.geek.nz>
+" License: Same as Vim itself
+"
+if exists('g:loaded_scroll_next') || &compatible
+ finish
+endif
+if v:version < 600
+ finish
+endif
+let g:loaded_scroll_next = 1
+
+" Check visibility of last line (Vim >=7.0) or cursor presence on last line
+" and flick to :next if appropriate, or just page forward with CTRL-F
+function! s:ScrollNext() abort
+ if line('.') == line('$')
+ \ || line('w$') == line('$')
+ silent! next
+ else
+ execute "normal! \<C-F>"
+ endif
+endfunction
+
+" Mapping setup
+nnoremap <silent> <unique>
+ \ <Plug>(ScrollNext)
+ \ :<C-U>call <SID>ScrollNext()<CR>
diff --git a/vim/vimrc b/vim/vimrc
index 69b88998..a1f9b66f 100644
--- a/vim/vimrc
+++ b/vim/vimrc
@@ -184,8 +184,9 @@ imap <C-K><C-K> <Plug>(DigraphSearch)
" Remap normal space to scroll down a page
nnoremap <Space> <C-F>
-if v:version > 700
- nnoremap <expr> <Space> line('.') == line('$') ? ':<C-U>next<CR>' : '<C-F>'
+" If we have plugins, do a :next after hitting the last line
+if &loadplugins
+ nmap <Space> <Plug>(ScrollNext)
endif
" Map g: as a 'colon operator'