我需要在vim(MacVim)中使用它并在一行中使用它。
z.a2=cross(z.b, z.c)(z.b1, z.c1);
成为以下行:
z.b2=cross(z.c, z.a)(z.c1, z.a1);
你可以使用字典:
:let replacements = {'a': 'b', 'b': 'c', 'c': 'a'}
:s/[abc]r\@!/\=replacements[submatch(0)]/g
r\@!
防止c
的cross
被改变。
如果你想在整个文件而不是当前行上添加%
,请添加s
。请注意,这将改变该行上的任何'a','b'或'c',包括单词中的那些(例如c
中的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
看到:
:help Dictionary
:help :substitute
:help :s\=
:help \@!
:help \zs
:help \(\)
:help \<
这个单班轮怎么样?
%s/\.a/*b*/g | %s/\.b/*c*/g | %s/\.c/*a*/g | %s/\*a\*/.a/g | %s/\*b\*/.b/g | %s/\*c\*/.c/g
搜索:z\.(a)(2)=cross\(z\.(b), (z\.c)\)\(z\.b(1), (z\.c1)\);
替换为:z.$3$2=cross($4, z.$1)($6, z.$1$5);