我剛剛意識到VIM 7.3內置了對突出顯示Markdown文件的支持。優秀。但是,它不會在標題上摺疊。Vim Markdown摺疊?
任何可以提供有關如何使這項工作的建議嗎?
另外,我使用的是降價只是作爲一種方式來獲得簡單的結構化文本。如果有更好的替代格式,請提出建議。但不知道我挖掘TVO或VimOutliner。
我剛剛意識到VIM 7.3內置了對突出顯示Markdown文件的支持。優秀。但是,它不會在標題上摺疊。Vim Markdown摺疊?
任何可以提供有關如何使這項工作的建議嗎?
另外,我使用的是降價只是作爲一種方式來獲得簡單的結構化文本。如果有更好的替代格式,請提出建議。但不知道我挖掘TVO或VimOutliner。
我有同樣的問題,並與JANDER的很好的解決方案發揮各地。唯一的問題是,通過使用語法定義摺疊,您將失去任何Markdown語法突出顯示。
鑑於您可能會對備用加價感興趣,我建議您使用reStructuredText,並且令人驚歎的Vst vim extension。它的摺疊非常好。 Rst比Markdown更強大。
我怎麼弄折在降價工作的唯一辦法,was't非常優雅,:set fdm=marker
和使用HTML註釋標記
<!-- My folding {{{1 -->
更多的幫助:help folding
這裏是一個遞歸一試標題摺疊規則。它不包括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
當我使用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
您可以簡化MarkdownLevel函數以僅使用'function MarkdownLevel() let h = matchstr (getline(v:lnum),'^#')+ if len(h) endif endfunction',我發佈smooshed到一行,因爲這是一條評論。 – 2012-08-29 16:06:46
不錯的東西,以及奧馬爾的積分。:-) – 2012-09-14 15:33:52
在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
我發現這些正則表達式還捕獲以#開頭的縮進代碼塊(它表示一個shell命令行)。取出\ s *開始和結束脩復。 – 2012-09-21 18:01:28
我猜你不看VimCasts。那個讓這種事情變得瘋狂的人。那就是:https://github.com/nelstrom/vim-markdown-folding
基於傑羅米&奧馬爾的建議,我想出了這個(我的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
「^ = +」表示匹配從行的開始的任何數目的連續'=的
的那麼這在vim中,使用DokuWiki文件很好:
foldmethod=expr foldexpr=DWTitleLevel() foldcolumn=5
而對於降價,我需要寫奧馬爾的代碼是這樣的:
if empty(j) | return "=" | else | return ">".len(j) | endif
我不知道代碼語法是如何工作的,但是你可以使用類似'return「>」的東西。 7 - j'? – 2014-07-19 06:20:52
@Brady Trainor,我試過類似'let k = 7-len(j)',然後'return「>」。k',但由於某種原因,我無法讓它工作,現在我更喜歡我的更長的解決方案,因爲它只觸發3和6之間的'j'值,這就是我想要的。 – JosephHarriott 2014-07-19 07:41:44
感謝'let'技巧,我只是用它來解決類似的問題。 – 2014-07-19 08:31:18
VOoM : Vim two-pane outliner值得一檢查出來。
它不僅提供了基本摺疊功能,還提供了通過第二大綱視圖窗格(類似於MS Word中的文檔圖)的輪廓導航。它支持大量的標記語言,包括其他答案中提到的其他標記語言--Markdown,viki,reStructuredText,vimwiki,org等等。
欲瞭解更多信息,請參閱screenshots和help page。
我無法使用該插件摺疊降價文件本身,但輪廓很好:) – luator 2017-06-30 10:55:31
let g:markdown_folding = 1
您可以通過在你的.vimrc
添加該啓用降價摺疊功能,如果你正在使用的Vim的最新版本 - 不需要是最新的,但我不知道確切的版本。
由於某些原因,它沒有記錄在自述文件中,但是you can find the related code in the repository。
僅供參考,如果您不希望在打開文件時關閉該部分,請參閱refer to this SO thread。我認爲增加這將是最好的方式,但你可能有不同的偏好。
set nofoldenable
從Vim 8開始,它默認包含在內(通過Tim Pope的markdown插件)。只需添加這的.vimrc:
let g:markdown_folding=1
要確保你有這個插件加載就可以運行
:showscripts
,尋找
vim80/syntax/markdown.vim
這Vimcast剛剛播出這個星期。 http://vimcasts.org/episodes/writing-a-custom-fold-expression/ – 2012-11-27 15:18:03