一度に複数のVimの折りたたみ方法を使用する方法はありますか?


13

私は持っています foldmethod=indent 私の中に設定 ~/.vimrcそして、一般的にそれは私のために働くと私はそれを維持したいと思います。

しかし、私が定期的に編集しているファイルがいくつかあります(そしてそれらは私の排他的な管理下にあります)、私がマーカーベースのシステムに追加したいのですめったに見ないこと(これはすでにインデントによって '区切られている')があらかじめ折り畳まれています。それはように見えます foldmethod=marker 私はそれを可能にするでしょう(私は必要ならばこれらの「前折り」を示すためにファイルの中の奇妙なコメントを気にしません) foldmethod=indent 私が使用できるように設定 zczo次に、セクションをインデントで折りたたむか展開します。言える限りでは、foldmethodを複数の値に設定することはできません。

これを達成するための別の方法はありますか(理想的にはファイル自体に埋め込まれたものを使用する)。


また、マーカーとインデントの両方の折り方を同時に機能させるようにしています。また、折りたたみ式を使用するのが最善の選択肢であるとも考えています。インデントとマーカーの両方に一致する式が見つかりましたか?
Jp_

1
@ Jp_いや、「怖くない。
Andrew Ferrier

回答:


9

それ自身のローカルな値を持つことができます 'foldmethod';あなたが設定したもの ~/.vimrc これは単なるグローバルデフォルトです。特定の値に異なるローカル値を設定する方法は複数あります。 バッファ

  1. 手動で :setlocal foldmethod=marker
  2. 特定のファイルタイプ(例:Javaファイル)の場合: :autocmd FileType java setlocal foldmethod=marker (または ~/.vim/after/ftplugin/java.vim
  3. 特定のファイルの場合: :autocmd BufRead /path/to/file setlocal foldmethod=marker
  4. を介してファイル自体の内部 モードライン (あなたはとにかくマーカーを追加する必要があるので、私はこれを好むでしょう):

/* vim: set fdm=manual : */

折りたたみ方法は1つだけです 内部 単一ウィンドウ異なる戦略を採用したい場合は、より柔軟な方法を選択する必要があります(例: expr そして、そこにある「他の」方法を(例えば、あなたの 'foldexpr' インデントを考慮してください。あるいは、同じバッファに対して2つのウィンドウ分割を使用し、分割ごとに異なるfoldmethodを設定します。

それはおそらくあなたが聞きたいものではないので、あなたは何かと一緒に何かをハックすることができます :autocmd CursorMoved 現在の行に基づいてfoldmethodを切り替えます。

" Use markers when in the first 100 lines, else use indent.
:autocmd CursorMoved,CursorMovedI <buffer> let &l:foldmethod = (line('.') <= 100 ? 'manual' : 'indent')

1
ありがとう。そのため、foldmethodをそのバッファ内のmarkerに設定できることがわかります。しかし、私が探しているのは、いくつかのセクションがありますが、それでもインデント折り畳み方式を使用できるようにするものです( あります あらかじめ折り畳まれたインデントで区切られています。上記(4)を行うと、 zczoなどは、そのバッファーで意図したとおりに機能しなくなります。私は私の質問を明確にしました。
Andrew Ferrier

明確化してくれてありがとう。答えを修正しました。
Ingo Karkat

はい、わかりませんでした。 foldexprは最善のアプローチのように思えますが、また複雑です。私はそれを試してみるよ。ポインタは+1します。
Andrew Ferrier

再度、感謝します。私はfoldexprを書き込もうとしていて、興味があるかもしれない関連Qをここに開いた: superuser.com/questions/560167/…
Andrew Ferrier

@IngoKarkat:行の下の最初の段落では、折り畳み方法は1つしかないことがあると書いています バッファあたり 。私はそれがあるべきだと思います ウィンドウごと
garyjohn
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.