增量替换给定的字符串


12

让我们说我下面是这样的文本:

交流电(nn)
交流电(nn)
交流电(nn)
交流电(nn)
交流电(nn)
交流电(nn)
交流电(nn)
交流电(nn)
交流电(nn)
交流电(nn)
交流电(nn)

现在我想nn用这样的数字代替

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

我曾经M-x replace-regexp nn RET \# RET做到这一点。

问题:

  1. 我想从开始1而不是从开始替换号码0。或者更确切地说是从指定的数字开始25。我应该如何修改以上命令?
  2. 如何更换nn与像数字001002...... 998999等等-我指的是前导零

这不是您要的,但是另一种方法是将宏与寄存器一起使用。
卡特彼勒

Answers:


12

通用技术

您的替换字符串可以包含任意的Lisp代码。从replace-regexp文档中

在交互式呼叫中,替换文本可能包含“ \”,后跟一个Lisp表达式,用作替换文本的一部分。在该表达式的内部,“ \&”是表示整个匹配项的字符串,“ \ N”是表示部分匹配项的字符串,“#&”和“ #N”分别表示“ string-to-number”和“#”中的数值'本身为'replace-count',到目前为止发生的更换次数是从零开始的。

我们可以通过多种方式使用此技术。

从...开始 1

我们要执行的Wat替换nnreplace-count您使用的Wat \#

打电话#'replace-regexp的说法\,(1+ \#)

C-M-% nn \,(1+ \#)将取代NN 1第一,然后23

开始于 25

您不仅可以添加一个,还可以修改它(在您的示例中)25:

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

前导零

或者我们可以使用format添加前导零。这将取代nn使用000001002等你可以结合其他Lisp代码上面的开始001025或任何你想要的。

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


5

您也可以使用cua-mode

选择矩形区域(所有nn),然后选择M-x cua-rectangle-mark-mode

接下来,M-n并接受默认值。


我希望我也能接受这个答案
Prasanna,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.