Подтвердить что ты не робот

Vim Markdown Folding?

Я только понял, что VIM 7.3 имеет встроенную поддержку для выделения файлов Markdown. Отлично. Однако он не складывается в заголовки.

Можно ли предложить предложения о том, как это сделать?


В качестве альтернативы я использую Markdown только как способ получить простой структурированный текст. Если есть лучший альтернативный формат, пожалуйста, предложите. Но не уверен, что я выкапываю TVO или VimOutliner.

4b9b3361

Ответ 1

У меня был тот же вопрос, и я поиграл с красивым решением Jander. Единственная проблема заключается в том, что, определяя сгибание с помощью синтаксиса, вы теряете подсветку синтаксиса Markdown.

Учитывая, что вас могут заинтересовать альтернативные разметки, я бы предложил использовать reStructuredText и удивительное Vst vim extension. Он отлично складывается. Rst намного сильнее, чем Markdown.

Ответ 2

Когда я использую уценку, я использую заголовки хэш-стиля с пространством, разделяющим хеши и текст. Это делает задачу складывания намного проще.

Я новичок в Vim, поэтому использую следующее на свой страх и риск. Я добавил следующий код в vimrc, и он складывает заголовки на основе количества хэшей и сохраняет синтаксическую раскраску.

function! MarkdownLevel()
    if getline(v:lnum) =~ '^# .*$'
        return ">1"
    endif
    if getline(v:lnum) =~ '^## .*$'
        return ">2"
    endif
    if getline(v:lnum) =~ '^### .*$'
        return ">3"
    endif
    if getline(v:lnum) =~ '^#### .*$'
        return ">4"
    endif
    if getline(v:lnum) =~ '^##### .*$'
        return ">5"
    endif
    if getline(v:lnum) =~ '^###### .*$'
        return ">6"
    endif
    return "=" 
endfunction
au BufEnter *.md setlocal foldexpr=MarkdownLevel()  
au BufEnter *.md setlocal foldmethod=expr     

Ответ 3

Вот пример рекурсивного правила складывания заголовка. Он не включает стиль подчеркивания заголовка Markdown, но я предполагаю, что это будет неудобно для ваших целей.

Поместите следующий код в свой .vimrc:

au FileType markdown syn region myMkdHeaderFold
        \ start="\v^\s*\z(\#{1,6})"
        \ skip="\v(\n\s*\z1\#)\@="
        \ end="\v\n(\s*\#)\@="ms=s-1,me=s-1
        \ fold contains=myMkdHeaderFold

au FileType markdown syn sync fromstart
au FileType markdown set foldmethod=syntax

Ответ 4

Существует плагин vim-markdown на https://github.com/plasticboy/vim-markdown.

Код, связанный с складыванием оттуда, выглядит следующим образом:

" fold region for headings
syn region mkdHeaderFold
    \ start="^\s*\z(#\+\)"
    \ skip="^\s*\z1#\+"
    \ end="^\(\s*#\)\@="
    \ fold contains=TOP

" fold region for lists
syn region mkdListFold
    \ start="^\z(\s*\)\*\z(\s*\)"
    \ skip="^\z1 \z2\s*[^#]"
    \ end="^\(.\)\@="
    \ fold contains=TOP

syn sync fromstart
setlocal foldmethod=syntax

Ответ 5

В GitHub есть приложение для плагина.

vim-markdown-folding

Когда вы редактируете файлы Markdown с помощью Vim, вы, вероятно, также захотите установить плагин Tim Pope Markdown.

vim-markdown

Ответ 6

Единственный способ, которым я получаю сворачивание для работы в методе уценки, не очень элегантен, :set fdm=marker и использовать тег комментария html

 <!-- My folding {{{1 -->

Дополнительная справка :help folding

Ответ 8

Основываясь на предложениях Джероми и Омара, я придумал это (для моего vimrc) автоматически и недвусмысленно складывать файлы DokuWiki (в которых заголовок верхнего уровня помечен ====== в начале строки, вплоть до заголовок четвертого уровня, помеченный символом ===):

function! DWTitleLevel()
    let j = len(matchstr(getline(v:lnum), '^=\+'))
    if     j =~ 6 | return ">1"
    elseif j =~ 5 | return ">2"
    elseif j =~ 4 | return ">3"
    elseif j =~ 3 | return ">4"
    endif
endfunction

'^ = +' означает совпадение с началом строки любое число смежных '=' s

Затем это в моделировании vim делает работу хорошо для файла DokuWiki:

foldmethod=expr foldexpr=DWTitleLevel() foldcolumn=5

И для Markdown мне нужно было написать код Omar следующим образом:

if empty(j) | return "=" | else | return ">".len(j) | endif

Ответ 9

VOoM: Vim двухполосный outliner стоит проверить его.

Он не только обеспечивает базовую фальцовку, но также обеспечивает накладную навигацию через панель 2-го плана (аналогично карте документа в MS Word). И он поддерживает большое количество языков разметки, включая другие, упомянутые в других ответах - Markdown, viki, reStructuredText, vimwiki, org и многие другие.

Для получения дополнительной информации см. скриншоты и справочная страница.

Ответ 10

let g:markdown_folding = 1

Вы можете включить функцию сбрасывания разметки, добавив ее в свой .vimrc, если вы используете последнюю версию Vim - не нужно быть последним, но я не знаю точной версии.

По какой-то причине он не задокументирован в README, но вы можете найти связанный код в репозитории.

FYI, если вы не хотите, чтобы разделы закрывались при открытии файла, ссылаются на этот поток SO. Я думаю, что добавление этого было бы лучшим способом, но у вас могут быть разные предпочтения.

set nofoldenable

Ответ 11

Как и в случае с Vim 8, он по умолчанию включен (через плагин по умолчанию Tim Pope). Просто добавьте это в .vimrc:

let g:markdown_folding=1

Чтобы убедиться, что этот плагин загружен, вы можете запустить

:showscripts

и найдите

vim80/syntax/markdown.vim