Я использую что-то вроде этого: 1,40 fo
но я думаю, не самый эффективный путь.
Что является Вашим?
Я использую FoldMethod = Marker
и иметь сопоставления для ввода
и
Откуда я хочу сгибаться для начала и конца. Я положил маркер начала на линии с тегом открытия блока, как:
<div id="topmenu"> <!-- {{{ -->
, поэтому, когда он сложен, я сразу вижу, какая складка содержит без необходимости добавлять дополнительный комментарий.
Для CSS еще проще, я просто использую FUPMarker = {,}
, и все определения автоматически сложиваются, показывая мне просто очень четкий список всех классов, тегов и идентификаторов, которые я могу открыть только тогда, когда я могу открыть нужно их. На самом деле все мои файлы CSS имеют эту строку в самом конце:
/* vim: set fdm=marker fmr={,}: */
Вы также можете визуально выбрать регион, который вы хотите забрать, и нажмите ZF
, если вы предпочитаете.
Я переворачиваю между отступом и маркером с этим в моем виммре...
let g:FoldMethod = 0
map <leader>ff :call ToggleFold()<cr>
fun! ToggleFold()
if g:FoldMethod == 0
exe 'set foldmethod=indent'
let g:FoldMethod = 1
else
exe 'set foldmethod=marker'
let g:FoldMethod = 0
endif
endfun
Отступы хорошо подходят для большинства красивых html, но я использую маркер для большого декларативного фальцовки оглавления документов. В зависимости от того, кто написал файл, один из них будет работать лучше, чем другой, поэтому вам нужен быстрый доступ к обоим.
Стандарт ничего не говорит о том, как реализовать полиморфизм. Один класс vtbl и один объект vptr - самый популярный способ. Надеюсь, следующий псевдокод будет полезен.
typedef struct {
void (*show)(void* self);
// more
} person_vtbl;
typedef struct {
person_vtbl* vtbl;
char name[20];
} person;
void person_show(void* self) {
cout<<"inside ... "<<static_cast<person*>(self)->name;
}
// more
static person_vtbl person_vtbl_ = { &person_show }; // vtbl for person class
void person_ctor(void* self, char const* name) {
person* p = static_cast<person*>(self);
strcpy(p->name, name);
p->vtbl = &person_vtbl // vptr of person object
}
typedef struct {
person base;
int scale;
} teacher;
void teacher_show(void* self) {
cout<<"inside the tearch ... "<<static_cast<teacher*>(self)->scale;
}
static person_vtbl teacher_vtbl_ = { &teacher_show };
void teacher_ctor(void* self, char const* name, int s) {
teacher* t = static_cast<teacher*>(self);
person_ctor(&t->base, name); // construct base part
t->scale = s; // construct teacher part
t->vtbl = &teacher_vtbl_; // vptr of teacher object
}
// construct teacher :
// person* ptr = new teacher("Zia", 16);
teacher* tmp = static_cast<teacher*>( malloc( sizeof *tmp );
teacher_ctor(tmp, "Zia", 16); // vptr of tmp points to teacher_vtbl_
person* ptr = &tmp->base;
// call virtual function though pointer
// ptr->show()
ptr->vptr->show(ptr); // call teacher_show(ptr);
-121--3787356- Можно попробовать cinclude2dot
-121--4859659-Лучший метод складывания vim для html: используйте haml вместо . Оптимальный вариант для css: используйте sass вместо .
Я на самом деле серьезно. Они делают его гораздо более компактным.
Я почти всегда использовал foldmethod = ignore
. Однако мое желание игнорировать строки по умолчанию для более высокого уровня сгиба верхних или нижних строк, а не нижних, вдохновило на следующее:
" Default foldmethod
" Similar to fdm=indent, but lets blank and comment lines default high.
set fen fdm=expr fdi=
set foldexpr=EswaldFoldLevel(v:lnum)
function! EswaldFoldLevel(lnum)
let ignored = '^\s*\([#/*]\|$\)'
if getline(a:lnum) !~ ignored
" In the general case, just use the indent level.
" It would be nice if it didn't skip several levels...
return indent(a:lnum) / &sw
endif
let previndent = 0
let prevnum = a:lnum - 1
while prevnum > 0
if getline(prevnum) =~ ignored
let prevnum = prevnum - 1
else
let previndent = indent(prevnum) / &sw
break
endif
endwhile
let nextindent = 0
let maxline = line('$')
let nextnum = a:lnum + 1
while nextnum <= maxline
if getline(nextnum) =~ ignored
let nextnum = nextnum + 1
else
let nextindent = indent(nextnum) / &sw
break
endif
endwhile
return max([previndent, nextindent])
endfunction
(Извините за выделение синтаксиса ...)
Я использую это как настраиваемый плагин, позволяя отдельным типам файлов переопределять его. Python, например, не хочет смотреть на предыдущие строки, а только на последующие.