edit
基本的に[ [ , ] ] と同じだが、1つ上が空行になっている行を先頭行とみなし、先頭行が画面最上になるようにして移動する。
noremap <C-p> [[?^\s*$<CR>jz<CR> noremap <C-n> /^\s*$<CR>]]?^\s*$<CR>jz<CR>
このように連続して行う操作は、2キーのシーケンスより、CTRL+1文字にマップした方が使いやすいと思う。