Учитывая извлечение списка, уже выполненного - см. Ответ Инго.
Если у вас не так много строк и индексов, следующее должно быть достаточно быстрым (оно должно быть быстрее, чем :global
решение)
:call setline(1, map(range(1, max(list)), 'index(list, v:val) >=0 ? printf("test%d # comment", v:val) : v:val'))
Если число строк и индексов значительно возрастет, я не уверен, что это решение O (N²) будет масштабироваться.Поскольку :for
петли медленные, я не уверен, как мы могли бы действовать эффективно, если бы в нашем распоряжении были инструменты.
Может быть:
:let d = {}
:call map(copy(list), 'extend(d, {v:val: printf("test%d # comment", v:val)})')
:call setline(1, map(range(1, max(list)), 'get(d, v:val, v:val)'))
, который окончательно запутан
Еще один запутанный O (N) путь - это
:call sort(list)
:call setline(1, map(range(1, slist[-1]), 'v:val == slist[0] ? printf("test%d # comment", remove(slist, 0)) : v:val'))