Поэтапно заменить данную строку


12

Допустим, у меня есть такой текст ниже:

AC (пп)
AC (пп)
AC (пп)
AC (пп)
AC (пп)
AC (пп)
AC (пп)
AC (пп)
AC (пп)
AC (пп)
AC (пп)

Теперь я хочу заменить на nnцифры, как так

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

Я имел обыкновение M-x replace-regexp nn RET \# RETдостигать этого.

Вопросы:

  1. Я хочу начать номер замены, чтобы начать с, 1а не с 0. Вернее начать с указанного числа, скажем 25. Как мне изменить вышеуказанную команду?
  2. Как заменить nnна цифры, как 001, 002.... 998, и 999т. Д. - я имею в виду с ведущими нулями

Это не то, что вы просите, но другой способ сделать это - использовать макрос вместе с регистром.
Caterpillar

Ответы:


12

Общая техника

Ваша замещающая строка может содержать произвольный код lisp. Из документации для replace-regexp :

В интерактивных вызовах текст замены может содержать «\», за которым следует выражение Lisp, используемое как часть текста замены. Внутри этого выражения '\ &' является строкой, обозначающей полное совпадение, '\ N' частичное совпадение, '# &' и '#N' соответствующие числовые значения из 'string-to-number' и '# 'само по себе для' replace-count ', количество замен, выполненных до сих пор, начиная с нуля.

Мы можем использовать эту технику несколькими способами.

Начиная с 1

Ват, который мы хотим сделать, это заменить nnна один больше, чем replace-countвы использовали с \#.

Позвоните #'replace-regexpс аргументом \,(1+ \#):

C-M-% nn \,(1+ \#)заменит nn 1сначала, затем 2, 3и т. д.

Начинается с 25

Вы можете изменить это, не просто добавив один, но (в вашем примере) 25:

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

Ведущие нули

Или мы можем использовать, formatчтобы добавить ведущие нули. Это заменит nnс 000, 001, 002и т.д. Вы можете комбинировать другой код LISP , чтобы начать на 001, 025или все , что вы хотите.

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


5

Вы также можете использовать cua-mode.

Выберите прямоугольник (все nn) и затем M-x cua-rectangle-mark-mode.

Далее M-nи примите значения по умолчанию.


Я хотел бы принять это как ответ, а также
Прасанна
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.