Фолдинг Большого Текстового Файла в Vim

Чем больше эксплуатирую АБТФ и markdown-файлы, тем сильнее убеждаюсь, что главным для работы со структурой (которая маркируется шарпами в начале строки) является простая генерация содержания. У меня есть удобный инструмент в виде Малой Карты, а сегодня обнаружилось тоже удобное и, на удивление, быстрое решение в виде выражения для фолдинга по заголовкам маркдауна. Я его слегка допилил до своего случая — вместо автозагрузки в примере сделал вызов по нажатию ,mf

" быстрый фолдинг для маркдауна
" http://stackoverflow.com/questions/3828606/vim-markdown-folding

function! MarkdownLevel() 
    let h = matchstr(getline(v:lnum), '^#\+') 
    if empty(h) 
        return "=" 
    else 
        return ">" . len(h) 
    endif 
endfunction

function! MarkFold()
    setlocal foldexpr=MarkdownLevel()  
    setlocal foldmethod=expr  
endfunction

nnoremap ,mf :call MarkFold()<CR>

На моем главном файле в почти 7млн символов длиной с полутора тысячью заголовков работает шустро — благодаря тому, что используется fold-expr вместо очень медленного фолдинга по регулярным выражениям. Очень рекомендую.

Оставьте комментарий