vim (MacVim) で実行し、1 行で使用する必要があります。
z.a2=cross(z.b, z.c)(z.b1, z.c1);
以下の行になりました:
z.b2=cross(z.c, z.a)(z.c1, z.a1);
vim (MacVim) で実行し、1 行で使用する必要があります。
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
現在の行だけでなく、ファイル全体に対して実行する場合%
は、の前に a を追加します。s
これは、単語内のものを含め、行の「a」、「b」、または「c」を変更することに注意してください (例: c
in 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);