Я пытаюсь создать простой, быстрый метод складывания для больших файлов разметки. Я использую метод fold-expr
в vim. Например, если я хотел бы начать складки на H1
и H2
записей уценки, мой vimscript код:vim замедляется при использовании fold-expr
function! MarkdownLevel()
if getline(v:lnum) =~ '^# '
" begin a fold of level one here
return ">1"
elseif getline(v:lnum) =~ '^## '
" begin a fold of level two
return ">2"
else
return "="
endif
endfunction
Это отлично работает, и я получаю вложенные складки. Однако, когда у меня есть большой файл уценки, vim значительно замедляется. Это неудивительно и, по сути, указано в справке с помощью expr в vim. Это потому, что знак =
говорит vim сканировать назад в файле до тех пор, пока не будет найдена первая строка с явно указанным foldlevel; это может быть тысячи линий.
Я попытался заменить последнюю строку с
else
" set foldlevel to foldlevel of previous line
return foldlevel(v:lnum-1)
endif
Но это не работает, как ожидалось. Кто-нибудь знает, как это исправить? Понятно, что я не понимаю, как работает функция foldlevel, или как реализуется алгоритм сгибания в vim.
Спасибо, я попробую профилировать его. – user128063
Я профилировал его, и проблема заключается в 'return '=" '. Его часто называют, и он занимает довольно много времени для запуска. Кажется, у меня не получается альтернативный запуск с 'return foldlevel (v: lnum-1)'. Интересно, есть ли способ обойти это. – user128063
Думаю, я исправил это. Буду признателен за любые отзывы, комментарии. – user128063