No vim, às vezes tenho ocasião de substituir as primeiras ocorrências de uma partida em uma linha, mas nem todas as que ggostariam. por exemplo:
a a a a a
para
b b b a a
Eu sei que poderia usar :s/a/b/[enter]:[up][enter]:[up][enter], mas isso é tedioso o suficiente em três repetições, tenho linhas com potencialmente mais de 10 substituições.
Eu tentei:
:s/a/b/3g: vim reclamou de caracteres à direita.:s/a/b/3: altera a primeira ocorrência nesta e nas duas linhas a seguir.3:s/a/b: igual ao anterior.:s/a/b/g3: altera todas as ocorrências nesta e nas próximas duas linhas.:3s/a/b: altera a primeira ocorrência na linha 3.:/a/,3/a/s/a/b: altera a primeira ocorrência em cada linha entre a próximaae a terceira linha que contémao arquivo (solicitando a reversão, se necessário).:/a/,/\([^a]*a\)\{3\}/s/a/b/: altera a primeira ocorrência em cada linha entre essa e a seguinte com 3as (e isso não seria facilmente extensível a uma pesquisa com vários caracteres).
E vários outros padrões de endereçamento, nenhum dos quais funcionou. Devo dizer que aprendi :sbastante sobre o comando tentando encontrar uma resposta para esse problema, mas ainda não o resolvi.
Alguém sabe como fazer isto?
(pontos de bônus por faixa específica, por exemplo, segunda a quarta ocorrências)
ne ., embora não tenha pensado em usá-los aqui. Certamente uma melhoria, obrigado.
s/a/=something/deve fazer o truque ( :help sub-replace-=). Não sou fluente o suficiente no Vim para escrever somethinglogo de cara .
:[up][enter]pode ser substituído por &, o que ainda não é o ideal, mas pelo menos é menos doloroso.