2
我有一種類型的數據文件(如果您感興趣的話可以是ENDF),我想創建一個自定義的ViM摺疊文件。摺疊將取決於(由其定義)文件的列66-80的內容。如何在ViM中摺疊數據文件?
列的文件(S)的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
@benjifisher我更新了我的問題。我做了一個嘗試,但我仍然不太對。 – jlconlin
我想你想要'strpart(line,71,2)'和'strpart(line,73,4)'。試試':echo ENDFFolds(1)',':echo ENDFFolds(2)':你會得到什麼(包括你的調試行)?不要依賴全局變量,可以顯式檢查前一行。 – benjifisher