Vim Markdown Folding?
Я только понял, что VIM 7.3 имеет встроенную поддержку для выделения файлов Markdown. Отлично. Однако он не складывается в заголовки.
Можно ли предложить предложения о том, как это сделать?
В качестве альтернативы я использую Markdown только как способ получить простой структурированный текст. Если есть лучший альтернативный формат, пожалуйста, предложите. Но не уверен, что я выкапываю TVO или VimOutliner.
Ответы
Ответ 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
Ответ 7
Я предполагаю, что вы не смотрите VimCasts. Парень, который делает это, сделал пугин только для этого. Вот он: https://github.com/nelstrom/vim-markdown-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