Странное сворачивание в Vim, когда на одной строке есть {и a}. & * - PullRequest
2 голосов
/ 01 февраля 2011

В настоящее время я редактирую файл C ++ с функцией twp, аналогичной

int func_name_1(int param) {
   do_stuff();
   and_more();
}

int func_name_2(int param) {
   do_different_stuff();

   STRUCT_TYPE s = {5, 8, 10, 12};
   do_something_with(s);
}

Если я наберу zc для слова func_name_1, vim сворачивает функцию, как и ожидалось, так, чтобы она теперьвыглядит как

int func_name_1(int param) {--------------------

Вкл. func_name_2, однако функция складывается следующим образом:

int func_name_2(int param) {---------------------
   do_something_with(s);
}

, что не совсем то, что я хочу.По некоторым причинам, открытие и закрытие {} в одной строке, кажется, нарушают алгоритм складывания.

Если кто-то знает, как я могу получить «лучшее» сворачивание, я был бы признателен за любую подсказку в правильном направлении.

Редактировать параметры, которые, я считаю, имеют отношение к этой проблеме, установлены в моем буфере следующим образом:

set foldmarker={,}
set foldmethod=marker
set foldtext=getline(v:foldstart)

Редактировать II : Если я изменяюлиния с открытием и закрытием {...} до STRUCT_TYPE s = { 5, 8, 10, 12}; (обратите внимание на пробел после {), затем складывание работает как положено.

Ответы [ 2 ]

3 голосов
/ 02 февраля 2011

Ох .... Понятно ....

:help fold-marker говорит мне: Маркеры могут включать в себя уровень [..] Следующий номер указывает уровень сгиба

Таким образом, 5 сразу после { указал уровень сгиба, который запутал вещи.

0 голосов
/ 01 февраля 2011

Команда zc закрывает текущий фолд. Возможно, у вас есть папка, созданная для ее закрытия, поэтому ваша проблема заключалась в том, чтобы создать складку, а не закрывать ее.

Для создания сгиба используйте zf или zF. zf Работает в визуальном режиме, а также в движении, как zf2j, чтобы создать сгиб на 2 строки вниз. zF уже работает "линейно".

В вашем случае наиболее практичным способом было бы поместить курсор на скобку (например, с помощью f{) и запустить zf%, чтобы создать и закрыть сгиб, идущий к соответствующей скобке. В любом случае, было бы еще практичнее, если бы эта скобка была на другой строке (чтобы вы могли использовать ]] для перехода к ней), но это соглашение выходит за рамки этого ответа: -)

...