2009-11-28 11 views
9

Gibt es eine Möglichkeit, VIM fortzusetzen, Formatierung auf die Zeile anzuwenden, die als die Kopfzeile für eine Falte verwandt wird?Syntaxhervorhebung in einer VIM-Falzkopfzeile

Z. B. Ich habe den folgenden Code:

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

Wenn gefaltet, ich sehe:

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

jedoch die ganze Linie wird nach der "Folded" Klasse hervorgehoben. Gibt es eine Möglichkeit, dies zu deaktivieren, so sehe ich weiterhin die Syntax-Hervorhebung?

[für ein einfaches Beispiel das nicht so wichtig ist, aber ich benutze auch ausführlich bei der Betrachtung großer Datendateien, und die Formatierung ist viel wichtiger für mich Falten]


Antwort

7

"Die gesamte Zeile wird jedoch gemäß der Klasse" Folded "hervorgehoben. Gibt es eine Möglichkeit, dies zu deaktivieren, damit ich weiterhin die Syntaxhervorhebung sehe?"

Nein, der gefaltete Überschriftstext ist kein Text, der Teil einer Datei ist und nicht direkt bearbeitbar ist, sondern einfach berechnet und auf dem Bildschirm überlagert. Die Markierung "Gefaltet" wird auf die gesamte Linie angewendet, und alle Falten werden mit derselben Hervorhebung versehen.

Für meine Verwendung mit Vim als Outliner (im VimOutliner-Projekt) habe ich die vim-Quelle gehackt, um unterschiedliche Hervorhebungen in Abhängigkeit von der Falzhöhe zu ermöglichen, so dass mehrfache Überschriften verwendet werden (zB FoldLevel1, FoldLevel2) , etc.). Ich nehme an, dass es weiter gehackt werden könnte, um die bereits vorhandene Hervorhebung des Textes an der Faltlinie zu verwenden, aber angesichts der Art, wie die Faltung funktioniert, vermute ich, dass das schwieriger sein könnte, als es klingt.

Es tut mir leid, dass der Vorschlag für foldmethod des Eindrucks genau das ist, was Sie suchen, die Syntax in den nicht eingerückten Zeilen beibehalten, während sie immer noch als eine Art Überschrift für den gefalteten Abschnitt fungieren.

5

Ich denke, was Sie‘ re sucht nach ändert die Foldmethod zu Einzug anstelle von Handbuch, das ist die Standardeinstellung. Geben Sie dies im Befehlsmodus ein.

:set foldmethod=indent 

Nun, wenn Sie in Ihrem foo Funktion und Typ zm gehen (erhöhen fache Niveau nach dem anderen), wird es wie folgt aussehen:

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

Die foo Linie noch Syntaxhervorhebung haben. Zur Entfaltung natürlich, tippen Sie zr. Der Einfachheit halber habe ich die folgenden Zeilen in meinem .vimrc schnell zu falten oder alles entfalten:

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

Es gibt eine auch ein gutes Tutorial here und natürlich das Lesen der vim Hilfe auf foldmethod könnten Sie zu anderen Methoden führen, die Sie mögen besser als Einzug, aber die Art, wie Ihr Beispielcode aussieht, möchten Sie wahrscheinlich Einzug.

+0

danke für die Antwort; vielleicht hätte ich dieses Beispiel aber nicht geben sollen. Ihre Kommentare sind gut für C-Code, aber ich falte auch oft Textdateien mit http://www.vim.org/scripts/script.php?script_id=158. Dies scheint sich für keine Lösung zu eignen. – Mikeage

+2

Ich würde nicht denken, dass, wenn Sie reine Textdateien falten würden, Syntax Highlighting sehr wichtig wäre (ich wäre neugierig, ein Beispiel zu sehen), aber wenn es die gleiche Sorte tut der Idee gilt.Wenn Sie die Falte unter der Zeile beginnen, die als Syntax hervorgehoben werden soll, sollten Sie die Zeile, die Sie markieren möchten, immer noch korrekt sehen. – mmrobins

+0

@mmrobins, würde es Ihnen etwas ausmachen, [diese Frage zur Hervorhebung der Python-Syntax in einer Faltlinie zu lesen] (http://stackoverflow.com/questions/8655799/syntax-highlight-python-in-a-vim-fold-line) und etwas Input darüber geben, ob es möglich ist und was ich ändern muss, damit dies funktioniert? –