Autofold #ifdef .. # endif в vim через .vimrc - PullRequest
8 голосов
/ 29 июня 2011

Я видел частичные решения по Интернету, но ни одно из них не по-настоящему меня устраивало: что мне нужно поместить в мой .vimrc (в идеале я не хочу использовать любой синтаксис / *. Vim файл), чтобы во всем.При открытии файлов c / cpp / h я получаю автоматическое сворачивание #ifdef ... #endif разделов?

Ответы [ 2 ]

8 голосов
/ 05 июля 2011

Если единственным типом фальцовки, который вам нужен, являются секции #ifdef, самый простой способ - создать файл ~/.vim/after/ftplugin/c.vim (вам также может понадобиться сделать это в cpp.vim, я не уверен) сследующий контент:

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

Если вы действительно хотите поместить его в .vimrc вместо использования структуры ~/.vim/after/, вы можете сделать что-то вроде этого:

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

ВыВозможно, вы захотите использовать:

set foldmarker=#if,#endif

, так как это поймает #if defined(...), #ifdef, #ifndef, #if 0 и т. д., а также #ifdef.

Doingэто со сложением синтаксиса является более сложной задачей, так как вам придется изменить спецификацию синтаксиса, поскольку она не поддерживает это как стандарт.

6 голосов
/ 05 июля 2011

Вы знаете, что вы можете перемещаться по условным блокам препроцессора с помощью клавиши % ?

Также, [# и ] # перемещаться вверх / вниз.

Таким образом, вы можете перейти к началу условного блока (возможно, с помощью / ^# Enter ), затем

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

zd чтобы сбросить сгиб.

Возможно, вы сможете разработать небольшой сценарий вокруг этой концепции. Я не очень уверен, будет ли (неблагоприятное) взаимодействие с обычным свертыванием синтаксиса, поскольку я не имею привычки использовать это. Я обычно использую складывание отступа с ручным управлением сгибом как это.

...