Мой первоначальный рефлекс - начать с
echo '['.join(map(filter(getline(1, '$'), '!empty(v:val)'), 'string(v:val)'),', ').']'
, которое можно превратить в
%d
call append(line('.')-1, '['.join(map(filter(getreg('"', 1, 1), '!empty(v:val)'), '"\"".v:val."\""'),', ').']')
И, таким образом, в команду
command! -range=% ToTuple
\ <line1>,<line2>d
\|call append(<line1>-1, '['.join(map(filter(getreg('"', 1, 1), '!empty(v:val)'), '"\"".v:val."\""'),', ').']')
Обратите внимание, что
echo string(filter(getreg('"', 1, 1), '!empty(v:val)')
Было бы намного проще, но тогда вместо двойных кавычек будут использоваться одинарные кавычки - это может иметь большое значение для некоторых языков.