VIM 7.3には、Markdownファイルを強調表示するためのサポートが組み込まれていることに気づきました。すばらしい。ただし、見出しには折りたたまれていません。
これを機能させる方法について何か提案はありますか?
または、単純な構造化テキストを取得する方法としてのみMarkdownを使用しています。より良い代替形式がある場合は、提案してください。ただし、TVOまたはVimOutlinerを掘ったかどうかはわかりません。
同じ質問があり、ジャンデルのニースソリューションをいじってみました。唯一の問題は、構文を使用して折りたたみを定義すると、Markdown構文の強調表示が失われることです。
別のマークアップに興味があるかもしれないことを考えると、reStructuredTextとamazingVst vim extension を使用することをお勧めします。それは非常にうまく折りたたまれます。 RstはMarkdownよりもはるかに強力です。
マークダウンを使用するときは、ハッシュとテキストをスペースで区切ったハッシュスタイルの見出しのみを使用します。これにより、折り畳み作業が非常に簡単になります。
私は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
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
再帰的なヘッダーフォールディングルールを試してみます。 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
let g:markdown_folding = 1
最新バージョンのVimを使用している場合は、これを.vimrc
に追加することで、マークダウン折りたたみ機能を有効にできます。最新バージョンである必要はありませんが、正確なバージョンはわかりません。
何らかの理由で、READMEに記載されていませんが、 リポジトリに関連するコードがあります 。
参考までに、ファイルを開くときにセクションを閉じたくない場合は、 これを参照SOスレッド 。これを追加するのが最善の方法だと思いますが、好みが異なる場合があります。
set nofoldenable
有る アプリ そのためのプラグインはGitHubにあります。
VimでMarkdownファイルを編集しているときは、TimPopeのMarkdownプラグインもインストールすることをお勧めします。
マークダウンで折りたたむことができる唯一の方法は、あまりエレガントではありませんでした、:set fdm=marker
そしてhtmlコメントタグを使用する
<!-- My folding {{{1 -->
さらにヘルプ:help folding
私はあなたが見ていないと思います VimCasts 。それを作った男はこれだけのプーギンを作った。ここにあります: https://github.com/nelstrom/vim-markdown-folding
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
Vim 8以降、デフォルトで含まれています(Tim Popeのマークダウンプラグインを介して)。これを.vimrcに追加するだけです:
let g:markdown_folding=1
このプラグインがロードされていることを確認するには、実行できます
:showscripts
探して
vim80/syntax/markdown.vim
VOoM:Vim 2ペインアウトライナー チェックする価値があります。
基本的な折りたたみを提供するだけでなく、2番目のアウトラインビューペイン(MS Wordのドキュメントマップと同様)を介したアウトラインナビゲーションも提供します。また、他の回答で言及されている他の言語(Markdown、viki、reStructuredText、vimwiki、orgなど)を含む多数のマークアップ言語をサポートしています。