Zenn
↕️

Vimでz連打でカーソル行を画面中央・上・下に移動させる

2025/02/10に公開
10

この記事はVim駅伝の2025-02-10の記事です。
前回の記事は静カニさんのvimのコミュニティに参加して思ったことです。
次回の記事はhokorobiさんのWindows で Vim を使った fuzzy find な定型文コピーです。


「エンジニアの​楽園 vim-jpラジオ」第25〜28話を聞いて(特に第28話に)感銘を受けてEmacsに入門しました。

https://vim-jp-radio.com/

で、Emacsのtutorialをやってみたのですが、C-l(recenter-top-bottom)が便利ですね。

https://emacs-jp.github.io/tips/tutorial-ja#:~:text=画面を書き直す。このとき、カーソルのある行が画面の中央

これは画面の再描画を行うのですが、ついでにカーソルの位置調整も兼ねており、

  1. C-lを入力すると、カーソル位置が画面中央(の高さ)に来るようスクロールする
  2. 追加でC-lを入力すると、カーソル位置が画面最上部に来るようスクロールする
  3. 追加でC-lを入力すると、カーソル位置が画面最下部に来るようスクロールする
  4. 追加でC-lを入力すると、1に戻って以下ループ

という動きをします。

これをVimでもやりたいな〜と思いました。

Vimでは、これらの機能はzz zt zbの3つのマッピングにそれぞれ割り振られています。

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

それぞれの位置でキーが独立しているのはVimらしくて良いのですが、Emacsの「連打すると順番に移動する」という感触が良かったので、zzを拡張し、これを連打するとztzbにもなるようにしてみました。

.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>の解説は以下の記事が詳しいです。

https://zenn.dev/mattn/articles/83c2d4c7645faa

この拡張zzは3つのキーマップ(zz, zt, zb)を実行できるように3種類のサブモード(z1, z2, z3)を作っていることがポイントで、

  1. zzを入力すると、カーソル位置が画面中央(の高さ)に来るようスクロールする
  2. 追加でzを入力すると、カーソル位置が画面最上部に来るようスクロールする
  3. 追加でzを入力すると、カーソル位置が画面最下部に来るようスクロールする
  4. 追加でzを入力すると、1に戻って以下ループ

という動きをします。

これでEmacsのC-lを再現できました。

いろんなエディタを使うとインスピレーションを得られて良いですね。気に入った点はどんどん自分のVim設定に取り入れていきたいと思います。

10
vim-jp

Discussion

ログインするとコメントできます