vim substituição automática

2

Eu tenho as seguintes linhas:

    '0,
    '1,
    '2,
    '3,

Como colocar uma citação antes da vírgula?

Já experimentei o seguinte:

%s/[0-9],/&/g

so & aqui substitui o padrão correspondente ...

    
por linux-newbie 28.10.2012 / 17:53

5 respostas

7

Você pode usar algo como:

%s/\('[0-9]\),/',/

Ele usa \( e \) para criar um grupo de seleção que é referenciado por (que significa primeiro grupo) no lado substituto.

    
por 28.10.2012 / 18:03
2

Se você quiser mover a cota de lugar antes do número para um lugar antes da vírgula, use o agrupamento

%s/'\([0-9]\),/',/

ou para colocar outra aspa antes da vírgula, inclua-a no primeiro grupo:

%s/\('[0-9]\),/',/
    
por 28.10.2012 / 20:15
2

Normalmente eu uso macros para tarefas como esta.

qqEi'<Esc>0jq3@q

fará o trabalho (note que a parte <Esc> é uma tecla de escape pressionada, e não 5 teclas separadas). Aqui está um resumo:

  • qq começa a gravar uma macro e a atribui à chave q .
  • Ei'<Esc> vai para o final da palavra e insere o ' .
  • 0j vai para o começo da próxima linha.
  • q termina a gravação.
  • 3@q reproduz a macro 3 vezes, aplicando a mesma coisa às outras 3 linhas.

Substitua 3 pelo número de linhas que você tem.

    
por 28.10.2012 / 18:09
1
%s/,$/',/g

$ é o fim da linha

    
por 29.10.2012 / 01:27
1

Talvez você tenha se esquecido de definir a forma geral em que você precisa que isso funcione. Para fazer exatamente o que você pediu sem adivinhar, esta é a solução mais simples (preguiçosa!) Que funciona para sua entrada de exemplo:

%s/,/',/

Se você quiser lidar com casos mais complexos também, deve escrever exemplos melhores, incluindo o caso mais complexo, em que você precisa da substituição de padrão para funcionar e, idealmente, um exemplo da saída de destino também.

    
por 29.10.2012 / 17:01

Tags