2011-06-29 13 views
6

Widziałem częściowe rozwiązania przez Internet, ale żaden naprawdę mnie nie satysfakcjonował: co muszę włożyć do mojego .vimrc (najlepiej, że nie chcę żadnego przypadku plik składni/* .vim) tak, że we wszystkich plikach .c/cpp/h, które otwieram, otrzymuję automatyczne składanie sekcji #ifdef ... #endif?Autofold #ifdef .. # endif w vim przez .vimrc

+0

Jakiego typu foldm używasz? Składanie składni? –

+0

Tak, składanie składni (ale myślę, że mógłbym, jeśli to ułatwia automatyczne składanie) – dcn

Odpowiedz

6

Jeżeli jedynym rodzajem składania że chcesz jest #ifdef sekcje, najprostszym sposobem jest utworzenie pliku ~/.vim/after/ftplugin/c.vim (może trzeba to zrobić w cpp.vim, nie jestem pewien) o następującej treści:

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

Jeśli naprawdę chcesz, aby umieścić go w .vimrc zamiast używać struktury ~/.vim/after/, można zrobić coś takiego:

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

można również rozważyć u śpiewać:

set foldmarker=#if,#endif 

Jako że złapie #if defined(...), #ifdef, #ifndef, #if 0 etc, jak również #ifdef.

Wykonanie tego ze składaniem składni jest trudniejsze, ponieważ trzeba będzie zmienić specyfikację składni, ponieważ nie obsługuje tego jako standard.

+2

vim już ma składanie składni C, ale nie składa się #x. Jak dodać to do automatycznego składania składni C? – orezvani

+0

Wzorzec '*. [Ch] {, pp}' nie działa dla mnie w pliku 'cpp', podobnie jak' * .cpp'. Kiedy używam tylko '*' to działa. Masz pojęcie, jaki jest problem? – oarfish

6

Wiesz, że możesz nawigować blokami warunkowymi preprocesora za pomocą klucza warunkowego %?

Również [# i ] # poruszać się w górę/w dół.

Więc można przejść do początku bloku warunkowego (być może z /^#Wprowadź), następnie

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

zd upuścić krotnie.

Być może uda Ci się opracować mały scenariusz dotyczący tej koncepcji. Nie jestem pewien, czy wystąpi (niepożądana) interakcja z regularnym składaniem składni, ponieważ nie mam zwyczaju tego używać. Zwykle stosuję składanie wcięć z ręczną manipulacją składaniem w ten sposób.