折りたたまれた部分が閉じたり開いたりしたときのカーソル位置の保存/復元

折りたたまれた部分が閉じたり開いたりしたときのカーソル位置の保存/復元

折りたたみを開くときに手動で作成された折りたたみか、構文に従って自動的に生成された折りたたみでも、カーソルはまだ折り返しの一番上の行にあります。代わりに、折りたたまれた部分が閉じる前に、折りたたまれた部分の内側の位置に移動したいと思います。

私は現在のカーソル位置にある種のフックでマーカーを再マップし、生成し、次にある種のフックでそのマーカーzcにカーソルを再マップして移動できると仮定します。zaPreFoldClosezozaPostFoldOpen

しかし、この機能を簡単にオンにするオプションがあったらと思います。どう思いますか?

ボーナス:バッファのロード/アンロード中にファイルマーカーを保存する方法は?コマンドにタグが含まれていますかmkview

ベストアンサー1

を使用して折りたたまれた部分を閉じてからzc(移動せずに)を使用して再度開くと、カーソル位置は折りたたまれたzo部分内に保持されます。これは、線が折りたたまれた部分に隠されているにもかかわらず、現在の行番号が折り畳まれた部分を閉じる前の位置に残っているためです。

ただし、一度移動すると、Vimはカーソル位置を目に見える位置に更新する必要があります。垂直移動の場合、これは最初の行が現在の行に折り畳まれていることを意味します。他のすべての行は折りたたまれた部分の内側に隠され、そこに到達するには折りたたまれた部分を開く必要があります。

これを変更するには、提案されたタグの使用方法が合理的に見えます。しかし、これは再訪問にのみ当てはまります。最後折りたたみ(または最大26折り、バッファで使用可能なローカルマーカーの数によって制限されます)。マーカーの利点は、行番号の変更に自動的に適応することです。つまり、スクロールなしで表示できる部分の編集は位置情報を無効にしません。タグ数よりも多くの折りたたまれた部分を保存しようとすると、折りたたまれた部分は現在の行範囲でのみ識別でき、編集中にその行が変更されるという問題が発生します。

要約:引き続きアイデアを試してください。ただし、最後の折りたたまれた部分に限定され、すべての折り畳まれた部分を覆うように一般化することはできません。


ボーナス回答:ファイル(大文字)タグは次の場所に保存されます。ウェイミング情報ファイル、次によって制御される:help viminfo-fそして:help viminfo-':mkviewスコアは考慮されません。

おすすめ記事