9 Stimmen

Autofold #ifdef..#endif in vim über .vimrc

Ich habe im Internet Teillösungen gesehen, aber keine, die mich wirklich befriedigt hat: Was muss ich in meine .vimrc einfügen (idealerweise möchte ich keine Syntax/*.vim-Datei riskieren), damit ich in allen .c/cpp/h-Dateien, die ich öffne, die automatische Faltung von #ifdef ... #endif Abschnitte?

8voto

DrAl Punkte 67029

Wenn die einzige Art der Faltung, die Sie wünschen, die #ifdef Abschnitte zu erstellen, ist der einfachste Weg, eine Datei ~/.vim/after/ftplugin/c.vim (Sie müssen dies möglicherweise auch in cpp.vim , ich bin mir nicht sicher) mit folgendem Inhalt:

set foldmarker=#ifdef,#endif
set foldmethod=marker

Wenn Sie es wirklich einbauen wollen .vimrc statt der Verwendung der ~/.vim/after/ Struktur können Sie etwa so vorgehen:

autocmd FileType *.[ch]{,pp} call FoldPreprocessor()
function! FoldPreprocessor()
    set foldmarker=#ifdef,#endif
    set foldmethod=marker
endfunction

Sie könnten auch die Verwendung in Betracht ziehen:

set foldmarker=#if,#endif

Denn das wird die #if defined(...) , #ifdef , #ifndef , #if 0 usw. sowie #ifdef .

Dies mit der Syntaxfaltung zu erreichen, ist schwieriger, da Sie die Syntaxspezifikation ändern müssen, da sie dies nicht standardmäßig unterstützt.

7voto

sehe Punkte 346808

Sie wissen, dass Sie Präprozessor-Bedingungsblöcke mit der % Schlüssel?

Auch, [# y ]# nach oben/unten navigieren.

Sie könnten also zum Anfang eines bedingten Blocks gehen (vielleicht mit /^#Enter ), dann

 zf%               -- fold to next conditional directive
 v2]#zf            -- fold to second next directive (e.g. #else... #endif)

zd die Falte fallen zu lassen.

Vielleicht können Sie ein kleines Skript zu diesem Konzept entwerfen. Ich bin mir nicht sicher, ob es (negative) Wechselwirkungen mit der regulären Syntaxfaltung geben wird, da ich diese nicht verwende. Normalerweise verwende ich die Einzugsfaltung mit manueller Faltungsmanipulation wie dieser.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X