8

В vim я обычно устанавливаю foldmethod indent на отступ для большинства типов файлов. В общем, мне нравятся файлы, которые открываются со всеми открытыми сгибами. Тем не менее, полезно немедленно начать использовать zm, чтобы начать закрывать сгибы по всему файлу, по одному уровню за раз, что позволяет мне увидеть общую структуру файла без каких-либо подробностей.

Единственное общее решение, которое я нашел, состоит в том, чтобы установить для foldlevelstart очень высокое значение, например, 99, чтобы убедиться, что все файлы (с учетом того, что разные файлы будут иметь разные уровни максимального отступа) начинают полностью развернутыми. Однако тогда мне придется многократно использовать zm, чтобы уменьшить уровень foldlevel до максимального уровня сгиба файла, обычно намного меньше 99, что является громоздким и непрактичным. Я мог установить уровень foldlevel вручную, используя командную строку vim, но мне все равно нужно знать максимальный отступ в файле.

Есть ли практический способ открыть файл с foldlevel установленным ровно на один больше, чем максимальный текущий уровень отступа / фолда в самом файле?

Например, предоставлен следующий файл:

a
  b
    c
      d1
      d2
    e
      f1
      f2

Первое нажатие клавиши zm покажет это:

a
  b
    c
+--  2 lines: d1------
    e
+--  2 lines: f1------

(Обратите внимание, однако, что он должен работать для общего случая, когда начальный максимальный отступ файла может быть любым значением).

3 ответа3

8

Это находит самый высокий уровень сгиба в текущем файле:

:let &foldlevel = max(map(range(1, line('$')), 'foldlevel(v:val)'))

Чтобы установить это автоматически, вы можете использовать :autocmd:

:autocmd BufWinEnter * let &foldlevel = max(map(range(1, line('$')), 'foldlevel(v:val)'))
0

Вместо использования zr используйте zR , который откроет все сгибы. Аналогично, zM закроет все складки.

-1

Набор параметров set nofoldenable позволяет начать файл с открытыми сгибами

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .