Assumindo que sua seleção de modo visual esteja limitada às linhas com apenas foo(...);
, o melhor que posso encontrar é:
:let c=2|'<,'>g//let c=c+1|s/\v\S+/\="case ".c.": retVal = ".submatch(0)." break;"/
Mais claramente:
let counter = 2
'<,'>g// " for some reason, we need both markers and g// for 'let' to work
let counter = counter + 1
s/
\v " '\v' is "very magic"
\S+/ " used for '\S' - all non-whitespace characters
\= " Indicate that replacement is an expression
"case " . " '.' concatenates strings
counter .
": retVal = " .
submatch(0) .
" break;"
/
Adaptado de este post do Vim wikia .
Sim, eu sei. Isso é feio. Existe uma maneira melhor.
Outra maneira, usando macros: (Iniciar da primeira linha sem o case
)
qq
k:s/\v(case \d+: retVal = )(.*)\n(\s*)(.*)/\r break;/|exe "norm \<c-a>"
j
q
Em seguida, use @q
quantas vezes houver linhas.