新しい折り目を作成すると、ファイル全体が折りたたまれることがあるのはなぜですか?
Aug 24 2020
vimで新しいフォールドを作成すると、ファイル全体がフォールドすることがあります。どうして?
(foldmethod=manual
)
例えば、
zi
(すべての折り目が開いています)zi
(すべての折り目が閉じられました)- 1〜309行目は閉じて折りたたまれ、617〜662行目は閉じて折りたたまれています(ファイルには662行あります)
- 私のカーソルは377行目にあります
- 私がやる
zfG
のファイル終了する行377からのすべての行を折り返すために
期待エンド・オブ・ファイルスルーライン377は閉じられ、ライン310から366が表示されます:
実際:ファイル内のすべての行が閉鎖されています
回避策:
zD
(すべての折り目を削除します):1,309fold
(フォールド1-309):377,$fold
(折りたたむ377-eof)
私のフォールド*設定:
foldclose=
foldcolumn=0
foldenable
foldexpr=0
foldignore=#
foldlevel=0
foldlevelstart=-1
foldmarker={{{,}}}
foldmethod=manual
foldminlines=1
foldnestmax=20
foldopen=block,hor,mark,percent,quickfix,tag,undo
foldtext=foldtext()
回答
1 filbranden Aug 24 2020 at 11:23
この動作は、377行目がファイルの先頭から始まる折り畳みの一部であり、その折り畳みが現在開いている場合に発生します。
その場合、Vimが作成する新しい折り畳みは実際には(377行目ではなく)1行目から始まり、Vimは新しい折り畳みを閉じて、ファイル全体を効果的に折り畳みます。
この動作は次の方法で再現できます。
zE
(すべての折り目を削除します。):1,309fold
(フォールド1-309、あなたが説明した最初の最初のフォールド。):617,$fold
(折り目617-eof、あなたが説明した2番目の最初の折り目。):1,400fold
(上部から始まり、377行目を含む折り目。)zo
(この最後の折り目を開きます!)377G
(377行目に移動します。)zfG
(最後まで折りますが、これは実際には1-eofを折ります!)
そのフォールドを明示的に開いていない可能性がありますが'foldopen'
、タグのフォローやマークへの移動など、のアクションの1つを介して開いている可能性があります。水平方向の動き(など377G0
)でさえ、その折り目を開くようにトリガーします。
折り目を視覚的に確認したい場合は、次のコマンドを使用して、各行の先頭に折りレベルを追加できます。
:%s/^/\=foldlevel('.')."\t"/
(これによりバッファが変更されますが、別の:%s
コマンドで簡単に元に戻すことができます。折り目を作成または削除すると同期がとれなくなり、行ごとの折り畳みレベルを更新できるようになります。同様の:%s
コマンドでこのような操作を行った後。)
また、zi
コマンドがすべての折り畳みを閉じる(折り畳みを有効にする場合)と述べましたが、それは実際には正確ではありません... Vimは手動で閉じて開いた折り畳みを追跡し、で切り替えたときにそれらの選択を保持'foldenable'
しzi
ます。
すべての折り目を閉じるコマンドは実際にはzMです。