Что Ваш фаворит сворачивает метод (или секрет techique) в Vim для HTML, JavaScript и CSS?

Я использую что-то вроде этого: 1,40 fo но я думаю, не самый эффективный путь.

Что является Вашим?

6
задан alexchenco 31 January 2010 в 09:29
поделиться

4 ответа

Я использую FoldMethod = Marker и иметь сопоставления для ввода и Откуда я хочу сгибаться для начала и конца. Я положил маркер начала на линии с тегом открытия блока, как:

<div id="topmenu"> <!-- {{{ -->

, поэтому, когда он сложен, я сразу вижу, какая складка содержит без необходимости добавлять дополнительный комментарий.

Для CSS еще проще, я просто использую FUPMarker = {,} , и все определения автоматически сложиваются, показывая мне просто очень четкий список всех классов, тегов и идентификаторов, которые я могу открыть только тогда, когда я могу открыть нужно их. На самом деле все мои файлы CSS имеют эту строку в самом конце:

/* vim: set fdm=marker fmr={,}: */

Вы также можете визуально выбрать регион, который вы хотите забрать, и нажмите ZF , если вы предпочитаете.

8
ответ дан 8 December 2019 в 13:46
поделиться

Я переворачиваю между отступом и маркером с этим в моем виммре...

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, но я использую маркер для большого декларативного фальцовки оглавления документов. В зависимости от того, кто написал файл, один из них будет работать лучше, чем другой, поэтому вам нужен быстрый доступ к обоим.

5
ответ дан 8 December 2019 в 13:46
поделиться

Стандарт ничего не говорит о том, как реализовать полиморфизм. Один класс 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 вместо .

Я на самом деле серьезно. Они делают его гораздо более компактным.

3
ответ дан 8 December 2019 в 13:46
поделиться

Я почти всегда использовал 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, например, не хочет смотреть на предыдущие строки, а только на последующие.

1
ответ дан 8 December 2019 в 13:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: