web-dev-qa-db-ja.com

Vim Markdown Folding?

VIM 7.3には、Markdownファイルを強調表示するためのサポートが組み込まれていることに気づきました。すばらしい。ただし、見出しには折りたたまれていません。

これを機能させる方法について何か提案はありますか?


または、単純な構造化テキストを取得する方法としてのみMarkdownを使用しています。より良い代替形式がある場合は、提案してください。ただし、TVOまたはVimOutlinerを掘ったかどうかはわかりません。

30
Muchin

同じ質問があり、ジャンデルのニースソリューションをいじってみました。唯一の問題は、構文を使用して折りたたみを定義すると、Markdown構文の強調表示が失われることです。

別のマークアップに興味があるかもしれないことを考えると、reStructuredTextとamazingVst vim extension を使用することをお勧めします。それは非常にうまく折りたたまれます。 RstはMarkdownよりもはるかに強力です。

7
ematsen

マークダウンを使用するときは、ハッシュとテキストをスペースで区切ったハッシュスタイルの見出しのみを使用します。これにより、折り畳み作業が非常に簡単になります。

私は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     
30
Jeromy Anglim

https://github.com/plasticboy/vim-markdown に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
6
blueyed

再帰的なヘッダーフォールディングルールを試してみます。 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
5
Jander
let g:markdown_folding = 1

最新バージョンのVimを使用している場合は、これを.vimrcに追加することで、マークダウン折りたたみ機能を有効にできます。最新バージョンである必要はありませんが、正確なバージョンはわかりません。

何らかの理由で、READMEに記載されていませんが、 リポジトリに関連するコードがあります

参考までに、ファイルを開くときにセクションを閉じたくない場合は、 これを参照SOスレッド 。これを追加するのが最善の方法だと思いますが、好みが異なる場合があります。

set nofoldenable
4
Sanghyun Lee

有る アプリ そのためのプラグインはGitHubにあります。

vim-markdown-folding

VimでMarkdownファイルを編集しているときは、TimPopeのMarkdownプラグインもインストールすることをお勧めします。

vim-markdown

4
cutemachine

マークダウンで折りたたむことができる唯一の方法は、あまりエレガントではありませんでした、:set fdm=markerそしてhtmlコメントタグを使用する

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

さらにヘルプ:help folding

3
kfl62

私はあなたが見ていないと思います VimCasts 。それを作った男はこれだけのプーギンを作った。ここにあります: https://github.com/nelstrom/vim-markdown-folding

2
weddingcakes

Jeromy&Omarの提案に基づいて、DokuWikiファイル(トップレベルのヘッダーが行頭で======でマークされ、4番目のレベルのヘッダーまで)を自動的かつ明確に折りたたむために(vimrc用に)これを思いつきました===でマーク):

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

'^ = +'は、行の先頭から任意の数の連続する '='に一致することを意味します

次に、これをvimモードラインで使用すると、DokuWikiファイルで適切に機能します。

foldmethod=expr foldexpr=DWTitleLevel() foldcolumn=5

そしてMarkdownの場合、私は次のようなOmarのコードを書く必要がありました。

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

Vim 8以降、デフォルトで含まれています(Tim Popeのマークダウンプラグインを介して)。これを.vimrcに追加するだけです:

let g:markdown_folding=1

このプラグインがロードされていることを確認するには、実行できます

:showscripts

探して

vim80/syntax/markdown.vim
1
jpgeek

VOoM:Vim 2ペインアウトライナー チェックする価値があります。

基本的な折りたたみを提供するだけでなく、2番目のアウトラインビューペイン(MS Wordのドキュメントマップと同様)を介したアウトラインナビゲーションも提供します。また、他の回答で言及されている他の言語(Markdown、viki、reStructuredText、vimwiki、orgなど)を含む多数のマークアップ言語をサポートしています。

詳細については、 スクリーンショット および ヘルプページ を参照してください。

1
studgeek