← Vim研究所

Vimで折りたたみを作る・消す(zf/zd/zD/zE)

2019-12-06 公開 ・ 更新: 2026-08-05

長い関数の中身を一時的に隠して全体像を見たいことがあります。テキストを消すわけではなく、見えなくするだけの機能がVimの折りたたみ(fold)です。作成と解除のコマンドを知っておくと、長いファイルの見通しがぐっと良くなります。

目次(5項目)
キーこれだけ覚える
zf{モーション}指定した範囲を折りたたむ
zdカーソル下の折りたたみを1段階削除
zD入れ子ごと再帰的に削除
zEウィンドウ内すべての折りたたみを削除

折りたたみを作る

zfにモーションを続けると、その範囲を折りたたみます。5行分をまとめて畳むならzf4jのように書きます。

BEFORE
function foo() {
  console.log('a');
  console.log('b');
  console.log('c');
}
zf4j
AFTER
+--  5 lines: function foo() {---

ビジュアルモードで範囲を選択してからzfを押しても同じことができます。行数を直接指定する{行数}zFや、コマンドラインからの:fold(ビジュアル選択と組み合わせて:'<,'>fold)でも同様に折りたためます。

この機能が有効になるのは、foldmethodmanualまたはmarkerのときだけです。foldmethod=syntaxfoldmethod=indentのように自動判定の方式を使っている場合、zfで手動作成しようとしても効かないことがあります。

折りたたみを解除する

キー動作
zdカーソル位置の折りたたみを1レベル分削除
zD入れ子も含めて再帰的に削除
zEウィンドウ内のすべての折りたたみを削除

zdの「1レベル分」は、入れ子になった折りたたみを外側から1段ずつ剥がしていくイメージです。

BEFORE
+--  6 lines: function outer() {
}
console.log('done');
zd
AFTER
function outer() {
+--  3 lines: function inner() {
  }
  inner();
}
console.log('done');

外側の折りたたみが消えても、内側のfunction inner() {はまだ畳まれたままです。ネストがないシンプルな折りたたみならzdだけで丸ごと消えます。

手動で作った折りたたみの削除は原則アンドゥできません。zd/zDは想定より広い範囲の折りたたみを一気に消してしまうことがあるので、複雑な入れ子構造では慎重に実行するのが安全です。

foldmethodによる自動折りたたみとの違い

ここまで紹介したのはmanual方式での手動作成ですが、Vimには他にも折りたたみ方式があります。foldmethod=indentはインデントの深さで自動的に折りたたみを作り、foldmethod=syntaxは構文(関数やブロックなど)の単位で自動作成します。ファイルタイプに応じて事前に折りたたみが用意されている状態で始めたいなら、こちらの自動方式のほうが向いています。zfによる手動作成は、自動方式ではうまく区切れない独自の範囲を一時的に隠したいときに使う、と役割を分けて考えると分かりやすくなります。

折りたたみが役立つ場面

テキスト自体を削除・変更しない点が折りたたみの利点です。特定の関数だけに集中したいとき、コード全体の構造を俯瞰したいとき、アウトラインエディターのような感覚でファイルの見通しを整理したいときに向いています。手動での作成に加えて、インデントの深さや構文(関数・ブロック単位)で自動的に折りたたみを作るプラグインも多くあります。

使ってみて

長い設定ファイルを読むとき、興味のないセクションをzfで畳んでおくと、スクロールする範囲が減って目的の場所にたどり着きやすくなりました。ただしzDで入れ子ごと消してしまい、作り直す羽目になったことも一度あります。範囲が複雑なときはzdで1段階ずつ解除するほうが安全だと学びました。

まとめ

折りたたみはzfで作り、zd/zD/zEで解除します。開閉の操作は別記事、折りたたみ間の移動はこちらの記事にまとめています。

← Vim研究所 トップへ戻る