Вы не можете получить это напрямую из filter()
, но вы можете передать функцию вместо выражения, и функция может индексировать строки и сохранять индексированные строки в виде переменной. Пример:
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