Как я могу установить foldlevelstart в vim, чтобы изначально просто ничего не складывать, все еще позволяя zr работать немедленно?
В 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 ответа
Это находит самый высокий уровень сгиба в текущем файле:
:let &foldlevel = max(map(range(1, line('$')), 'foldlevel(v:val)'))
Чтобы установить это автоматически, вы можете использовать :autocmd
:
:autocmd BufWinEnter * let &foldlevel = max(map(range(1, line('$')), 'foldlevel(v:val)'))
Вместо того, чтобы использовать zr
использовать zR
, который откроет все складки. Так же, zM
закроет все складки.
Опция set nofoldenable
позволяет начать файл с открытыми сгибами