Aplique o comando do modo normal às correspondências regex


10

Estou usando a seguinte expressão regular para corresponder a uma sequência de documentação abaixo de uma definição de função Clojure:

\vdefn.*\n\s*\zs"([^"]|\n)*"

Existe uma maneira de executar o gqcomando do modo normal (formatar linhas) em todas as correspondências desse padrão em um determinado arquivo?

Respostas:


10

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 gngqno final é um pouco interessante. gnselecionará 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 gcomando 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 :gou do Power of g no wiki do Vim.


A gnpeça está selecionando da linha em que Vé 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.

@merb Opa, não percebi isso. Editado.
Doorknob

A seleção ainda é da linha da partida para a próxima partida. Percorrer manualmente os comandos do modo normal mostra que //s<cr>me deixa no início da partida na linha atual, mas //e<cr>me deixa no final da próxima partida, não na partida atual.

11
O problema parece estar com //s<cr>V. Quando corro :normal V, vou para o modo de linha visual, conforme o esperado. Quando corro, :normal //s<cr>meu cursor cai na primeira "partida, conforme o esperado. Quando corro :normal //s<cr>V, não recebo uma seleção visual.

11
Resolvi-o. O comando precisa ser normal gngq. Sugerindo uma edição.
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.