2012-01-04 1 views
0

В большом приложении PHP я хотел бы свернуть все блоки кода внутри моего текущего блока, но не сам текущий блок. Например:VIM: Свернуть все блоки кода внутри моего текущего блока

if ($something) { 

    if ($another) { 
     // some code; 
    } 

    | <--THIS IS MY CURRENT CURSOR POSITION 

    if ($yetAnother) { 
     // more code; 
    } 

    if ($stillAnother) { 
     // yet more code; 
    } 

} 

Как я могу свернуть три внутренних if сек, но не внешний if?

Спасибо!

+1

Вы уже используете foldmethod = syntax/indent? – sehe

ответ

1

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

Это не совсем то, о чем вы просили, так как он будет закрывать все складки за пределами внешнего заявления if.

+0

Спасибо. Закрытие всех сгибов вне внешнего выражения 'if' является функцией, а не ошибкой! Тем не менее, мне пришлось переопределить складчатые знаки. – dotancohen

4

Смотрите, если это работает:

:set foldmethod=marker foldmarker={,} foldlevel=2 
+1

Мне пришлось «foldlevel = 1», но это получилось довольно красиво. Я никогда не думал о том, чтобы переопределить складчатость к чему-то настолько тривиальному. Имеются ли на практике недостатки? – sehe

+1

У меня никогда не было проблем с односимвольными метками разметки, но потом это было анекдотично. – holygeek

+0

все еще ценится! – sehe

2

Если у меня вопрос правильный, изменение складывания, описанное в заявлении , эквивалентно следующей последовательности действий.

  1. Закройте текущую складку (внутри которой находится курсор).
  2. Рекурсивно закрыть все складки внутри только что закрытого.
  3. Откройте текущую складку, удерживая внутренние складки закрытыми.

Отображение

:nnoremap <silent> <leader>f m`zcVzCzo`` 

, следовательно, выполняет команды, соответствующие вышеупомянутым шагам, сохранения положения курсора перед выполнением их, и восстановление его после.

Смежные вопросы