Vimの折りたたみを開閉するコマンド一覧(za/zo/zc/zM/zRほか)
折りたたみの開閉コマンドはヘルプを見ると15種類近くあり、最初は全部覚えようとして挫折しそうになります。実際には数個を押さえておけば日常的な操作はほぼ困りません。
| キー | これだけ覚える |
|---|---|
| za | カーソル下の折りたたみを開閉(トグル) |
| zM / zR | 全部閉じる / 全部開く |
| zv | カーソル行が見えるところまで開く |
まず覚えるのはこの1つ
zaはトグル動作をします。閉じていれば開き、開いていれば閉じます。カーソル下の折りたたみを都度反転させるだけなので、開閉の状態を意識せず使えます。
+-- 5 lines: function foo() {---
function foo() {
console.log('a');
console.log('b');
console.log('c');
}
迷ったらこれだけ覚えておけば大抵の場面はしのげます。
個別に開閉したいとき
| キー | 動作 |
|---|---|
| zo | カーソル下の折りたたみを1段階開く |
| zO | カーソル下の折りたたみを再帰的にすべて開く |
| zc | カーソル下の折りたたみを1段階閉じる |
| zC | カーソル下の折りたたみを再帰的にすべて閉じる |
入れ子になった折りたたみを一気に開閉したいなら大文字(zO/zC)、1段階ずつ様子を見ながら開閉したいなら小文字(zo/zc)を使います。
ファイル全体を一括操作したいとき
| キー | 動作 |
|---|---|
| zM | すべての折りたたみを閉じる |
| zR | すべての折りたたみを開く |
| zm | 折りたたみのレベルを1段階深く(より閉じる) |
| zr | 折りたたみのレベルを1段階浅く(より開く) |
ファイルを開いた直後に全体を俯瞰したいならzMで全部閉じ、必要な箇所だけzaで開いていく、という流れが定番になります。
畳んだ状態自体を取り消す
zx " 折りたたみをすべて再計算し、開閉状態をリセット
zX " zxと同様、開閉状態をリセット
手動であちこち開閉を繰り返しているうちに、今どの折りたたみが開いていてどれが閉じているか分からなくなることがあります。zxを実行すると、foldlevelの設定に基づいた初期状態まで開閉状態がリセットされます。手が付けられなくなったら、一度これで仕切り直すと安心です。
カーソル行を確実に表示させる
zv
検索やジャンプで移動した先が折りたたまれていて中身が見えない、ということがあります。zvを押せば、カーソルのある行がちょうど見える状態まで自動的に折りたたみを開いてくれます。地味ですが、検索直後に使うと便利なコマンドです。
最初はzo/zcを律儀に使い分けていましたが、zaのトグル動作を知ってからはほぼそれだけで済むようになりました。全体を俯瞰したいときのzMと、検索後に見えない中身をすぐ表示するzv、この2つを追加で覚えたくらいで、残りのコマンドはほとんど使っていません。開閉状態がぐちゃぐちゃになったときにzxで仕切り直せると知ってからは、無理に手動で1つずつ整理し直す必要もなくなりました。
zaとzAの違い
zaと似たコマンドにzAがあります。大文字のほうは、入れ子になった折りたたみも含めて再帰的にトグルする点が違います。カーソル下の折りたたみだけを開閉したいならza、内側の折りたたみもまとめて開閉したいならzAと使い分けると便利です。日常的にはzaだけで足りることが多いですが、深い入れ子構造を一気に開きたいときはzAのほうが手数が少なくて済みます。
まとめ
覚える優先順位はza > zM/zR > zvの順で問題ありません。折りたたみの作成・削除は別記事にまとめています。開いたあと次の折りたたみへ移りたくなったら、折りたたみ単位の移動にzjとzkがあります。zvはカーソル行が見える最小限だけを開く動きなので(:help zv)、深い入れ子の中へジャンプしたあとの後始末に向いています。