【发布时间】:2014-05-05 07:52:08
【问题描述】:
我有一种数据文件(ENDF,如果您感兴趣的话),我想为其创建一个自定义的 ViM 折叠文件。折叠将取决于文件第 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。
第二个折叠级别是第 73-76 列具有相同编号的位置。在上面的示例中,这些数字是 1 和 2,但可以是任意数字——最多三位。
这是我第一次尝试编写脚本。
" 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 的结果。
很遗憾,这不起作用。没有发现褶皱。请指教。
【问题讨论】:
-
如果这应该是 66-80 列,我为什么要计算 28 列?我认为您需要知道的所有内容都在
:help fold-expr下进行了描述。 -
@benjifisher 我已经更新了我的问题。我已经尝试过了,但还是不太对。
-
我想你想要
strpart(line, 71, 2)和strpart(line, 73, 4)。试试:echo ENDFFolds(1),:echo ENDFFolds(2):你得到了什么(包括你的调试线)?与其依赖全局变量,不如显式检查前一行。
标签: vim folding code-folding