我在一个文件中有 203 个该单词的实例ubuntu
,我想将每个实例替换为UBUNTU_X
,其中“X”是一个递增计数器。换句话说,原始文件是:
ubuntu xxxxxxxx ubuntu xxxxxxxx ubuntu xxxubuntuxxx xxxubuntu ubuntuxxxxxx ...
我想将其替换为:
UBUNTU_1 xxxxxxxx UBUNTU_2 xxxxxxxx UBUNTU_3 xxxUBUNTU_4xxx xxxUBUNTU_5 UBUNTU_6xxxxx ...
最后一次出现的情况必须是UBUNTU_203
答案1
ggOUbuntu_0
Esc0"ndeddqq/\<Ubuntu\>^Mde"nP^Ab"nyeq999@q
如果在正常模式下输入,这应该可以实现您想要的效果。
解释:
gg
- 转到文件的第一行O
- 在当前行上方创建一个新行并进入插入模式Ubuntu_0
- 输入文字- Esc- 退出插入模式,还可以使用Ctrl[
0
- 转到当前行的开头"nde
- 进入寄存器n,删除到单词末尾dd
- 删除当前行qq
- 开始将宏记录到寄存器 q 中/\<Ubuntu\>^M
- 搜索Ubuntu。 \< 和 \> 表示单词边界,Ctrl-M 与按 Enter 相同。de
- 删除到词尾"nP
- 将寄存器n的内容放在光标位置之前^A
- Ctrl-A,将光标下的数字加一b
- 转到当前单词的开头"nye
- 进入寄存器 n 将文本复制到当前单词的末尾q
- 停止录制宏999@q
\<Ubuntu\>
- 运行寄存器 q 中记录的宏 999 次(或当不再找到模式时停止)
可以根据您的具体要求稍作修改。例如,我假设您只想将“Ubuntu”作为整个单词进行匹配。我还假设您只想匹配给定的大小写,或者,如果您启用了忽略大小写,则您不介意“ubuntu”的各种大小写全部转换为“Ubuntu”。
答案2
一些 Linux 发行版已经编译了支持 Perl 的 vim。如果是这种情况,你有一个:perldo command
和一个:perl command
:perldo s/ubuntu/"UBUNTU" . ++$a/ge