vim编辑器,如何能够简单描述替换成某相同字符\{N}次的要求?
:%s/a/bbbbbbbb/g
後面的替换多次实在太繁琐,有没有类似正则一样的规则形成以下形式替换语法?
:%s/a/b\{8}/g
不是正则也行,只要能够形成简单的描述次数的形式就行,这样即使替换100次甚至更多,命令也不会很长.
上面忘说了,後面的替换内容无法用正则代替,所以上面那个正则规则只是一个简略描述替换相同字符多次的假设形式,但其实并没有效. 展开
我来回答
第一:定义一个函数
function! DumpChar(c,count)
let Count=a:count
let ret=''
while Count>0
let ret=ret.a:c
let Count=Count-1
endwhile
return ret
endfunction
这个函数可以返回一个字符串,这个字符串是由count个c构成的,比如你要生成8个b,就是DumpChar('b',8)
第二:使用替换命令
:s/a/\=DumpChar('b',8)/
这样就可以把字符'a'替换成8个'b‘了,假如要把'a'替换成16个'c',只要执行
:s/a/\=DumpChar('c',16)/
说明:函数定义也是在命令模式下输入的,先打个冒号然后输入函数中的每一行,输完一行就按回车,可以看下我的截图
PS:最近痴迷vim编辑器,所有对它有了入门级的体会。^_^
追送200分
没有你说的那种表达式。但是可以使用递归替换。
:let @a="%s/a/ba/g\<enter>"
5@a
:%s/a//g
第一句句实际上就是把寄存器 a 设置为替换命令 把 a 替换成 ba。你可以参考 :help q 。他解释宏记录命令。
第二句执行 5次 替换命令。a 就变成了 bbbbba 。你也可以 100@a 替换成100个b。但是效率就比较差了。高效率的方案就是用代码生成 替换字符串。你懂的!。
第三句删除 a 只剩下 bbbbb
囧,这种方法看起来好麻烦的样子.
看你自己需要了。 复杂的功能就需要复杂的代码。 而且这里的代码只有3行。不要忘记采纳哈。
使用内部函数可以方便的生成这样的字符串:
%s/a/\=repeat('b',8)/g