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?
Antworten
Zu viele Anzeigen?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.
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.