Poder de g
:
:g/\vdefn.*\n\s*\zs"([^"]|\n)*"/normal gngq
A parte entre /
s é bastante auto-explicativa, pois é o regex da sua pergunta original.
normal gngq
no final é um pouco interessante. gn
selecionará a próxima correspondência da expressão regular e gq
, é claro, formata essa seleção (como você mencionou na sua pergunta).
:g
é a parte realmente ótima. Este é, na minha opinião, um dos recursos mais úteis do Vim. O g
comando ex usa um regex e um comando Ex e executa o comando em todas as linhas correspondentes ao regex. Se você ainda não aprendeu :g
, eu recomendo fazê-lo, pois aumentará bastante sua produtividade. Alguns recursos são do Vim :help :g
ou do Power of g no wiki do Vim.
gn
peça está selecionando da linha em queV
é acionada até a próxima ocorrência (não a da mesma linha) do padrão. A documentação do Vim afirma que, se o modo visual estiver ativo, a seleção será estendida da linha atual até o próximo padrão. Isso está causando comportamento indesejado.