カスタムの ViM 折りたたみファイルを作成したいタイプのデータ ファイル (興味がある場合は ENDF) があります。折り畳みは、ファイルの列 66 ~ 80 の内容に依存 (定義) されます。
ファイルの列 66 ~ 80 は次のようになります。
-columns 1--65 -125 0 0 0
-columns 1--65 -125 3 1 1
-columns 1--65 -125 3 1 2
-columns 1--65 -125 3 1 3
...
-columns 1--65 -125 3 1 35
-columns 1--65 -125 3 099999
-columns 1--65 -125 3 2 1
...
-columns 1--65 -125 3 2 35
-columns 1--65 -125 3 099999
...
-columns 1--65 -125 3 099999
-columns 1--65 -125 0 0 0
-columns 1--65 -125 4 2 1
...
-columns 1--65 -125 4 2 195
最初のインデント レベルは、列 71 ~ 72 が同じ番号になるようにしたいと思います。上記の例では、これらの番号は3
,4
です。
2 番目の折り畳みレベルは、列 73 ~ 76 が同じ番号を持つ場所です。上記の例では、これらの数字は1
と2
ですが、最大 3 桁までの任意の数字を使用できます。
これがスクリプトでの私の最初の試みです。
" ENDF folding functions
setlocal foldmethod=expr
setlocal foldexpr=ENDFFolds(v:lnum)
let MF = '0'
let MT = '0'
" This function is executed
function! ENDFFolds(lnum)
" Get the current line
let line = getline(v:lnum)
let mf = strpart(line, 71, 72)
echom mf
" Check to see if we have moved into a new file (MF)
if mf == MF
" Check to see if we have moved into a new section (MT)
let mt = strpart(line, 73, 75)
if mt == MT
return "="
else
MT = mt
return ">2"
endif
else
MF = mf
return ">1"
endif
endfunction
このスクリプトを に入れました~/.vim/ftplugin/endf/folding.vim
。の結果が表示されるので、ファイルが見つかっていることがわかりますecho mf
。
残念ながら、これは機能しません。折り目は見当たりません。お知らせ下さい。