11

折り目のヘッダーとして使用される行にVIMでフォーマットを適用し続ける方法はありますか?

たとえば、次のコードがあります。

int foo(int a, int b) {
    int c;
....
}

折りたたむと、次のようになります。

+-- 4 lines: int foo(int a, int b) {----------------------------

ただし、「Folded」クラスに従って、行全体が強調表示されます。これを無効にする方法はありますか?構文が強調表示され続けますか?

[簡単な例として、これはそれほど重要ではありませんが、大きなデータファイルを表示する際にもフォールディングを広範囲に使用します。そこでは、フォーマットがはるかに重要になります]


4

2 に答える 2

7

ただし、「Folded」クラスに従って、行全体が強調表示されます。これを無効にする方法はありますか?構文が強調表示され続けますか?」

いいえ、折りたたまれた見出しのテキストは、ファイルの一部であり、直接編集できないテキストではなく、計算されて画面にオーバーレイされるだけです。「折りたたまれた」ハイライトは行全体に適用され、すべての折り目には同じ強調表示が適用されます。

アウトライナーとしてvimを使用する場合(VimOutlinerプロジェクトで)、vimソースをハッキングして、折り畳みレベルに応じて異なる折り畳みの強調表示を可能にしました。そのため、複数の折り畳み見出しの強調表示が適用されます(FoldLevel1、FoldLevel2など)。 。折り畳みの見出しで既存のテキストの強調表示を使用することはさらにハッキングされる可能性があると思いますが、折り畳みの仕組みを考えると、思ったよりも難しいかもしれません。

申し訳ありませんが、インデントのfoldmethodの提案は、とにかくあなたが探しているものとまったく同じである可能性があることに気づきました。これは、インデントされていない行の構文を保持しながら、折りたたまれたセクションの一種の見出しとして機能します。

于 2009-11-28T20:20:13.643 に答える
5

あなたが探しているのは、foldmethodを手動ではなくインデントに変更することだと思います。これはデフォルトです。これをコマンドモードで入力します。

:set foldmethod=indent

ここで、foo関数の内部に入り、zm(fold levelを1つ増やす)と入力すると、次のようになります。

int foo(int a, int b) {
+--  2 lines: int c;------------------------------------------------------------
}

foo行には引き続き構文が強調表示されます。もちろん展開するには、zrと入力します。便宜上、.vimrcに次の数行を入れて、すべてをすばやく折りたたんだり展開したりします。

" Folding and unfolding
map ,f :set foldmethod=indent<cr>zM<cr>
map ,F :set foldmethod=manual<cr>zR<cr>

ここにも良いチュートリアルがあります。もちろん、foldmethodのvimヘルプを読むと、インデントよりも好きな他のメソッドにつながる可能性がありますが、サンプルコードの外観はおそらくインデントが必要です。

于 2009-11-28T17:20:06.597 に答える