new*_*ser 1 regex vim substitution
我需要在vim(MacVim)中使用它并在一行中使用它.
z.a2 = cross(zb,zc)(z.b1,z.c1);
成为
z.b2 = cross(zc,za)(z.c1,z.a1);
谢谢你
你可以使用字典:
:let replacements = {'a': 'b', 'b': 'c', 'c': 'a'}
:s/[abc]r\@!/\=replacements[submatch(0)]/g
Run Code Online (Sandbox Code Playgroud)
所述r\@!的防止c的cross被改变.
如果你想在整个文件而不是当前行上添加一个%前面的s.请注意,这将改变该行上的任何"a","b"或"c",包括单词中的那些(例如cin cross).要限制这个问题,可以换着花样来\<[abc]\>,但如果你有一个会不匹配a2,所以建议:\<\([abc]\)\d*\>(和更换submatch(0)用submatch(1).如果你只是想匹配,你必须在z前面的,这很容易:
:let replacements = {'a': 'b', 'b': 'c', 'c': 'a'}
:s/z\.\zs[abc]/\=replacements[submatch(0)]/g
Run Code Online (Sandbox Code Playgroud)
看到:
:help Dictionary
:help :substitute
:help :s\=
:help \@!
:help \zs
:help \(\)
:help \<
Run Code Online (Sandbox Code Playgroud)