我将使用getline(1, '$')
获取文档中的所有行列表。和filter()
他们通过一些表达。但是我还需要保留索引(行号)以供参考。我怎么能这样做?
let lines = getline(1, '$')
filter(lines, 'EXPRESSION')
结果应该是列表或我可以引用索引的任何内容:[[1, LINE1], [4, LINE4],... [n, LINEn]]
您可以使用v:key
获取map()
中列表的索引,然后v:key + 1
将成为行数,如下所示。
let lines = map(getline(1, '$'), '[v:key + 1, v:val]')
call filter(lines, 'v:val[1] == "EXPRESSION"')
你不能直接从filter()
得到它,但你可以pass a function而不是表达式,函数可以索引行并将索引行存储为变量。例:
let b:filtered_lines = []
function! FilterWithIndex(idx, value)
if condition
let b:filtered_lines += [a:idx, a:value]
endif
return 0 " We don't care about filter's result
endfunction
call filter(getline(1, '$'), function('FilterWithIndex'))
echo b:filtered_lines
实际上我不认为这或map
比简单循环更好:
let idx = 0
let filtered_lines = []
let lines = getline(1, '$')
while idx < len(lines)
let line = lines[idx]
if condition
let filtered_lines += [idx, line]
endif
let idx += 1
endwhile
echo filtered_lines