Substituir incrementalmente uma determinada sequência


12

Digamos que tenho um texto como este abaixo:

CA (nn)
CA (nn)
CA (nn)
CA (nn)
CA (nn)
CA (nn)
CA (nn)
CA (nn)
CA (nn)
CA (nn)
CA (nn)

Agora eu quero substituir os nnnúmeros por assim

CA (0)
CA (1)
CA (2)
CA (3)
CA (4)
CA (5)
CA (6)
CA (7)
CA (8)
CA (9)
CA (10)

Eu costumava M-x replace-regexp nn RET \# RETfazer isso.

Questões:

  1. Desejo iniciar o número de substituição para começar em 1vez de 0. Ou melhor, comece com um número especificado, digamos 25. Como devo modificar o comando acima?
  2. Como substituir nnpor dígitos como 001, 002.... 998, 999etc - quero dizer com zeros à esquerda

Não é isso que você está pedindo, mas outra maneira de fazer isso é usar uma macro junto com um registro.
Caterpillar

Respostas:


12

Técnica geral

Sua string de substituição pode conter código arbitrário de Lisp. Na documentação para replace-regexp :

Em chamadas interativas, o texto de substituição pode conter '\,' seguido de uma expressão Lisp usada como parte do texto de substituição. Dentro dessa expressão, '\ &' é uma string que indica a correspondência inteira, '\ N' uma correspondência parcial, '# &' e '#N' os respectivos valores numéricos de 'string-to-number' e '# 'próprio para' número de substituições ', o número de substituições ocorridas até agora, começando do zero.

Podemos usar essa técnica de várias maneiras.

Começando de 1

O que queremos fazer é substituir nnpor um a mais do que replace-countvocê costumava usar \#.

Ligue #'replace-regexpcom o argumento \,(1+ \#):

C-M-% nn \,(1+ \#)irá substituir nn com 1primeiro, então 2, 3etc.

Começando às 25

Você pode modificar isso não apenas adicionando um, mas (no seu exemplo) 25:

C-M-% nn \,(+ 25 \#)

Zeros à esquerda

Ou podemos usar formatpara adicionar zeros à esquerda. Isso irá substituir nncom 000, 001, 002, etc. Você pode combinar outro código lisp para iniciar a 001, 025ou o que quiser.

C-M-% nn \,(format "$03d" \#)


5

Você também pode usar cua-mode.

Selecione a região do retângulo (todo o nn) e depois M-x cua-rectangle-mark-mode.

Em seguida, M-ne aceite os valores padrão.


Eu gostaria de poder aceitar isso como uma resposta também
Prasanna
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.