↕️
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