🤲

Vimのページスクロールの挙動をちょっと改善するマッピング

2022/07/31に公開

Vimでは、<C-f>/<C-b>で1ページずつ、<C-d>/<C-u>で半ページずつスクロールすることができます。

じつはこれらの差はスクロール量だけではありません。

  • <C-b>はファイル先頭が見えているときにはカーソルが移動しないのに対し、<C-u>はファイル先頭までカーソルが移動する
  • <C-f>はファイル末尾がウィンドウ上端に来るまでスクロールする(scrolloffの設定による)のに対し、<C-d>はファイル末尾がウィンドウ下端から離れない


<C-f>はファイル末尾がウィンドウ下端から離れる


<C-d>はファイル末尾がウィンドウ下端から離れない

個人的に、<C-d>/<C-u>の挙動のほうが好みだったので、「<C-f>/<C-b>を入力すると<C-d>/<C-u>を2回実行する」マッピングを作りました。
countにも対応しているので、例えば2<C-f>を入力すると2ページスクロール(<C-d>を4回実行)します。

nnoremap <C-f> <Cmd>set scroll=0<CR><Cmd>execute 'normal!' repeat("\<C-d>", v:count1 * 2)<CR>
nnoremap <C-b> <Cmd>set scroll=0<CR><Cmd>execute 'normal!' repeat("\<C-u>", v:count1 * 2)<CR>

なお、<C-d>/<C-u>&scrollオプションの影響を受けるため、set scroll=0で初期値に戻しています。

https://vim-jp.org/vimdoc-ja/scroll.html

https://vim-jp.org/vimdoc-ja/options.html#'scroll'

Discussion