用当前行号替换模式


15

我想用当前行号替换此文件中的“ x”。也就是说,改变

x
x
x

1
2
3

现在,我使用Perl一线式:

perl -pi -e '$x=$.; s/x/$x/' myfile.txt

我认为UltraEdit可以通过垂直选择和替换来实现。可以在vim中完成吗?(我的示例在这里假设'x'在一行中全部存在。但是实际文件中的行要复杂得多。)

Answers:


23

是的,vim可以做到这一点!进行全局搜索x,然后将其替换为\=printf("%d", line('.')。例如:

:%s/x/\=printf("%d", line('.'))

x如果需要,您还可以更改为其他搜索。

说明:

这将x用评估寄存器替换每次出现的(或您搜索的任何事件)\=。该寄存器评估vimscript代码,并返回一个字符串。在这种情况下,要评估的代码是“将我们所在的行打印为十进制数字”


9

由于您提到了垂直选择和替换,因此您也可以这样做。用于CtrlV选择要替换的文本锁,然后 c输入0,以0替换。然后,选择那些0:

在此处输入图片说明

然后按g<c-a>g+ Ctrla):

在此处输入图片说明

如果替换了单个列,则可以使用gv来快速重新选择同一区域。

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.