Vimで折りたたみの間をジャンプ移動する(zj/zk)
折りたたみを多用したファイルで、1つずつスクロールして次の折りたたみを探すのは非効率です。折りたたみ単位でジャンプするコマンドを使えば、閉じた折りたたみを1ブロックとして数えて移動できます。
| キー | これだけ覚える |
|---|---|
| zj / zk | 次 / 前の折りたたみへ移動 |
| [z / ]z | 折りたたみ範囲の先頭 / 末尾へ移動 |
次/前の折りたたみへ移動する
zj/zkは、通常の上下移動j/kの頭にzを付けると覚えると忘れにくくなります。閉じた折りたたみを1つの単位として数えて移動します。
+-- 4 lines: function a() {----
+-- 4 lines: function b() {----
console.log('end');
+-- 4 lines: function a() {----
+-- 4 lines: function b() {----
console.log('end');
折りたたみが連続しているファイルでは、通常のカーソル移動より圧倒的に速く目的の位置へたどり着けます。
ネストした折りたたみでの挙動
zj/zkは「閉じられた折りたたみ」を1単位として数えます。折りたたみが開いている状態だと、その中の行も通常のテキストと同じ扱いになるため、ジャンプの対象としては数えられません。折りたたみをまたいで素早く移動したいなら、あらかじめzMで全体を閉じておくとzj/zkの効果を最大限に活かせます。
折りたたみ範囲内の端に移動する
[z " 折りたたみ範囲の一番上の行へ
]z " 折りたたみ範囲の一番下の行へ
これはzj/zkとは違い、今いる折りたたみの内部での移動になります。範囲が広い折りたたみや、入れ子になった折りたたみの境界を確認したいときに使います。使用頻度はそれほど高くないものの、大きな折りたたみの全体の長さを把握したいときには役立ちます。
入れ子の折りたたみで]zを使うと、今いる階層の折りたたみの終端までしか移動しません。さらに外側の折りたたみの終端までは移動しない点を覚えておくと、想定外の位置に飛んで戸惑うことを防げます。
関数ごとに折りたたんだ長いファイルを読んでいるとき、jを連打してスクロールするよりzjで折りたたみ単位で飛んだほうが圧倒的に速いと気づいてから、折りたたみを多用したファイルではこの2つのコマンドを最初に思い出すようになりました。開いた状態のままだとジャンプが効かないと気づかず、最初は「なぜ移動しないんだ」としばらく悩んだこともあります。今では作業を始める前にまずzMで畳んでから移動する、という順番が習慣になっています。
開閉操作との組み合わせ
これらの移動系コマンドは、開閉系のコマンドと組み合わせて初めて実用的になります。よくある流れはこうです。
- zMで全体を折りたたむ
- zj/zkで目的の折りたたみまで移動する
- zaで中身を開く
移動だけを覚えても、開閉のコマンドを知らなければ結局中身を確認できません。両方セットで身につけておくと、折りたたみを使ったナビゲーションが一通り完結します。
まとめ
折りたたみ単位で移動したいならzj/zk、範囲の端を確認したいなら[z/]zを使います。折りたたみの作成はこちら、開閉操作はこちらで扱っています。