neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

asciidoc.vim (2010B)


      1 " Vim filetype plugin file
      2 " Original Author: Maxim Kim <habamax@gmail.com>
      3 " Previous Maintainer:  Luca Saccarola <github.e41mv@aleeas.com>
      4 " Maintainer:      This runtime file is looking for a new maintainer.
      5 " Language:        asciidoc
      6 " Last Change:     2025 Aug 05
      7 
      8 if exists("b:did_ftplugin")
      9    finish
     10 endif
     11 let b:did_ftplugin = 1
     12 
     13 if exists('b:undo_ftplugin')
     14    let b:undo_ftplugin .= "|setl cms< com< fo< flp< inex< efm< cfu< fde< fdm<"
     15 else
     16    let b:undo_ftplugin = "setl cms< com< fo< flp< inex< efm< cfu< fde< fdm<"
     17 endif
     18 
     19 " gf to open include::file.ext[] and link:file.ext[] files
     20 setlocal includeexpr=substitute(v:fname,'\\(link:\\\|include::\\)\\(.\\{-}\\)\\[.*','\\2','g')
     21 
     22 setlocal comments=
     23 setlocal commentstring=//\ %s
     24 
     25 setlocal formatoptions+=cqn
     26 setlocal formatlistpat=^\\s*[\\[({]\\?\\([0-9]\\+
     27 setlocal formatlistpat+=\\\|[a-zA-Z]\\)[\\]:.)}]\\s\\+
     28 setlocal formatlistpat+=\\\|^\\s*-\\s\\+
     29 setlocal formatlistpat+=\\\|^\\s*[*]\\+\\s\\+
     30 setlocal formatlistpat+=\\\|^\\s*[.]\\+\\s\\+
     31 
     32 function AsciidocFold()
     33    let line = getline(v:lnum)
     34 
     35    if (v:lnum == 1) && (line =~ '^----*$')
     36       return ">1"
     37    endif
     38 
     39    let nested = get(g:, "asciidoc_foldnested", 1)
     40 
     41    " Regular headers
     42    let depth = match(line, '\(^=\+\)\@<=\( .*$\)\@=')
     43 
     44    " Do not fold nested regular headers
     45    if depth > 1 && !nested
     46        let depth = 1
     47    endif
     48 
     49    if depth > 0
     50        " fold all sections under title
     51        if depth > 1 && !get(g:, "asciidoc_fold_under_title", 1)
     52            let depth -= 1
     53        endif
     54        " check syntax, it should be asciidocTitle or asciidocH
     55        let syncode = synstack(v:lnum, 1)
     56        if len(syncode) > 0 && synIDattr(syncode[0], 'name') =~ 'asciidoc\%(H[1-6]\)\|Title'
     57            return ">" . depth
     58        endif
     59    endif
     60 
     61    return "="
     62 endfunction
     63 
     64 if has("folding") && get(g:, 'asciidoc_folding', 0)
     65    setlocal foldexpr=AsciidocFold()
     66    setlocal foldmethod=expr
     67    let b:undo_ftplugin .= "|setl foldexpr< foldmethod< foldtext<"
     68 endif