Vim Markdown Folding? - PullRequest
       9

Vim Markdown Folding?

27 голосов
/ 30 сентября 2010

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

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


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

Ответы [ 11 ]

29 голосов
/ 13 января 2011

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

Я довольно новичок в 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     
7 голосов
/ 07 октября 2010

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

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

6 голосов
/ 24 марта 2012

Существует плагин 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 голосов
/ 01 октября 2010

Вот попытка применить правило рекурсивного сворачивания заголовка.Он не включает стиль подчеркивания заголовка 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 голосов
/ 06 августа 2017
let g:markdown_folding = 1

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

Почему-то это не задокументировано в README, но вы можете найти соответствующий код в хранилище .

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

set nofoldenable
4 голосов
/ 20 ноября 2012

Существует приложение плагин для этого на GitHub.

ВИМ-уценки сворачивание

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

ВИМ-уценки

3 голосов
/ 01 октября 2010

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

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

дополнительная помощь :help folding

2 голосов
/ 29 октября 2013

Исходя из предложений Джерома и Омара, я придумал это (для моего 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 modeline хорошо работает для файла DokuWiki:

foldmethod=expr foldexpr=DWTitleLevel() foldcolumn=5

А для Markdown мне нужно было написать код Омара так:

if empty(j) | return "=" | else | return ">".len(j) | endif
2 голосов
/ 23 ноября 2012

Полагаю, вы не смотрите VimCasts .Парень, который делает это, сделал пугину только для этого.Вот оно: https://github.com/nelstrom/vim-markdown-folding

1 голос
/ 22 декабря 2017

Начиная с Vim 8 он включен по умолчанию (через плагин уценки Тима Попа).Просто добавьте это в .vimrc:

let g:markdown_folding=1

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

:showscripts

и искать

vim80/syntax/markdown.vim
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...