回答:
良いアイデア!異なるテクニックを使用して目標を達成する基本的な機能は次のとおりです。
function! FitOnPage()
normal! zR
while &foldlevel > 0
if line('w0') == 1 && line('w$') == line('$')
break
endif
normal! zm
endwhile
endfunction
それは最初にすべての折り目を拡張することによって機能します。次に、ドキュメント全体が画面上に表示されるか、すべての折り目が閉じるまで、折り目を(全体的に)閉じます。
表示される最初と最後の行がファイルの最初と最後の行であるかどうかをチェックすることにより、ファイル全体が画面上にあるかどうかをチェックします。
折り目を個別に閉じることでこれを少し改善できますが、それははるかに複雑になります。
line()
カーソルを移動する代わりに、短命の回答で述べた引数を使用するように関数を更新しました。
normal G | let i = 0 | while line('.') > 1 | normal k | let i += 1 | endwhile
。たぶん今週末、これをいじくり回すことにします。ありがとう!