Vimの複数のfoldmethods


9

折りたたみオプションを使用します 弱虫 かなりたくさんあり、通常は設定しています foldmethod 構文へ。最近、私はカスタムの折り畳みを追加することが可能であることを発見しました。 /*{{{*/ そして /*}}}*/ これは、ソースファイルの大きなセクションをまとめてグループ化するのに非常に便利です。しかし、その機能を使うためにはfoldmethodをmarkerに設定する必要があり、構文の折りたたみを緩めます。

vimで同時に2つのアクティブなfoldmethodを持つことは可能ですか? set foldmethod=syntax,marker 動作しません。

回答:


4

いいえ、厳密に言えば、Vimで同時に複数のfoldmethodを有効にすることはできません。

構文の強調表示規則の書き方や、マーカーの折りたたみエミュレーションを追加したい言語の強調表示ファイルをハックする方法を学びたい場合は、マーカーベースの折りたたみをエミュレートできます。そうすることには、いくつかの欠点があります。

  1. foldメソッドを "syntax"に設定すると、マーカーや手動の折り畳み方法で機能する折り畳みを作成/削除するコマンド( "zf"、 "zd"など)は機能しません。

  2. フォールドレベルを「強制」するマーカーのエミュレーション(例:「 {{{1 "/" }}}1 ")折り畳みレベルを1つ増減させるのではなく(例:" {{{ "/" }}} ")は問題があります。折り畳みレベル番号を完全に無視しなければならないか、あるいは他の構文ベースの折り畳みルールに干渉する可能性があります。

マーカーベースの折りたたみが必要な場合は、その方法をすべて使用することをお勧めします。余分な時間と労力がかかる可能性がありますが、柔軟性を本当に必要とする場合は、特にこの2つを組み合わせることの難しさを考えると、それだけの価値があります。


2

私は同じことを探していました。構文ファイルをハックしたくないので、代わりにfoldmethodsを切り替えるためのマッピングがあります。今のところ私は構文とマーカーを切り替えるだけです:

nmap <Leader>ff :call <SID>ToggleFold()<CR>
function! s:ToggleFold()
    if &foldmethod == 'marker'
        let &l:foldmethod = 'syntax'
    else
        let &l:foldmethod = 'marker'
    endif
    echo 'foldmethod is now ' . &l:foldmethod
endfunction
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.