↕️
Vimでz連打でカーソル行を画面中央・上・下に移動させる
この記事はVim駅伝の2025-02-10の記事です。
前回の記事は静カニさんのvimのコミュニティに参加して思ったことです。
次回の記事はhokorobiさんのWindows で Vim を使った fuzzy find な定型文コピーです。
「エンジニアの楽園 vim-jpラジオ」第25〜28話を聞いて(特に第28話に)感銘を受けてEmacsに入門しました。
で、Emacsのtutorialをやってみたのですが、C-l(recenter-top-bottom)が便利ですね。
これは画面の再描画を行うのですが、ついでにカーソルの位置調整も兼ねており、
- 
C-lを入力すると、カーソル位置が画面中央(の高さ)に来るようスクロールする
- 追加でC-lを入力すると、カーソル位置が画面最上部に来るようスクロールする
- 追加でC-lを入力すると、カーソル位置が画面最下部に来るようスクロールする
- 追加でC-lを入力すると、1に戻って以下ループ
という動きをします。
これをVimでもやりたいな〜と思いました。
Vimでは、これらの機能はzz zt zbの3つのマッピングにそれぞれ割り振られています。
それぞれの位置でキーが独立しているのはVimらしくて良いのですが、Emacsの「連打すると順番に移動する」という感触が良かったので、zzを拡張し、これを連打するとztやzbにもなるようにしてみました。
.vimrc
nmap zz zz<sid>(z1)
nnoremap <script> <sid>(z1)z zt<sid>(z2)
nnoremap <script> <sid>(z2)z zb<sid>(z3)
nnoremap <script> <sid>(z3)z zz<sid>(z1)
<sid>の解説は以下の記事が詳しいです。
この拡張zzは3つのキーマップ(zz, zt, zb)を実行できるように3種類のサブモード(z1, z2, z3)を作っていることがポイントで、
- 
zzを入力すると、カーソル位置が画面中央(の高さ)に来るようスクロールする
- 追加でzを入力すると、カーソル位置が画面最上部に来るようスクロールする
- 追加でzを入力すると、カーソル位置が画面最下部に来るようスクロールする
- 追加でzを入力すると、1に戻って以下ループ
という動きをします。
これでEmacsのC-lを再現できました。
いろんなエディタを使うとインスピレーションを得られて良いですね。気に入った点はどんどん自分のVim設定に取り入れていきたいと思います。




Discussion