vim: replace sub-match with the same number of new strings -
my plan pretty standard search replace, replacing instances of old_string new_string. problem want arbitrary number of old_strings following specific prefix. example:
old_string = "a" new_string = "b" prefix = "xxxx" xxxxaaaaaaaa => xxxxbbbbbbbb xxxxaaapostfix => xxxxbbbpostfix xxaaaa => xxaaaa etc. i'm not sure how this. imagine there's way s/xxxxa*/xxxxb{number of a's}/g or something, have no idea is.
you can this! use \= register evaluate vimscript. :h s/\=:
substitute expression *sub-replace-expression* *sub-replace-\=* *s/\=* when substitute string starts "\=" remainder interpreted expression. special meaning characters mentioned @ |sub-replace-special| not apply except "<cr>". <nl> character used line break, can 1 double-quote string: "\n". prepend backslash real <nl> character (which nul in file). then can use repeat , submatch functions build right string. example:
:%s/\(xxxx\)\(a\+\)/\=submatch(1).repeat('b', len(submatch(2))) i chose use \+ instead of * because pattern not found after substitute command finished (this effects hlsearch , n)
of course, if use \zs , \ze (start/end of match) atoms, can use less capturing groups, makes waaay shorter , clearer.
:%s/xxxx\zsa\+/\=repeat('b', len(submatch(0)))
Comments
Post a Comment