2015-05-03 23 views
1

摘要。我可以如何(以及如何?)將vim摺疊自動關聯在段標題行之前找到的asciidoc[id='']行與爲所述段創建的摺疊?針對asciidoc的vim摺疊:在節標題行中包含行_previous_

詳情asciidoc內容使段標題標識(除其他外,映射到呈現的HTML錨點標記名稱,並且還啓用文檔內部交叉引用),否則已知(我認爲?)爲block identifier。但是,[id='']線路覆蓋必須將之前的置於節頭部行,即使它是該部分的一部分。例如:

[id='under_construction', reftext='Under Construction'] 
## DISCLAIMER: This Document is Under Construction 

這使得一個asciidoc文件更難管理的VIM摺疊,如摺疊部分移動「輸」前行(和所有的部分id的獲得洗牌),因爲在眼裏vim fold的前一行屬於前一節。

回答

1

我不知道如何vim摺疊asciidoc,但我認爲新的部分開始於##(或==,從短暫看你提供的鏈接判斷),[id = ...]提供有關該部分的更多信息。 所以你可以看看Steve Losh's markdown folding:h fold-expr。 所以在這裏是用於降價摺疊修改後的代碼:

function! Fold_askiidoc(lnum) 
    let l1 = getline(a:lnum) 

    if l1 =~ '^\s*$' 
     " assume sections are separated by blank lines 
     return '0' 
    endif 

    " check next line 
    let l2 = getline(a:lnum+1) 

    if l2 =~ '^#' 
     " next line starts with hashes (or '=', or any symbol) 
     " number of hashes specifies indent level 
     return '>'.matchend(l2, '^#\+') 
    else 
     " otherwise keep previous foldlevel 
     return '=' 
    endif 
endfunction 

setlocal foldexpr=Fold_test(v:lnum) 
setlocal foldmethod=expr 

它檢查每一行,如果它是空白的,假設它是一個部分的結尾。如果下一行以#開始,則表示摺疊從當前行開始。 #的數量指定摺疊級別。 如果您只希望爲特定的行(如id = [''])添加字符串比較,它會摺疊段標題之前的任何非空行。

您可以將它保存到$HOME/.vim/after/ftplugin/asciidoc.vim。我不確定文件類型,如果它存在或您必須單獨創建它。從那裏它應該每次打開特定文件時自動加載。或者您可以將函數放入您的vimrc並指定 setlocal foldexpr = Fold_test(v:lnum) setlocal foldmethod = expr 作爲此文件類型的自動命令。