折りたたみを使用してドキュメント内の表示行の数を数えますか?


7

foldlevel新しく開いたドキュメントを自動的に設定して、できるだけ多くのドキュメントが画面に収まるようにするプラグインを作成したいと思います。(つまり、短いドキュメントを完全に開いた状態で開き、長いドキュメントを開くとほとんど折りたたむようにします。)

現在の折りたたみ状態または特定の折りたたみレベルを前提として、ドキュメントに表示される行数を報告するvimの組み込み関数はありますか?(つまり、閉じた折り目は1行としてカウントされますが、表示するために下にスクロールする必要がある行もカウントされます。)

回答:


6

良いアイデア!異なるテクニックを使用して目標を達成する基本的な機能は次のとおりです。

function! FitOnPage()
  normal! zR
  while &foldlevel > 0
    if line('w0') == 1 && line('w$') == line('$')
      break
    endif
    normal! zm
  endwhile
endfunction

それは最初にすべての折り目を拡張することによって機能します。次に、ドキュメント全体が画面上に表示されるか、すべての折り目が閉じるまで、折り目を(全体的に)閉じます。

表示される最初と最後の行がファイルの最初と最後の行であるかどうかをチェックすることにより、ファイル全体が画面上にあるかどうかをチェックします。

折り目を個別に閉じることでこれを少し改善できますが、それははるかに複雑になります。


それは賢い選択肢です。ドキュメント全体に表示されている行がいくつあるかを本当に知りたいのであれば、のようにすることができますnormal G | let i = 0 | while line('.') > 1 | normal k | let i += 1 | endwhile。たぶん今週末、これをいじくり回すことにします。ありがとう!
Ryan Lue

@RyanLue line()カーソルを移動する代わりに、短命の回答で述べた引数を使用するように関数を更新しました。
リッチ

あははは、そもそも自分がやりたいことを本当にやっていないことに気づいたので、すぐにその回答を辞めました。今日は脳梗塞の日だった。-_- '
Ryan Lue 2017

@RyanLueあなたが望んでいたことをしていないかもしれませんが、それは私が望んでいることを確実に実行します!;)
リッチ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.