+if has('eval')
+" Don't move the cursor to the first column for certain scroll commands (<C-F,
+" <C-B>, <C-D>, <C-U>). Thanks to jamessan in #vim on Freenode (2011-08-31
+" 02:27 CEST) for the 'nostartofline' tip. But I can't use 'nostartofline'
+" directly because it also enables that feature for other commands which I
+" don't want.
+
+ " Set 'nostartofline' for a single movement.
+ function! s:TemporaryNostartofline(movement)
+ let l:startofline = &startofline
+ set nostartofline
+ execute 'normal! ' . a:movement
+ let &startofline = l:startofline
+ endfunction
+
+ " Thanks to fow in #vim on Freenode (2012-02-16 15:38 CET) for the idea to
+ " use "<Bslash><Lt>"; Vim documentation reference: :help <>.
+ nnoremap <silent> <C-F>
+ \ :call <SID>TemporaryNostartofline("<Bslash><Lt>C-F>")<CR>
+ nnoremap <silent> <C-B>
+ \ :call <SID>TemporaryNostartofline("<Bslash><Lt>C-B>")<CR>
+ nnoremap <silent> <C-D>
+ \ :call <SID>TemporaryNostartofline("<Bslash><Lt>C-D>")<CR>
+ nnoremap <silent> <C-U>
+ \ :call <SID>TemporaryNostartofline("<Bslash><Lt>C-U>")<CR>
+endif
+