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

x
x
x

更改为

1
2
3


现在,我使用Perl单线:

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


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

#1 楼

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

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


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

说明:

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

#2 楼

由于您提到了垂直选择和替换,因此您也可以这样做。使用CtrlV来选择要替换的文本锁,然后选择c并键入0,以将其替换为0。然后选择0:



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



如果您已经更换了单列,则可以使用gv快速重新选择同一区域。